6 ms·
Clojure-scheme: Compiling Clojure to Native Code via Scheme [video]
- bitsai 13y agoFascinating! We use Clojure heavily, but the JVM is sometimes a bit of a headache-inducer in our environment (especially w.r.t. its eager gobbling of memory), so I'm always excited to see new potential runtimes/backends for Clojure.
- mjt0229 13y agoI'm interested in this, but why not just write natively in Scheme? I really like Clojure, but if you don't need the Java interop, Scheme seems just as nice.
- programnature 13y agoIf one already knows Clojure, the value is obvious: you don't need to learn a new language. It's also of course debatable that scheme is "just as nice", so you can imagine there are people who, other things being equal, prefer Clojure.
- mjt0229 13y agoCertainly. As I said, I like Clojure, but I'd be happy to be able to program in Scheme as well. I guess the history of LISP should have told me that not all people who like one LISP necessarily don't mind using another.
- takeoutweight 13y agoClojure has a much stronger polymorphism story than Scheme. This makes sense as Clojure was designed to live in an OO host language. Practically this could mean, say, much cleaner Objective-C interop.
- 286c8cb04bda 13y agoFor developers interested in a Lisp that cooperates with Objective-C (and C), I always recommend Nu -- http://programming.nu http://programming.nu.
- klibertp 13y ago> Clojure has a much stronger polymorphism story than Scheme Many Schemes have their own OO implementations and they all support polymorphism.
- Gonzih 13y agoClojure polymorphism not= OO polymorphism
- olenhad 13y agoScheme is great, but I think there are several key features that clojure has that scheme doesn't provide by default, including (but not limited to): - Persistent Hash-Trie based Data Structures - Beautiful asynchronous constructs - Multimethods - Protocols Obviously I in no way intend to discredit scheme, nor start a lisp flamewar :) /sidenote I love this article comparing a game written in 4 lisp dialects (http://technomancy.us/169 http://technomancy.us/169)
- slyrus 13y agoFor one thing, one might get interoperability with clojure libraries (at least those that aren't just wrappers around java libraries). For another thing, clojure has some nice language features and I'm all for supporting multiple lispy dialects on top of various compiler/runtime environments. My personal wish is to have clojure running on SBCL with trivial interoperability between common lisp and clojure code.
- DigitalJack 13y agoClojure was initially implemented on cl. You should be able to find the lisp version in the history of the repo somewhere. Might be an interesting starting point.
- brandonbloom 13y ago> Clojure was initially implemented on cl. Really? I thought Clojure evolved out of Rich's never-finished CL-subset-on-JVM implementation.
- arohner 13y agoI'm pretty sure this is wrong. Rich originally made two other JVM/lisp hybrids, one was running java code inside CL, the other was CL on the JVM. [1] Clojure originally targeted the JVM and CLR, but AFAIK, one of the main motivators was always to run on a major platform. http://sourceforge.net/projects/jfli/ http://sourceforge.net/projects/jfli/
- lispm 13y agoHe did not made any Lisp/JVM hybrids. More like foreign object interfaces to Java and .net. One was a Lisp(Works) FFI to Java (jfli) and the other was a generalized version of that (foil). I have seen too the early sketch of Clojure in CL. Look here: http://clojure.googlecode.com/svn-history/r454/trunk/src/lisp/ http://clojure.googlecode.com/svn-history/r454/trunk/src/lis...
- arohner 13y ago
- jlongster 13y agoI love it when several incredible technologies come together to allow things you wouldn't think possible. Take this thing over there, stir in some of that, and boom, you've got a working project that is crazy full of potential. Great work Nathan. Really, when I think about it, it's why I love the world of programming.
- terhechte 13y agoAlso don't forget about Clojure-c, which recently got fairly good iOS / Android bindings: https://github.com/schani/clojurec https://github.com/schani/clojurec
- dktbs 13y agoThis is great, especially since it removes the TCO limitation from running on the JVM. I will definitely give this a try.
- roryokane 13y agoI don’t know much Clojure, but I thought that lack of TCO was not a problem because you can just manually add `recur` (http://clojure.org/special_forms#Special%20Forms--%28recur%20exprs*%29 http://clojure.org/special_forms#Special%20Forms--%28recur%2...) when you need it. Are there situations where `recur` doesn’t work but tail-call optimization would help?
- takeoutweight 13y agoIn my talk I use a finite state machine as an example of something that can really benefit from proper tail calls. In this case, the difference between proper tail calls and loop/recur is the difference between "compiling" the FSM and running the FSM in an interpreter loop.
- moomin 13y agoThe quick answer is: mutually recursive functions. True TCO doesn't grow the stack when F calls G calls F again.
- unz 13y agoThere's also other jvm lisps that you give you natives too. Kawa scheme (native chicken,bigloo,racket). Armed bear common lisp (native sbcl,clisp).
- moomin 13y agoAlso in this space is Tim Baldridge's mjolnir project, which generates native code directly from Clojure using LLVM. It looks very promising, although there haven't been any commits in the last few months.