Today I released version 0.6.0 of the tools.analyzer[1] and
tools.analyzer.jvm[2] contrib libraries.

With this release comes a new feature I'm really excited about and that
I believe will help users of this library significantly: a pass
scheduler.

Previous to this release, tools.analyzer passes had to be combined
manually, requiring deep knowledge of the implementation of those
passes, whose dependencies were not explicit.

That usually resulted in users copy-pasting the tools.analyzer.jvm
run-passes function using that as a template.

With the new scheduler, all of this is no longer necessary as all it
takes care of automatically pulling in dependencies and composing the
passes in the required and most efficient order, composing together
passes whenever possible, to minimize the overhead of a full tree
traversal.

To get a sense of how that has improved, here's run-passes from 0.5.6:
https://github.com/clojure/tools.analyzer.jvm/blob/be55b4e32371060932ac8d4094eb5b1b77fe4349/src/main/clojure/clojure/tools/analyzer/jvm.clj#L430-L477
and here it is from 0.6.0, using the pass scheduler:
https://github.com/clojure/tools.analyzer.jvm/blob/1757871eb828c419f8de1cf177f125897f653829/src/main/clojure/clojure/tools/analyzer/jvm.clj#L397-L427

Exposing the default-passes set, users who want to add a pass to the
default passes run by t.a.jvm need only to bind run-passes to
`(schedule (conj default-passes #'my-pass))`, or dissoc a default pass
if not needed.

To get started with the pass scheduler, here's its extensive docstring:
https://github.com/clojure/tools.analyzer/blob/7a8cba9b26689675debdaabc83f20e485003bf5a/src/main/clojure/clojure/tools/analyzer/passes.clj#L137-L168
and here is a comprehensive example of a pass configuration via :pass-info:
https://github.com/clojure/tools.analyzer.jvm/blob/1757871eb828c419f8de1cf177f125897f653829/src/main/clojure/clojure/tools/analyzer/passes/jvm/validate_loop_locals.clj#L150

Nicola

[1]https://github.com/clojure/tools.analyzer
[2]https://github.com/clojure/tools.analyzer.jvm

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