Hi all,<br><br>I just released the 0.2.0 version of Heist, my Ruby Scheme runtime. Changes in this release include:<br><br><pre><div class="line" id="LC4">* Entirely revised to correctly support lists as linked pairs</div>
<div class="line" id="LC5">* Complete set of R5RS list functions</div><div class="line" id="LC6">* Syntax for dotted pairs and improper lists implemented</div><div class="line" id="LC7">* Rest-args for functions using dot notation</div>
<div class="line" id="LC8">* Almost-complete R5RS numeric library, including complexes and rationals</div><div class="line" id="LC9">* Some parser bugs regarding literals and quoting fixed</div><div class="line" id="LC10">
* Many macro parsing and expansion bugs fixed, esp. concerning nested repeating patterns</div><div class="line" id="LC11">* Macro keywords and collisions with local variables now follow the spec</div><div class="line" id="LC12">
* R6RS ellipsis escaping feature -- (... ...) -- implemented</div><div class="line" id="LC13">* All library syntax now implemented as macros, should all support call/cc</div><div class="line" id="LC14">* Ruby data can now be executed as Scheme code</div>
<div class="line" id="LC15">* Lots of inline documentation for the runtime</div></pre>More information on GitHub and my blog:<br><br><a href="http://github.com/jcoglan/heist">http://github.com/jcoglan/heist</a><br><a href="http://blog.jcoglan.com/2009/04/02/april-fool-area-man-releases-worlds-slowest-scheme-interpreter/">http://blog.jcoglan.com/2009/04/02/april-fool-area-man-releases-worlds-slowest-scheme-interpreter/</a><br>
<br>Of particular interest to me is the Ruby-data-as-Scheme-code feature, for example:<br><br><pre><code>scheme = Heist::Runtime.new<br><br>scheme.exec [:define, [:square, :x],<br> [:*, :x, :x]]<br><br>scheme.exec [:square, 9]<br>
#=> 81</code></pre>Once I've settled on a nice way to expose the macro system to Ruby, this could be used with ParseTree to rewrite Ruby code, like raganwald's 'rewrite' gem. Also, there's a possibility for someone to write a new Ruby interpreter by taking ParseTree and adding a new set of built-in functions to the Heist runtime to execute its output. If someone has a serious stab at this I'd love to see the results.<br>
<br>-- <br>James Coglan<br>