Clojure for the Erlang VM
clojerl.org
clojerl.org
If anyone wants something that feels a bit more vanilla-erlang-ish, one should also check out Lisp Flavoured Erlang. It is almost a direct one-to-one translation of Erlang into Lisp-land (actually made by one of Erlang's co-creators), but also provides Common-Lisp-Style macros, and a much more consistent, cleaner syntax than vanilla Erlang.
This list is pretty long: https://clojerl.github.io/differences-with-clojure/
For now, the JVM is the only way to get the full Clojure experience.
That being said they've made some concessions to the fact that it would be really nice to have portable Clojure code with `.cljc` files, but those are only portable Clojure code by matter of convention (the only technical thing `.cljc` files accomplish is allowing you to use reader conditionals).
Personally, I wish Clojure went further. Even with the commitment to being a hosted language, it still is clunkier at interop than Scala or Kotlin, two languages which nonetheless do have independent semantics as specified in their respective language specifications. It kind of seems you end up with the worst of both worlds (worse interop and no consistent semantics), although to be fair Clojure also commits far more heavily to the FP paradigm than Kotlin or even Scala, which makes it intrinsically more difficult to have seamless interop with Java (yes yes yes its interop with Java is already quite good, just not quite at the level of the others).
[1]: https://gist.github.com/macintux/6349828#alternative-languag...
If you're making a language and not targeting one of them, you're DOA.
† although Intel Gen, RADEON, and the NVIDIA GPU ones might be an exception
https://medium.com/clojure-on-the-beam/agents-9de923017adf
that discusses why Clojure 'agents' haven't been implemented in BEAM yet. I think (and I'm not familiar with Erlang) that Clojure agents are very similar to Erlang actors.
Actors are an instance of an object that has inherent logic and maintains mutable state within itself
Agents are state with logic attached to them that are immutable and return a new instance of the state (along with attached logic)
<frameset rows='100%, *' frameborder=no framespacing=0 border=0>
<frame src="https://clojerl.github.io/" name=mainwindow frameborder=no framespacing=0 marginheight=0 marginwidth=0></frame>
</frameset>
What...? Why...? I just can't...If this is inferior in every way to lfe then it will remain a niche project. If not, perhaps it will encourage some improvements either in lfe or Erlang itself (though I think the latter is unlikely).
if you want lisp <insert condition>, you already have <insert lisp satisfying condition>.
your assumed condition is wrong, a person may not just want lisp on beam, they may want clojure on beam.
it's always better to ask than to make incorrect assumptions
I wrote my first vaguely non-trivial LFE program as a macro in the REPL as a guess, and it worked on the first try.
If I need a lisp in BEAM, I would run with LFE on that alone.
[1] - http://lists.llvm.org/pipermail/llvm-dev/2011-December/04644...
Haskerl, a subset of Haskell for the BEAM VM.
Alpaca, a version of ML.
A Purescript BEAM back end.
An Idris BEAM backend.
See https://github.com/llaisdy/beam_languages/blob/master/README...