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). -- 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.