7 ms·
Clojure for the Erlang VM
- andreareina 7y agoPage is a frameset around https://clojerl.github.io https://clojerl.github.io, which breaks the mobile experience (fixed width, content too small). Going directly to the github.io copy scales the content correctly and provides https.
- tombert 7y agoClojerl is really cool, and you should play with it; it's actually surprising how well the semantics transfer over to the Erlang VM. 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.
- lsh 7y agothat was insightful, thank you
- appleflaxen 7y agoLinks to your references for the lazy: http://docs.lfe.io/current/ http://docs.lfe.io/current/ https://github.com/rvirding/lfe https://github.com/rvirding/lfe
- macintux 7y agoThere are at least 19 alternative languages for the BEAM[1]. If anyone knows of any I’ve missed, let me know. [1]: https://gist.github.com/macintux/6349828#alternative-languages-targeting-the-erlang-vm https://gist.github.com/macintux/6349828#alternative-languag...
- BoiledCabbage 7y agoThere are 4 relevant VMs: .net, java, js and erlang. If you're making a language and not targeting one of them, you're DOA.
- kragen 7y agoAlso LLVM, wasm, amd64, ARM, aarch64, RISC-V, Vulkan, Radeon, NVIDIA, Gen, and iCE40. Instruction sets are more exciting than they have been since the 1980s.
- dhash 7y agoThese are native instruction sets, not a VM. The parent seems to also mean runtimes, which LLVM does not provide
- kragen 7y agoI think all of those have software implementations ("VMs")†, although it's true that some of them have hardware implementations as well ("native instruction sets"). Since the IBM 360, though, the distinction has been very fuzzy. † although Intel Gen, RADEON, and the NVIDIA GPU ones might be an exception
- unlinked_dll 7y agoAnd none of them guarantee tail call optimization leading to trade offs in the design of particular languages that may or may not be acceptable.
- 7y ago
- whalesalad 7y agoThe site does a great job explaining what Clojure features exist in this port ... but what about Erlang features? There doesn't appear to be a first-class adoption of things like supervisors and actors like you see in Elixir, for example. Or at least the docs don't do a great job explaining it?
- verttii 7y agoThat was also the first thing I was looking for in the docs. I mean how it ties to the Erlang OTP. It's the reason why anyone would use Erlang's platform after all.
- lsh 7y agoI found the project via this article: https://medium.com/clojure-on-the-beam/agents-9de923017adf 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.
- weego 7y agoThis is my understanding of agents vs actors, I may be naive or wrong: 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)
- deleted 7y ago[deleted]
- zelly 7y agoNow I want to see a port to the Low Level Virtual Machine
- lsh 7y agois this helpful? https://www.graalvm.org/docs/reference-manual/languages/llvm/ https://www.graalvm.org/docs/reference-manual/languages/llvm...
- valvar 7y agoLLVM has not been an acronym for Low Level Virtual Machine for quite a while now [1]. [1] - http://lists.llvm.org/pipermail/llvm-dev/2011-December/046445.html http://lists.llvm.org/pipermail/llvm-dev/2011-December/04644...
- reilly3000 7y agoWith the ability to reach Java, JavaScript, .Net, and Erlang runtimes, plus interop with many other languages via GraalVM, Clojure has incredible reach across runtimes, perhaps more than any other modern programming language, certainly among Lisps. That said, its pretty gnarly to try to navigate all of the implementation differences among platforms. I wonder if there is a subset of Clojure that is 'safe' to run on any of its supported environments. This list is pretty long: https://clojerl.github.io/differences-with-clojure/ https://clojerl.github.io/differences-with-clojure/ For now, the JVM is the only way to get the full Clojure experience.
- dwohnitmok 7y agoThe Clojure community believes strongly in the idea that it is a hosted language, and therefore prioritizes maintaining the semantics of its host (whether that be the JVM, a JS engine, or some other VM) over independent, consistent semantics for Clojure itself. 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).
- moomin 7y agoYeah, I’ve developed some clj/cljs code. It’s full of conditional compilation. It’s even full of conditional compilation expressions in the ns header.
- cutler 7y agoDon't fotget Hy (http://hylang.org http://hylang.org).
- James-primitive 7y agoSubmarines are useless underwater -- George Zimmerman(n). Signed by James Goulding
- crimsonalucard 7y agoDoes anyone know if there are any languages with ADTs running on top of the erlang vm?
- dwohnitmok 7y agoThere are, in various stages of experimentation. 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.org https://github.com/llaisdy/beam_languages/blob/master/README...
- sanxiyn 7y agoThere is Gleam.
- verttii 7y agoElchemy too which is based on Elm.
- Vizarddesky 7y agoI'm curious to see a detailed list of language constructs and features that are and aren't supported.
- ishankhare07 7y agoI don't see how this brings anything new to the ecosystem. Clojure is a LISP and we already have lfe (http://lfe.io/ http://lfe.io/) - LISP floured Erlang for quiet a while now, hence it will definitely be more mature than a new implementation altogether. Moreover I feel, seeing the the currently more effort should be made in maturing the classic clojure implementation and the tooling around it itself, rather than diverting the community into fancy new (not so useful) ports of the same syntax for other runtimes. Seriously, just go improve clojure itself. And if you want to be able to write lisp for BEAM, just use lfe.
- polityagent 7y agoI don't think this implementation harms either Erlang or JVM clojure ecosystems. I also doubt the creator of this has as much interest in maturing JVM tooling as you so demand of them, if they did, they wouldn't have made this port. 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).
- keymone 7y agoone does not simply say one lisp dialect is better than the other.
- ishankhare07 7y agoI never said one is better than the other. All I said is, if you want lisp on BEAM, you already have lfe.
- keymone 7y ago> if you want lisp on BEAM, you already have lfe 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.
- 7y ago
- abjKT26nO8 7y ago<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...
- speps 7y agoCustom domains on GitHub are not free... people find ways.
- weavie 7y agoI'm pretty sure they are.
- christophilus 7y agoThey are free. I use several.
- kopos 7y agoWhy Clojerl when LFE maps directly to the best of what BEAM offers - supervisor trees and pattern matching?