Fork me on GitHub

I somehow happened across the new programming language Pyret recently. It seems to have a fairly well thought out definition for 3 different equality operators, including identical, equal-always, and equal-now, where equal-always looks very close to Clojure =, but Clojure = also does double duty for equal-now, which is more like Java .equals:


Stuff I geek out on after writing the equality guide for Clojure:

Alex Miller (Clojure team)04:02:21

If you come here with info about performance degradation from latest java 8 or 11 upgrade, please provide me the following info: 1) java -version (when it is happening) 2) Clojure version 3) Leiningen version (if using lein) 4) a repo where you experienced the problem 5) the command you run in that repo to see it

Shantanu Kumar18:02:19

@alexmiller You might want to look at this thread:!topic/mechanical-sympathy/lflljWsKw0M - 8u201 received a zero-day fix that screwed up performance for static methods

Alex Miller (Clojure team)18:02:31

This looks entirely relevant, thank you for the link. In particular this affects perf during static initialization and user.clj is loaded during RT static initializer, which matches several things about the repro

hiredman05:02:54 is a small reproducible case the user.clj performance issue I was helping someone with earlier. what I see is on some jdks loading core.async from user.clj takes about twice the time as loading it from a -i script. this appears to be in some way general slowness loading code from user.clj, more apparent when it is macro heavy

Alex Miller (Clojure team)05:02:46

yes, the macro heavy aspect seems to be common across multiple cases

Alex Miller (Clojure team)06:02:25

I filed a Java bug report


@alexmiller can you put a link to the bug report?

Alex Miller (Clojure team)06:02:12

I presume it is going through some triage machinery to measure its worth

Alex Miller (Clojure team)06:02:29

and then, if we are very lucky, it will become a Bug

Alex Miller (Clojure team)06:02:49

but more likely, they'll just ask for Java code

Alex Miller (Clojure team)06:02:28

I have additionally reached out via Other Means


What about using the graal jvm with clojure. It works, but is it faster?

Alex Miller (Clojure team)07:02:41

if you mean with native-image, then yes it's much faster to start, but it's precompiled so can't jit based on runtime data and is maybe slower after that

Alex Miller (Clojure team)07:02:23

there are some significant limitations with dynamic loading so it depends a lot what your program is doing as to whether you can make a native image at all


No, just the JVM packed with Graal


Is this intentional?

(meta '^:x []) ;=> nil
(meta '^:x [:a]) ;=> {:x true}
(meta '^:x a) ;=> {:x true}
Looks like a bug


@bronsa Aha, thanks! I couldn’t find that ticket in JIRA.


@alexmiller FWIW Rich vetted the ticket a long time ago, before it was closed as duplicated and I reopened it, dunno if it should've been bumped back to pre-vetted

Alex Miller (Clojure team)14:02:45

yeah, I know. It's fine. (needs screening of course)




sorry for the messy history on that ticket :)


that’s an oldie