(sorry about the lack of subject in my original post; I've added one to
this email)
On Fri, 15 Jul 2011, George Jahad wrote:
very cool Joel! I'd also be interested in start up time of avian vs.
hotspot, i.e. does avian make it viable to use clojure for short,
quick scripts?
Possibly. By default, Avian is noticeably slower to start up than
Hotspot, at least when using OpenJDK's class library. The boot process
for that library touches a lot of code in a lot of classes, and Hotspot
has several performance advantages to make quick work of it. On the other
hand, Avian can also be built to use its own class library, which allows
much faster startup. Unfortunately, it doesn't currently have all the
classes needed to support Clojure, and I haven't checked to see how much
would need to be added to make it work.
Avian also supports ahead-of-time compilation from Java bytecode to native
machine code, so it would be possible to create an executable with all the
OpenJDK and Clojure classes precompiled, thereby bypassing the need for
JIT compilation at runtime except for dynamically-loaded classes. That
would be faster, but I'm not sure by how much.
The ideal approach in terms of startup time would be to add whatever
classes needed to Avian's class library to support Clojure, use ProGuard
to shrink and optimize the combination of clojure.jar and the system class
library, and precompile the result into native code. I might take a stab
at that if I have time.
On Jul 15, 11:59 am, Joel Dice <joel.d...@gmail.com> wrote:
Hi all,
I thought I'd share the results of a fun little excercise I did this
morning: running Clojure on a VM with native support for tail call
optimization and first class continuations. Any Schemers on this list
will probably appreciate it.
The VM in question is Avian (http://oss.readytalk.com/avian/), built with
optional tail call and continuation features enabled and using the OpenJDK
class library. It's not nearly as fast or sophisticated as e.g. Hotspot,
but it has some features that make it interesting for running non-Java
languages. I'm using the latest commit from the Git repository.
For example, here's what happens if you recurse too deeply using Hotspot:
$ java -cp clojure.jar clojure.main
Clojure 1.2.1
user=> ((fn this [n] (if (= n 1000000) n (this (+ n 1)))) 0)
java.lang.StackOverflowError (NO_SOURCE_FILE:0)
user=>
With Avian, there is no overflow, and we also get to play with
continuations:
$ ../avian/build/linux-x86_64-tails-continuations-openjdk-src/avian -Xmx512m
-cp clojure.jar clojure.main
Clojure 1.2.1
user=> ((fn this [n] (if (= n 1000000) n (this (+ n 1)))) 0)
1000000
user=> (defn call-cc [function]
(avian.Continuations/callWithCurrentContinuation
(reify avian.CallbackReceiver
(receive [_ continuation]
(function (fn [result] (.handleResult continuation result)))))))
#'user/call-cc
user=> (call-cc (fn [continuation] (continuation "hello, world!")))
"hello, world!"
user=>
For more information about how continuations work in Avian, please
seehttp://oss.readytalk.com/avian/javadoc/avian/Continuations.html.
Anyway, I think this is an interesting experiment since it shows that
if/when tail call and continuation support are integrated into the JVM
officially (http://openjdk.java.net/projects/mlvm/), Clojure could benefit
with few or no modifications.
--
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 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