[I thought I'd slip this in while Rich has everyone distracted lazy
sequences.]


What do you do when you love Lisp, are intrigued by Clojure, but have
absolutely no projects at hand to test it out?  Oh, and you have an
interest in how dynamic languages are being implemented in modern
virtual machine environments.

You might implement Clojure on the CLR, I guess. So I did.  At least,
I have started.

The project has reached the point where I need input from the
community and especially Rich.  Rich asked that I go public.  So I
will.  (Though most certainly I would prefer to wait until the code
is ... better.)

The code will go up on clojure-contrib ASAP.  I need input from the
clojure-contrib project members on how they operate, where they want
to put it, etc.

This is definitely alpha-level, developer-only.  Hard hats, goggles,
and heavy gloves recommended.


Goals:

(a) Implement a feature-complete Clojure on top of CLR and the DLR
(Dynamic Language Runtime).
(b) Stay as close as possible to the JVM implementation so that the
versions can stay in synch.  That includes:
(c) To the extent possible, use exactly the same boostrap *.clj files
to define the environment.
(d) Try to use some of the more advanced features of the DLR, where it
makes sense to do so.
(e) Spawn a cottage industry of people making Visual Studio extensions
for Clojures. :)
(e) Have fun.


Status:

Let's call it alpha.  Not for the casual user, but developers might
want to take a look.

Stop here unless you really want status details.


The basic runtime data structures--the persistent collections,
namespaces/symbols/keywords, vars, refs, atoms, agents, etc.--are 95%
complete. The remaining pieces are trivial.

The LispReader is feature-complete except for #=. Call this 96%
complete.

There are currently 500+ unit tests on the basic data structures and
the reader.  Call this 34% complete.
There are no unit tests on compiler.  That would be 0%.

This is not an interpreter.  A compiler translates Clojure forms into
DLR expression trees. DLR does its magic, i.e. compiles to MSIL, and
computation happens.  At the moment, there is not a single call to
Reflection.Emit in the compiler code.  (Though that will have to
change soon.)  It handles all special forms, can load most of
core.clj, deals with macros, inlines, tags,  CLR-interop,

There is a basic REPL.

core.clj loads with minor edits (java.util.Collection =>
System.Collections.ICollection, for example).  Of roughly 425 def
forms in core.clj, only 43 are commented out.  19 of those are for
specialized array access, 6 for regular expressions -- nothing
significant in terms of work.  Of the 360 defs that load, most have
been tested at a rudimentary level.  However, the roughly 20 defs
related to libs/loading/compiling definitely do not work.  Call this
85% complete.

core-print.clj also loads and seems to work. ants.clj runs.  (The sim
code is unchanged.  The GUI was rewritten to Windows Forms.)  100%.

The code is consistent with revision 1279 of the JVM code (Feb 13).
It is running on release 10606 of the DLR (Feb 11).

It is slow.  Roughly 4X slower than Clojure/JVM on one or two very
easy tests.  (No need to comment on microbenchmarks.) This will be the
focus of the next round of work.


What's not there:

Libs and loading -- lots of design problems because of the differences
between JVM and CLR relating to classpaths, assemblies, etc.  (Basic
file loads can be done.)

AOT/Compilation/gen-class

Proxies

Bootstrap *.clj files other than core.clj and core-print.clj -- Just
haven't had time yet.

Speed.


So there you have it.  I'll post again when the code becomes available
on clojure-contrib.

-- David Miller



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

Reply via email to