Fork me on GitHub

@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 🙂


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.


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


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?

Alex Miller (Clojure team)20:08:42

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

Alex Miller (Clojure team)20:08:24

If you see something wrong somewhere let me know


It was this "View All Projects" page, and the "Project Lead" property of the existing projects: Thanks, Alex. I do not see any that I know to be wrong.


> 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


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


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


Will push it.... sometime


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


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


But step 1 is demonstrating a clear benefit


Does it have an impact on lazy sequence type things?


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>


these run when the class gets loaded


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


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


(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


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


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

👍 12