Yes thanks a lot, it clarifies lots of points not obvious to me by simply
skimming the graalvm website.

Le ven. 20 avr. 2018 à 04:34, Jason Kapp <mtbk...@gmail.com> a écrit :

> Thank you for this detailed explanation.
>
> On Thursday, April 19, 2018 at 11:55:25 AM UTC-6, tbc++ wrote:
>>
>> GraalVM does a lot of things, and I think it's important to separate
>> these terms.
>>
>> GraalVM - most often this is used to refer to a project that was
>> originally designed to be a implementation of the JVM in Java. So when
>> people ask "does X run on GrallVM" the question is really "does X run in
>> the JVM". Clojure runs on the JVM therefore it runs on GraalVM. I've done
>> this, and it's not that hard to setup.
>>
>> Truffle - is an AST interpreter framework that allows for highly dynamic
>> languages to run efficiently on GraalVM. Truffle is valid Java code, so you
>> can run Truffle on a stock JVM, but it's much faster on GraalVM (or on JVM
>> of version >= 9). Notice my use of "highly dynamic" earlier. Surprisingly,
>> Clojure is mostly static, so there's no clear win here to translating
>> Clojure to Truffle. The exception to this is primitive math, and situations
>> that use lots of HOF where Truffle could perhaps offer more localized
>> optimizations that fit into the Clojure programming model. However, you pay
>> for all this with some rather massive startup time penalties. Most examples
>> I've seen show Truffle adding seconds on to the startup time of a language.
>>
>> SubstrateVM - (aka native-image), SubstrateVM attempts to improve the
>> performance of a Truffle based language by doing image freezing. This
>> method has been used in other languages, and has existed in the PyPy
>> toolchain (RPython) for well over a decade. The idea is that you write an
>> interpreter, then hand SVM a pointer to the start of your interpreter (the
>> main() function). The framework then analyzes the data needed by that
>> function and all the functions it calls. All data required by those
>> functions are also recorded. Then the call graph required to run all these
>> functions is written out (normally to C or C++) and compiled. The
>> side-effect is that all the startup time is removed since the interpreter
>> is "frozen" in a started state. In the terms of Clojure this means that
>> metadata would be serialized as-is, instead of running the code to create
>> that metadata on every startup.
>>
>> Polyglot VM - so in truffle you can have multiple type systems, and
>> multiple languages all running on Truffle. The framework then allows cheap
>> interop between these languages. So when GraalVM docs talk about "zero
>> overhead interop" what they mean is that it's possible to inline a Truffle
>> based function inside any other truffle based function. Since Truffle
>> implementations exist for Ruby, Python, LLVM bytecode (think C/C++),
>> JavaScript, etc. It's easy to see how its possible to have all of these
>> languages efficiently calling each other on the same VM.
>>
>> It's not all awesome though. By using SubstrateVM you give up Java
>> reflection/interop, or have to find a way to embed a full JVM as a Truffle
>> language (this is being worked on), but every language you add into your
>> SVM image comes at a cost of startup times, memory usage etc. So most of
>> the time SVM images stick to a few languages. TruffleRuby for example only
>> uses Ruby and LLVM (for c interop).
>>
>> To finish, I think Clojure on Truffle is possible, but it would take a
>> TON of work. Basically most of clojure.lang.RT would need to be rewritten
>> from scratch, and I'm not sure how much more in clojure.lang.* would also
>> need to be rewritten. So the tradeoff is:
>>
>> A. Current state
>> - Good enough performance
>> - Fast enough startup (Clojure starts quickly, it's the deps/tooling that
>> are slow)
>> - Requires type hinting to avoid reflection
>>
>> B. Clojure on Truffle
>> - More-or-less the same performance
>> - Faster un-type-hinted math
>> - (Possibly) Faster transducers/HOF over primitive collections
>> - No need for type hints
>> - Massive rewrite
>> - Huge startup time penalty
>> - Requires a modern/uncommon JVM (JVM9+ or GraalVM)
>>
>> Comparing these side-by-side, it looks to me to be a wash. And because of
>> that I doubt we'll see a TruffleClojure any time soon.
>>
>> Timothy
>>
>> On Thu, Apr 19, 2018 at 4:00 AM, Khalid Jebbari <khalid....@gmail.com>
>> wrote:
>>
>>> Hello,
>>>
>>> Oracle has just announced GraalVM 1.0 release candidate:
>>> https://blogs.oracle.com/developers/announcing-graalvm
>>>
>>> It mentions a few JVM-based language but not Clojure (maybe just because
>>> of popularity).
>>> - Does it mean Clojure is not "compatible" with GraalVM ?
>>> - Does it mean Clojure needs to be reimplemented in terms of GraalVM's
>>> Truffle framework ?
>>> - Does it mean Clojure can be run as a native binary with fast startup
>>> time and minimized memory footprint ?
>>>
>>> If someone with some knowledge could explain to me the relationships
>>> between Clojure and GraalVM ? Bonus points if Alex Miller answers and share
>>> the plans, if any, about their integration/interaction.
>>>
>>> Thanks a lot in advance. really curious to understand more.
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To post to this group, send email to clo...@googlegroups.com
>>> Note that posts from new members are moderated - please be patient with
>>> your first post.
>>> To unsubscribe from this group, send email to
>>> clojure+u...@googlegroups.com
>>> For more options, visit this group at
>>> http://groups.google.com/group/clojure?hl=en
>>> ---
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to clojure+u...@googlegroups.com.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>
>>
>> --
>> “One of the main causes of the fall of the Roman Empire was that–lacking
>> zero–they had no way to indicate successful termination of their C
>> programs.”
>> (Robert Firth)
>>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to a topic in the
> Google Groups "Clojure" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/clojure/iBY6hwqqp5c/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to