I’m not sure, if this is the right place, but off we go!
My name is Alexander, my favourite superhero is Captain Obvious. I live in Germany and speak German and English with a smattering of French, Latin and Arabic.
I’m afraid I can’t rightfully call myself a Clojurian, but I came here for the SICM study group. I am proficient in Scheme and Common Lisp, however. My opinion on Clojure is that it’s too complicated, both the language and the tooling. But you may attempt to change my mind. I’m also not that hot on JVM integration, if I needed it, I’d rather use ABCL or Kawa.
I’m particularly interested in game programming (though I have nothing to show) and numerical stuff.
I’m also past my mid-fifties and may be ill suited to learn programming stuff. We’ll see.
Other than programming/computer stuff, I have the following interests:
Drinking tea (preferably not prepared according to Orwell’s instructions).
Tabletop Roleplaying games.
Tsundoku.
Watching YouTube videos rather than doing anything useful.
One of the things I love about Clojure is how many common functions and data structures are designed to work together in various convenient ways. Maybe that will appeal to you when you get to know Clojure better, but everyone’s different.
I don’t know Kawa, but the last time I used ABCL (several years ago), I found calling Java libs complicated and painful. Maybe it’s easier now, but I remember feeling that Java interop was intrinsically challenging for ABCL because of differences in Common Lisp and Java semantics.
Clojure was defined from the start to be able to work easily with Java libraries. Its semantics were designed around the JVM. In many cases, using a Java library is absolutely trivial, and in other cases it’s quite comfortable. In a few cases it is painful, but I don’t think many people experience that (though I have).
An “absolutely trivial” case:
I often use a Java pseudorandom number generator, ec.util.MersenneTwisterFast.
Add one line in my leiningen project.clj:
:java-source-paths ["src/java"]
Add the MersenneTwisterFast.java file to directory src/java/ec/util .
Add
(:import [ec.util MersenneTwisterFast])
to the ns declaration at the top of a file.
Add a line such as this to a function that will return a random number generator object:
(let [rng (MersenneTwisterFast. long-seed)]
Make calls to the Java lib e.g. like this:
(.nextDouble rng)
That’s pretty much it. When I run my Clojure code using Leininegen, the Java source automatically gets compiled and runs when I call it. I usually wrap this stuff in a small set of Clojure functions, but that only takes a few lines.
(btw, for anyone interested, I no longer think a Mersenne Twister pseudorandom number generating algorithm is ideal for my work, and I’ll probably switch to another Java or Clojure library in the future.)