[ANN] Skummet alpha-1 released

224 views
Skip to first unread message

Alexander Yakushev

unread,
Aug 12, 2014, 10:18:23 AM8/12/14
to clo...@googlegroups.com
So I am finally comfortable for showing Project Skummet to the general public.
Skummet is a experimental Clojure branch that features a modified AOT-compiler
providing the following features:

a) Compiling vars into objects stored as namespace's static fields;
b) Skipping emission of macros;
c) Skipping emission of metadata without eliding it completely (so it is used
during compilation but not emitted in the resulting classes).

Since it's still in alpha stage, bugs might occur. I was able to lean-compile
Clojure, core.async and a few other small libraries, but for others it might
fail for one reason or another. The most usual problem is when a library
declares a var that it then references explicitly (by "with-redefs" or by
calling methods on that Var object). How to deal with that is described below as
step 3.

To try Skummet you need to add two things to your Leiningen's project.clj:

1. Add special Clojure version to the :dependencies

   [org.bytopia/clojure "1.7.0-skummet-SNAPSHOT"]

2. Add lein-skummet to the :plugin section:

   [lein-skummet "0.1.4-SNAPSHOT"]

3. If errors with direct Var usage occur, you can put a vector to
:skummet-skip-vars that contains stringified var names that have to be made
non-lean:

   :skummet-skip-vars ["#'neko.context/context" "#'neko.resource/package-name"]

Then to compile a project with Skummet use "lein skummet compile". This will
produce AOT-compiled Clojure classes. You can then run it with "lein skummet
run" (the only difference from "lein run" is that no source dependencies are
included to the classpath, so you are sure you are running only the compile
code); or you can execute "lein skummet jar" to create an uberjar that can then
be used regularly.

There is a sample project that already has all necessary configuration for
Skummet: https://github.com/alexander-yakushev/leantest.

I'd be really grateful if you tried this project and shared your experiences
(specifically disappointing ones:)). It is important now to test Skummet with
different libraries and find code where it falls short compiling. A good idea
will be to benchmark results. My experiments so far show a reduction in startup
time by ~40% for Clojure, core.async and for Clojure on Android (right now
lein-skummet cannot be used with lein-droid, but this option will be available
soon).

Zach Oakes

unread,
Aug 12, 2014, 11:49:21 AM8/12/14
to clo...@googlegroups.com
I am so excited to use this, Alex! A hello world uberjar with Skummet is 1 MB slimmer and launches twice as fast on my netbook, though I won't call it a scientific test. And of course you know I'm excited about the prospects for CoA -- have you been testing it with ART yet, or just Dalvik? Great work.

Zach

Alexander Yakushev

unread,
Aug 12, 2014, 12:04:40 PM8/12/14
to clo...@googlegroups.com

Thank you for the feedback, Zach! I only tested on Dalvik so far, with Clojure and most part of Neko lean-compiled (including neko.ui). I plan to try it on ART soon, since Adam Clements made CoA finally working with ART.

Alex Yakushev
http://www.bytopia.org

--
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 a topic in the Google Groups "Clojure" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/clojure/KsaLNBwj4os/unsubscribe.
To unsubscribe from this group and all its topics, send an email to clojure+u...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Nicholas Kariniemi

unread,
Aug 13, 2014, 2:49:27 AM8/13/14
to clo...@googlegroups.com
This looks nice, I will give it a try.
Reply all
Reply to author
Forward
0 new messages