As a consequence, in Clojure, nil's neutrality extends to other datastructures, for instance (hash)maps. (assoc nil :some :value) => {:some :value}.
Unsure what's so wierd about it, everyone (most) knows about slow cold startup times, and inability to control memory layout in JVM. Also, horrible C bindings
Just was curious if it was one of the commonly encountered things (which you listed) or if there were some other limitations I wasn't aware of.
I can see reasons for not wanting to use the JVM in specific cases. For example, it may not have the performance you want for the application you're developing.
I'm just confounded by general statements such as "JVM = no go", "I want to use C# but I'm more of a JVM guy than dotnet" (or vice versa).
Is this some bizarre nu-console war that's going on in the programming community that I have missed?
Unsure what's so wierd about it, everyone (most) knows about slow cold startup times, and inability to control memory layout in JVM. Also, horrible C bindings
I spent a day writing Clojure after watching a bunch of talks about it. Very keen on persistent data structures.
Every time I put a foot wrong it printed a Java stack trace for me, which was very large but told me nothing. I then went looking for the optimiser and discovered there wasn't one, it just falls through into the JVM JIT and hopes for the best. And finally it turned out a bunch of Clojure libraries were reskinned Java, and therefore likely to have the stereotypical properties of Java code. So that all seems directly attributable to the runtime.
Clojure the language is totally my sort of thing but that was such a horrendous experience that I haven't picked it up again in... what turns out to be seven years (found my stack overflow question about it).
https://bugs.launchpad.net/sbcl/+bug/2002244
https://sourceforge.net/p/sbcl/sbcl/ci/06f1639e53e99365f48a1...
If you are calling a generic function you can sometimes avoid such checks by introducing methods specialized on the type NULL (which contains only NIL).
- Let-it-crash philosophy of Erlang/Elixir
- Monadic errors of Rust
- Conditions/restarts/REPL model of Common Lisp
Using Go (or C or Python or anything with exceptions) feels like going back to the 1970s.
Interesting how Lisp code is NOT littered with " if something != null, ...", unlike your average Java project (or even python, but it's less visible), and just works.
My understanding is that busines-as-usual handling of nil (empty lists) implicitely confers to Lisp code monadic style which help to avoid tedious checks