Fork me on GitHub
#clojure-dev
<
2018-08-08
>
andy.fingerhut19:08:05

@seancorfield I know you volunteered to maintain some Clojure contrib projects a while back (cool, and thanks). Did you by any chance change the "Project lead" in JIRA for those projects to point at you, instead of the original lead? I ask just because then it will be clearer which projects others should bug you about 🙂

andy.fingerhut19:08:48

Trigger for this question: I saw a Github issue with a recent ping for update for the algo.generic lib. Not sure if Konrad Hinsen is still interested in examining issues there. https://github.com/clojure/algo.generic/pull/4#issuecomment-411517013

seancorfield20:08:27

@andy.fingerhut What page in JIRA are you referring to?

seancorfield20:08:56

If you mean Confluence, I guess I could go change any that are wrong. If you actually mean JIRA, I believe only @alexmiller can update that?

alexmiller20:08:42

I did update jira for Sean when he took over projects recently

alexmiller20:08:11

And build box

alexmiller20:08:24

If you see something wrong somewhere let me know

andy.fingerhut20:08:26

It was this "View All Projects" page, and the "Project Lead" property of the existing projects: https://dev.clojure.org/jira/secure/BrowseProjects.jspa#all Thanks, Alex. I do not see any that I know to be wrong.

danielcompton20:08:16

> As the most obvious use case, dynamic constants can be used to properly implement lazy values. Lazy values are typically used to represent expensive objects only on-demand when they are used. As of today, lazy values are often implemented by using so-called double checked locking, a pattern that is for example implemented by the scalac compiler for its lazy keyword

danielcompton20:08:40

Is this something that Clojure might be able to take advantage of?

ghadi20:08:19

I have a branch that does constantdynamic in the compiler @danielcompton

ghadi20:08:32

Will push it.... sometime

ghadi20:08:09

It should help with class initialization time (making AOT startup faster), but there are a couple kinks to work out.

ghadi20:08:24

We can't obviously do anything in mainline clojure for a little while

ghadi20:08:38

But step 1 is demonstrating a clear benefit

danielcompton20:08:47

Does it have an impact on lazy sequence type things?

ghadi20:08:05

no, it makes one time class initialization faster. When you compile a function or namespace, some constants (vars, vectors, maps) are in the static initialization block <clinit>

ghadi20:08:13

these run when the class gets loaded

ghadi20:08:53

condy allows those things (vars, keywords) to be constructed when they're needed -- AKA later than startup, when the functions are called

ghadi20:08:17

it also removes a bunch of static final fields on the classfiles themselves

ghadi20:08:47

(defn outer
  []
  :these [:constants :are] :lazy
  (fn inner []))
the load of the class file for inner can be delayed until you call outer for the first time. Same with the keywords and the vector

ghadi20:08:59

The impact of these is negligible on the individual function level, but when loading clojure.core can be significant -- Yet to be proven.

ghadi20:08:15

I've had to work hard to simply offset the startup cost of the extra linkage logic

👍 3