<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6395156550990005973</id><updated>2011-11-27T15:55:58.789-08:00</updated><category term='lisp'/><category term='waspvm'/><title type='text'>Wasp Lisp Developments</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>35</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-8996035594952182670</id><published>2009-12-12T00:49:00.000-08:00</published><updated>2009-12-12T00:51:05.074-08:00</updated><title type='text'>WaspDoc Bug Fixes</title><content type='html'>Looks like there were a couple TConc-related bugs lying around in the Waspdoc argument parser.  Fixed for posterity..  Perhaps I will eventually get around to finishing waspdoc/check-source.ms and waspdoc/c-file.ms.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-8996035594952182670?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/8996035594952182670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=8996035594952182670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/8996035594952182670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/8996035594952182670'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2009/12/waspdoc-bug-fixes.html' title='WaspDoc Bug Fixes'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-8099117701516669373</id><published>2009-12-06T00:20:00.001-08:00</published><updated>2009-12-06T01:03:56.680-08:00</updated><title type='text'>Fixing Static vs. Dynamic</title><content type='html'>Courtesy of &lt;a href="http://www.bluishcoder.co.nz/index.html"&gt;Chris Double&lt;/a&gt;, Wasp's build system will now statically link &lt;a href="http://www.monkey.org/~provos/libevent/"&gt;libevent&lt;/a&gt; on Linux and other Unixen for the stub virtual machine.  This improves the portability of standalone executables compiled using Wasp's stub virtual machine, since libevent is not quite ubiquitous.
&lt;br /&gt;&lt;br /&gt;
Also patched was an annoying little warning in "vm/salsa.c" related to an implicit pointer cast, and the process loop now performs a 100 microsecond sleep when all processes are polling.  (Previously, this was handled by the OS process, which doesn't correctly handle the possibility of more than one process polling for external events.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-8099117701516669373?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/8099117701516669373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=8099117701516669373' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/8099117701516669373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/8099117701516669373'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2009/12/fixing-static-vs-dynamic.html' title='Fixing Static vs. Dynamic'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-3224270788285037765</id><published>2008-12-26T05:53:00.000-08:00</published><updated>2008-12-26T06:07:21.216-08:00</updated><title type='text'>Portable Terminal I/O with SCUD</title><content type='html'>&lt;p&gt;A new release will be uploaded, today, 0.4.1, with some minor bugfixes and a simple terminal abstraction library, "lib/scud."  This library supports cursor relocation, changing terminal colors, and clearing the screen on both VT100-capable terminals and Windows.  Also, a new primitive has been added, "unbuffer-console", which puts the Windows and UNIX standard input into a raw, unbuffered mode.  This makes it possible to capture individual keypresses by the user without waiting for linebreaks.&lt;/p&gt;
&lt;p&gt;Why the fuss with terminals? Because I have been working on a lot of console mode applications, and this module gives me the bare minimum while supporting both Windows and UNIX platforms.  There is still a lot of planning and work ongoing with 0.5, but not much of it is suitable for release, yet.&lt;/p&gt;
&lt;p&gt;Happy holidays!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-3224270788285037765?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/3224270788285037765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=3224270788285037765' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/3224270788285037765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/3224270788285037765'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2008/12/portable-terminal-io-with-scud.html' title='Portable Terminal I/O with SCUD'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-1925818867493133427</id><published>2008-09-18T02:46:00.001-07:00</published><updated>2008-09-18T02:55:43.365-07:00</updated><title type='text'>Kicking Wasp 0.4 Out of the Door..</title><content type='html'>This has been languishing in my To Do list for the past couple weeks, introducing &lt;a href="http://waspvm.googlepages.com"&gt;Wasp Lisp 0.4&lt;/a&gt;.  This version provides a lot of little improvements in the network and console I/O on Windows and Linux, and, more importantly, contains a complete port of MOSREF 2.0 from &lt;a href="http://sf.net/projects/mosref"&gt;MOSREF 2.0b3&lt;/a&gt;.

All of the functionality we demonstated two years ago from MOSREF is in this newest port of MOSREF, but with different ciphers.  Stability and speed have greatly improved, compared to the 2006 prototype, largely due to the use of the &lt;a href="http://en.wikipedia.org/wiki/Salsa20"&gt;Salsa/20&lt;/a&gt; stream cipher for the session cipher.

&lt;br /&gt;&lt;br /&gt;

Work will begin soon on Wasp 0.5, which consist of more primitive namespace cleanup, bug fixes and, hopefully, WaspDoc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-1925818867493133427?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/1925818867493133427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=1925818867493133427' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/1925818867493133427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/1925818867493133427'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2008/09/kicking-wasp-04-out-of-door.html' title='Kicking Wasp 0.4 Out of the Door..'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-4469368258055544925</id><published>2008-09-02T04:36:00.000-07:00</published><updated>2008-09-02T05:33:48.593-07:00</updated><title type='text'>Link Dump: Plugins and DLLs</title><content type='html'>MOSREF requires the creation of statically linked "monolithic" binaries for Drones.  Wasp, prior to 0.3, supported loading plugins written in C by bundling the entire virtual machine into a shared object file.  The following is a list of links I have been looking at, trying to find a way to support plugins while keeping the virtual machine itself in the executable:

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://alain.frisch.fr/flexdll.html"&gt;FlexDLL&lt;/a&gt; -- 
      Emulates UNIX dlopen on Win32.&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://edll.sourceforge.net/"&gt;EDLL&lt;/a&gt; -- 
      Reimplements the dynamic linker for Windows; also catalogues common workarounds for the DLL plugin paradox.&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://sig9.com/node/35"&gt;DLL Creation in MinGW&lt;/a&gt; --
      A succinct tutorial on LoadLibrary / GetProcAddress.&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.cs.colorado.edu/~main/cs1300/doc/mingwfaq.html"&gt;The University of Colorado MinGW FAQ&lt;/a&gt; -- 
      Contains a nice list of common MinGW gotchas.&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.dwheeler.com/program-library/"&gt;The Program Library HOWTO&lt;/a&gt; -- 
      More about how to design libraries on UNIX systems than Win32, but discusses those techniques thoroughly.&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Dynamic_loading"&gt;Wikipedia: Dynamic Loading&lt;/a&gt; --
      Contains an interesting technique for DLLs to access the original process's symbols.&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.securityfocus.com/infocus/1873"&gt;Dynamic Linking in Linux and Windows, part two&lt;/a&gt; --
      More in-depth discussion of DLLs and their limitations.&lt;/li&gt;
&lt;/ul&gt;

The criteria for a successful solution:

&lt;ul&gt;
  &lt;li&gt;Permits a plugin subsystem to call routines in the virtual machine.  (Blocks naked use of DLLs and LoadLibrary / GetProcAddress.)&lt;/li&gt;
  &lt;li&gt;Shares data structures in the virtual machine process with all plugins.&lt;/li&gt;
  &lt;li&gt;Does not bloat the virtual machine.&lt;/li&gt;
  &lt;li&gt;Does not require special effort by plugin authors. (Disqualifying passing a structure of API function pointers to the plugin.)&lt;/li&gt;
  &lt;li&gt;Does not tightly couple the plugin to the binary. (Disqualifying various --output-implib tricks.)&lt;/li&gt;
  &lt;li&gt;Does not excessively complicate the build process. (Disqualifying LibTool.)&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-4469368258055544925?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/4469368258055544925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=4469368258055544925' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/4469368258055544925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/4469368258055544925'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2008/09/another-link-dump-plugins-and-dlls.html' title='Link Dump: Plugins and DLLs'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-752196043354726448</id><published>2008-09-01T08:58:00.000-07:00</published><updated>2008-09-01T09:05:23.943-07:00</updated><title type='text'>MOSREF Shell Shock..</title><content type='html'>Work has been quiet but steady on MOSREF, with some very intense work on restoring the "proxy" command and improving the Console's resilience against malfunctioning Drones and noise.  All of the functionality from MOSREF 2.0b3 has been restored, with the sole exception of the "scan" command; it took me longer than expected, but a very subtle bug in vm/os.c was locking up Drones when a specific sequence of proxy sessions was introduced.

I also discovered an interesting hiccup in GCC when compiling vm/format.c with -Os or -O3.  Until I get a chance to examine the optimizations involved, the Makefile will default to compiling with the more conservative -O2 optimization flags.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-752196043354726448?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/752196043354726448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=752196043354726448' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/752196043354726448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/752196043354726448'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2008/09/mosref-shell-shock.html' title='MOSREF Shell Shock..'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-1835148102890134577</id><published>2008-08-17T06:10:00.000-07:00</published><updated>2008-08-17T06:20:12.539-07:00</updated><title type='text'>Progress on MOSREF..</title><content type='html'>As I have mentioned in the last few posts, MOSREF is being ported to the Wasp Virtual Machine.  There have been a few changes in this new version, mostly the reduction of code complexity, and some improved handling of man in the middle attacks.  Previously, each message had a hash used to detect transport compromise, but this did not prevent a permuted message header from tricking the Console or a Drone into waiting an indefinite amount of time for a ludicrous amount of data.

The new model uses a two-tier checksum model; each message is composed of zero or more blocks.  The message has its checksum, and each block has its own checksum.  To increase the difficulty of spoofing valid blocks, the block sizes are randomly sized, which ensures that the offset of the third and successive CRCs are difficult to predict.

Next up, getting the SOCKS 5 proxy working again and further code complexity reductions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-1835148102890134577?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/1835148102890134577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=1835148102890134577' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/1835148102890134577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/1835148102890134577'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2008/08/progress-on-mosref.html' title='Progress on MOSREF..'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-8784861586507955097</id><published>2008-08-13T23:55:00.000-07:00</published><updated>2008-08-14T00:25:24.118-07:00</updated><title type='text'>The Best State Machine is a Coroutine..</title><content type='html'>Occasionally, people will ask me why I think Wasp is better than other Lisps for network programming.  One of the big reasons is its pervasive use of lightweight processes as coroutines, a technique often used by Erlang programmers and, occasionally, advanced Scheme libraries.  An example, from "lib/collate-filter":

&lt;pre&gt;;;; -- SNIP --
     ;;; "in" is an input channel, waiting on it causes a process to block.
     ;;; "out" is an output channel, which connects to the next coroutine.

      (define buf (make-string))
    
      (define (wait-for-any)
        (forever
          (define evt (wait in))
          (when (string? evt)
            (string-append! buf evt)
            (return))
          (send evt out)))
      
      (define (wait-for-field len)
        (while (&amp;lt; (string-length buf) len)
          (wait-for-any))
        (string-read! buf len))
    
      (define (wait-for-int)
        (string-&gt;quad (wait-for-field 4)))
&lt;/pre&gt;

Wait-for-int causes the process to idle until it has four bytes in the buffer, then permits the process to continue.  If a process got 30 bytes at once, then it would be able to read 7 integers successively without having to idle at all, then would need to idle for at least 2 more bytes.

Also visible, above, is some logic forwarding any status messages outwards; that is a common idiom found in filters -- if they can't handle the event, they assume that something further along in the chain would.  A filter is a process that consumes data from an input and yields results to an output, acting very much like a coroutine.  Since they can be composed into chains, Wasp can make many tricky data flows easy to express and understand.  

For example, MOSREF's outbound cryptography chain:

&lt;pre&gt;;;; -- SNIP --
     (input-chain recv
                  (decrypt-filter recv-decrypt)
                  (check-collation-filter)
                  (check-checksum-filter crc32))
&lt;/pre&gt;

The first argument is the input that the next filter will wait on; each subsequent form spawns a new coroutine, supplying them with the supplied arguments for initialization.  The result is a new input that provides a decrypted and carefully groomed sequence of messages from another MOSREF
node.

It's almost embarassing how simple that looks, like much of MOSREF's code.  Much of my effort has been invested in Wasp Lisp for complicated I/O applications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-8784861586507955097?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/8784861586507955097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=8784861586507955097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/8784861586507955097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/8784861586507955097'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2008/08/best-state-machine-is-coroutine.html' title='The Best State Machine is a Coroutine..'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-1356668792848455561</id><published>2008-08-12T21:54:00.000-07:00</published><updated>2008-08-12T22:05:01.196-07:00</updated><title type='text'>WaspVM Focus for 0.4..</title><content type='html'>In the key of &lt;a href="http://en.wikipedia.org/wiki/Hubert_J._Farnsworth"&gt;Hubert J. Farnsworth&lt;/a&gt;, Good &lt;i&gt;news&lt;/i&gt;, everyone!  Wes Brown has offered to fund a port of MOSREF 2.0 to WaspVM, along with some other things.  WaspVM 0.4 will contain the necessary primitive functionality to support MOSREF, and some modifications to the compiler to restore cross-platform compilation.  After that, I will port MOSREF back to WaspVM, and maintain MOSREF until at least the release of Wasp Lisp 1.0.

Wes has a couple more contributions to the project, but we need to hammer out the details before I make more announcements.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-1356668792848455561?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/1356668792848455561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=1356668792848455561' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/1356668792848455561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/1356668792848455561'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2008/08/waspvm-focus-for-04.html' title='WaspVM Focus for 0.4..'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-8352166612241884155</id><published>2008-08-10T04:57:00.000-07:00</published><updated>2008-08-10T05:00:29.015-07:00</updated><title type='text'>Wasp Lisp 0.3 on Mac OS X Fixed</title><content type='html'>There is a bug in LibEvent on Mac OS X when using any I/O scheduling method more sophisticated than select(2); Wasp Lisp 0.3.2 provides support for Mac OS X by disabling the more efficient kqueue(2) and poll(2) I/O schedulers on that platform and that platform only.  It's disappointing, really, and any Mac OS X aficionado is more than welcome to find a more satisfactory way to achieve this -- I only use OS X when under duress. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-8352166612241884155?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/8352166612241884155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=8352166612241884155' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/8352166612241884155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/8352166612241884155'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2008/08/wasp-lisp-03-on-mac-os-x-fixed.html' title='Wasp Lisp 0.3 on Mac OS X Fixed'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-3740967023884820280</id><published>2008-08-08T05:53:00.000-07:00</published><updated>2008-08-08T06:20:59.764-07:00</updated><title type='text'>Barely 24 Hours In..</title><content type='html'>.. and someone has already poked holes in the new I/O loop.  I've cleaned up some issues related to the I/O loop, noninteractive programs, and some inconsistent I/O states that could crop up from exotic interleaving of the wait-input, send-output and exit primitives.

Version 0.3.1 is now up on "&lt;a href="http://waspvm.googlepages.com/"&gt;Wasp Lisp Releases&lt;/a&gt;," with fixes for all the issues above and a wee bit more work on WaspDoc.

Wes Brown has found some I/O problems on Mac OS X Leopard; I will dig out my old Mac OS X box and see what the issue is this evening or tomorrow.  If it isn't just a compile problem, 0.3.2 may be following in the next 24 hours.   Viva La Beta!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-3740967023884820280?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/3740967023884820280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=3740967023884820280' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/3740967023884820280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/3740967023884820280'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2008/08/barely-24-hours-in.html' title='Barely 24 Hours In..'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-7244926597706153213</id><published>2008-08-07T18:25:00.001-07:00</published><updated>2008-08-07T18:26:48.594-07:00</updated><title type='text'>Ephemeral Security Found at an Archive Near You</title><content type='html'>Found this when digging for some old EphSec information for an email:

&lt;a href="http://web.archive.org/web/20061018024651/ephsec.squarespace.com/lisp/2006/5/28/mosquito-lisp-easy-to-learn.html"&gt;Ephemeral Security: Mosquito Lisp Easy to Learn&lt;/a&gt;

Looks like Archive.Org backed up the entire EphSec blog..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-7244926597706153213?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/7244926597706153213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=7244926597706153213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/7244926597706153213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/7244926597706153213'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2008/08/ephemeral-security-found-at-archive.html' title='Ephemeral Security Found at an Archive Near You'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-2649761635749159587</id><published>2008-08-07T05:49:00.000-07:00</published><updated>2008-08-07T05:53:15.344-07:00</updated><title type='text'>WaspVM 0.3 Released!</title><content type='html'>After nine months in development, WaspVM 0.3 is complete.  0.3 will be the last alpha release of WaspVM, with development focus moving on to improving the reliability and usability of the functionality present in WaspVM, and writing documentation.

Since WaspVM 0.2, the autoconf build process has been removed, returning to a Mosquito-style Makefile.cf; we have also seen some serious improvements in the I/O loop, including bugfixes for some issues that have been part of MOSVM and WASPVM for years.  (Mostly win32-related..  And someone please kick me before I autoconf again..)

The source package and prebuilt windows executables can be found at &lt;a href='http://waspvm.googlepages.com'&gt;Wasp Lisp Releases&lt;/a&gt;.  Please, try these packages out and let me know if you have any problems building, installing or using them.  Every bug found now is a bug that won't be there for Wasp 1.0..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-2649761635749159587?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/2649761635749159587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=2649761635749159587' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/2649761635749159587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/2649761635749159587'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2008/08/waspvm-03-released.html' title='WaspVM 0.3 Released!'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-7188235266118972455</id><published>2008-08-07T05:05:00.000-07:00</published><updated>2008-08-07T05:13:06.140-07:00</updated><title type='text'>Win32 and LibEvent</title><content type='html'>I found a hack that lets my win32 console workaround cohabitate with LibEvent for the present; if I wedge a &lt;a href="http://msdn.microsoft.com/en-us/library/ms686307(VS.85).aspx"&gt;SleepEx( 0, TRUE )&lt;/a&gt; before I let event_loop take away my CPU, the console can take advantage of &lt;a href="http://msdn.microsoft.com/en-us/library/ms684954(VS.85).aspx"&gt;QueueAPC&lt;/a&gt; to post any I/O updates to the main virtual machine thread.  It's a grotesque hack, but necessary because LibEvent's WIN32 logic uses WIN32's select emulation.

Long term, I need to fire off a patch upstream to LibEvent, removing the poor performance of select, and moving to the more modern I/O completion callbacks.  (Well, as modern as anything &lt;a href="http://www.flounder.com/asynchexplorer.htm"&gt;derived from VMS network programming&lt;/a&gt; can be..)  But, for now, I can safely release WaspVM 0.3 and see about getting work done on documentation and perfection.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-7188235266118972455?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/7188235266118972455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=7188235266118972455' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/7188235266118972455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/7188235266118972455'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2008/08/win32-and-libevent.html' title='Win32 and LibEvent'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-7399864753527230764</id><published>2008-08-06T07:30:00.000-07:00</published><updated>2008-08-06T07:42:09.913-07:00</updated><title type='text'>HTTP Server Drag Racing</title><content type='html'>I've finished another wave of tweaks to the Wasp I/O event loop, basically just cleaning up some leaks and crashers that snuck in.  The current product is pretty stable, but still not ready to build on Windows.  (To support the console on Windows, I have to not use LibEvent, which is disappointing as always..)

To stress the garbage collector, I have been using the &lt;a href="http://www.joedog.org/Siege/Manual"&gt;Siege&lt;/a&gt; load test utility against the Wasp lib/http-server module.  Even at 250 concurrent connections, Wasp manages to perform comparably to HTTP servers written in other dynamic languages.  There are sporadic bits of latency, though, due to the stop-the-world garbage collector used by Wasp.  (It'll be replaced after 1.0..  Trying to keep my priorities straight, here..)

For comparisons between Wasp and &lt;a href="http://www.acme.com/software/thttpd/"&gt;THTTPD&lt;/a&gt;, see "&lt;a href="http://waspvm.googlepages.com/dragracingagainstthttpdusingsiege"&gt;Drag Racing Against THTTPD Using Siege&lt;/a&gt;."  It's not terribly rigorous -- just the sort of thing that crops up when you have load testing tools lying around. :)

(As always, the bleeding edge source is available at sourceforge; as soon as I get Win32 builds where I want them, I'll cut a new distribution for those chained to Microsoft..)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-7399864753527230764?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/7399864753527230764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=7399864753527230764' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/7399864753527230764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/7399864753527230764'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2008/08/http-server-drag-racing.html' title='HTTP Server Drag Racing'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-7585923614223312058</id><published>2008-08-03T07:27:00.000-07:00</published><updated>2008-08-03T07:46:40.184-07:00</updated><title type='text'>Temptations and Invisible Peer Pressure</title><content type='html'>I have developed a little hobby over the past couple years -- going out and finding mentions of Mosquito, MOSREF or Ephemeral Security that also suppose that the Mosquito project has gone dead and I have disappeared off the face of the earth.  It is really my own fault, Wes has always been better than me at self-promotion; I do things like Mosquito just to entertain myself without considering that other people might find them useful.

Most of these mentions are people who were in the DC14 audience who were really looking forwards to using MOSREF 2.0 for their own research and professional use.  I feel a certain amount of sadness when I realize that I disappointed these people when I veered off into language design.  People seem to be daunted by the challenge of learning Mosquito Lisp and making their own improvements to MOSREF, which is a shame.

Perhaps in the near future I'll take a day or two to port MOSREF for those hopeful few who are still interested.  It'll be a nice holiday from doing the responsible thing: focusing on getting Wasp to a production-quality level.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-7585923614223312058?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/7585923614223312058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=7585923614223312058' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/7585923614223312058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/7585923614223312058'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2008/08/temptations-and-invisible-peer-pressure.html' title='Temptations and Invisible Peer Pressure'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-9159542255780007438</id><published>2008-07-29T19:21:00.000-07:00</published><updated>2008-07-29T19:31:58.091-07:00</updated><title type='text'>Return of the I/O Loop</title><content type='html'>The I/O loop, using Niels Provos' &lt;a href="http://http://monkey.org/~provos/libevent/"&gt;LibEvent&lt;/a&gt;, is back in the WaspVM trunk, along with some of the TCP/IP functionality and expanded timeout functionality.  This doesn't work on Windows at the moment, because Windows requires Sockets, the Console and Devices to be treated differently; I will probably have to write a new I/O loop from scratch for Windows.  (We had this problem in Mosquito, too; we just ignored the console, and used netcat to provide a console interface..)

I know that the I/O loop was supposed to be deferred until &lt;b&gt;after&lt;/b&gt; WaspDoc, but we were getting into some dire straits at work, with a few devices with very primitive serial chipsets.  If we uploaded parameters faster than roughly 16 bytes per 100ms, the buffers would overflow and the device would crash.  The new pause primitive, which accepts an optional duration in milliseconds, lets a process rest periodically to let the wretched controller to digest each transmission.

Originally, I wrote this script using Python, but.. Bleh.  Too complex. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-9159542255780007438?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/9159542255780007438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=9159542255780007438' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/9159542255780007438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/9159542255780007438'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2008/07/return-of-io-loop.html' title='Return of the I/O Loop'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-7556325743390047177</id><published>2008-07-09T07:01:00.000-07:00</published><updated>2008-07-09T07:09:18.557-07:00</updated><title type='text'>Interoperability Using Google Buffers</title><content type='html'>Work has been steady but slow on Wasp; as usual, I have been less interested in building that crucial foundation for a Wasp community than in using Wasp itself for my pet projects.  Work on Wasp Core has been centered around getting the old LibEvent event loop restored, and backporting the TCP listener from Mosquito.  Parts of WaspDoc have been backported as well, so it is easier to see what a Wasp Lisp module imports and exports.

Outside of the Core, I have been having a lot of fun porting &lt;a href="http://google-opensource.blogspot.com/2008/07/protocol-buffers-googles-data.html"&gt;Google's Protocol Buffers&lt;/a&gt; API to Wasp.  Google's protocol design resembles a less verbose version of the "Sickle" protocol I have used internally in my MUD servers; very elegant and more compact than my designs.  The "protocol compiler" used by Google reminds me a lot of the Quincy protocol compiler we used at Ephemeral Security in &lt;a href="http://ipaf.sourceforge.net"&gt;IPAF&lt;/a&gt;, a protocol analysis framework that could be considered a predecessor to Mosquito's concurrency model.

It is difficult to balance laying groundwork for Wasp users with my own entertainment..  It doesn't help that my wife is on me to finish the latest MUD server for her friends to use.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-7556325743390047177?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/7556325743390047177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=7556325743390047177' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/7556325743390047177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/7556325743390047177'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2008/07/interoperability-using-google-buffers.html' title='Interoperability Using Google Buffers'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-7429568302803149328</id><published>2008-06-10T10:27:00.000-07:00</published><updated>2008-06-10T10:30:07.772-07:00</updated><title type='text'>WaspVM Rewind Installs</title><content type='html'>Just a quick update; the build system for WaspVM Rewind now builds subsystems again, the install script works, and a few warts that used to trouble the subsystems are gone.  I need to write a cron job that watches for me trying to bugger up my projects with autotools and applies a startling electric current to my chair..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-7429568302803149328?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/7429568302803149328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=7429568302803149328' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/7429568302803149328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/7429568302803149328'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2008/06/waspvm-rewind-installs.html' title='WaspVM Rewind Installs'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-2163576634899485176</id><published>2008-06-07T04:55:00.000-07:00</published><updated>2008-08-07T05:05:08.411-07:00</updated><title type='text'>The Wasp Lisp Rewind</title><content type='html'>&lt;p&gt;First, some back of the envelope statistics: there are 283 primitives in the WaspVM virtual machine, as of 2008/05/25.  Of these, 116 are used by the Wasp REPL -- determined by some clever partial compilation and finding the subset of global variable references that have the same name as a primitive.  None of these primitives have had documentation outside of the CHANGES file since WaspVM forked from MOSVM.  Few of these have had test cases written for them, and none of these test cases could be considered even slightly rigorous.  For a project which wants to achieve a production-quality environment, this is dire news.
&lt;/p&gt;&lt;p&gt;
When I made my decision last week to increase my efforts with Wasp Lisp, it was obvious that feature creep was running away with the language (again), and it would be necessary to get out the refactoring chainsaw.  My new objective is to get the virtual machine primitive count down to those currently used by the compiler, then improve code, test, and work on documentation quality.
&lt;/p&gt;&lt;p&gt;
After we have 100% test coverage of primitive functionality, and 100% reference documentation of primitive objects contained by the Wasp Virtual Machine, it will be safe to bring back these features, along with a number of modules that have bitrotted since the fork.  
&lt;/p&gt;&lt;p&gt;
It will not be glorious work, but the resulting polish should be worth it.  The winnowing portion should be fairly quick, I have already removed a couple dozen and damned autoconf in the new &lt;a href="http://code.launchpad.net/~swdunlop/waspvm/rewind"&gt;WaspVM Rewind&lt;/a&gt; branch.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-2163576634899485176?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/2163576634899485176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=2163576634899485176' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/2163576634899485176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/2163576634899485176'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2008/06/wasp-lisp-rewind.html' title='The Wasp Lisp Rewind'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-9132363711360045404</id><published>2008-06-06T05:04:00.001-07:00</published><updated>2008-06-06T05:27:33.709-07:00</updated><title type='text'>Surprised by Loud Noises..</title><content type='html'>A few days ago, Wes Brown wrote an article on &lt;a href="http://www.matasano.com"&gt;Matasano Chargen&lt;/a&gt; about design choice I made for the Mosquito Secure Remote Execution Framework (MOSREF) to go from Lua to Mosquito Lisp (MOSVM).  Within a matter of hours there were some very interesting questions about why we had stopped working on Mosquito Lisp, and the usual outrage about my dislike for Lua.  I was surprised to see how many people wanted to know why development of MOSVM had stopped; I had made some faulty assumptions about the community's interest in MOSREF, MOSVM, and what would happen when Wes and I moved on to other things.

There has been some activity on Matasano Chargen and &lt;a href="http://blog.amber.org/2008/06/02/mosquito-lisp/"&gt;Pensieri di un Lunatico Minore&lt;/a&gt; about the future of Mosquito Lisp and MOSVM, reminding me that there were programmers interested in the MOSREF project because of our Lisp dialect, as well as security professionals.  While I have continued working on my fork of MOSVM, &lt;a href="http://waspvm.googlepages.com"&gt;Wasp Lisp&lt;/a&gt;, I have not been terribly public about it because I thought there was no audience.

Due to this reminder that other people are, indeed, watching and interested, I will bump up Wasp in my personal priorities -- above Kabuki and KoVM; I really would love to have a production quality application of the concepts we introduced in Mosquito Lisp.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-9132363711360045404?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/9132363711360045404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=9132363711360045404' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/9132363711360045404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/9132363711360045404'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2008/06/surprised-by-loud-noises.html' title='Surprised by Loud Noises..'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-3755416500802967017</id><published>2008-01-21T08:40:00.001-08:00</published><updated>2008-01-21T08:50:09.119-08:00</updated><title type='text'>Return of Networking</title><content type='html'>The latest patch restores &lt;span style="font-style:italic;"&gt;(tcp-connect addr portno) -&gt; connection&lt;/span&gt; and &lt;span style="font-style:italic;"&gt;(resolve-ipv4 hostname) -&gt; addr&lt;/span&gt; to WaspVM, using &lt;a href='http://monkey.org/~provos/libevent/'&gt;LibEvent&lt;/a&gt; for the network loop.  At the moment, this has only been tested on Linux, and I have not had a chance to port it over to Win32, as I do not have an NT box up at the moment.

I am getting a fair amount done, now that I have an &lt;a href='http://en.wikipedia.org/wiki/ASUS_Eee_PC'&gt;Eee PC&lt;/a&gt; to drag into work with me -- I can tease away at the bug list at lunch.

Another interesting change is the addition of arguments to spawn; spawn now accepts functions of any arity, and zero or more optional arguments to be supplied to the function when the process begins.  For example:

&lt;pre&gt;
&gt;&gt; (spawn print "-- Hello\n")
:: [process 0x12345]
-- Hello
&gt;&gt; 
&lt;/pre&gt;

This capability has been in the Process API for a while, I have just been too busy with other things to tweak the spawn primitive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-3755416500802967017?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/3755416500802967017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=3755416500802967017' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/3755416500802967017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/3755416500802967017'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2008/01/return-of-networking.html' title='Return of Networking'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-6207789324522437975</id><published>2007-12-02T15:08:00.000-08:00</published><updated>2007-12-02T15:11:37.148-08:00</updated><title type='text'>Building on 64-bit Linux</title><content type='html'>WaspVM and Mosquito were never intended to run natively on 64-bit architectures.  While efforts were made to keep any size assumptions under control, it appears WaspVM isn't building properly in native 64-bit architectures.

WaspVM will build if you specify "gcc32" as your CC, but it still won't bootstrap.  ("CC=gcc32 ./build")&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-6207789324522437975?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/6207789324522437975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=6207789324522437975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/6207789324522437975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/6207789324522437975'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2007/12/building-on-64-bit-linux.html' title='Building on 64-bit Linux'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-5462778259548478134</id><published>2007-11-24T07:02:00.000-08:00</published><updated>2008-01-21T08:45:12.327-08:00</updated><title type='text'>Mixing a Wasp VM With Threaded Applications</title><content type='html'>My driving problem for Wasp has a GUI written in Qt.   Like most GUI libraries, Qt is callback-happy, and expects to be the outer loop for the application; to get around this, I need to let the Wasp Virtual Machine run as its own thread, and use channels to bridge between the two.

Since Wasp is not designed to be terribly friendly to native OS threads, with quite a few global variables in the Virtual Machine, I have added two C functions that pause the VM and resume it: &lt;i&gt;wasp_seize_vm( )&lt;/i&gt; and &lt;i&gt;wasp_release_vm( )&lt;/i&gt;, respectively.

These two functions wrap a simple mutex that is locked while the inner Wasp process loop is running, and released momentarily when Wasp is transitioning from one process to another.  The GUI application uses &lt;i&gt;wasp_seize_vm( )&lt;/i&gt; to grab control of the GC system, send a message to the event channel, then release control with &lt;i&gt;wasp_release_vm( )&lt;/i&gt;.  With care, if you squint enough, the threads seem to act like Wasp processes -- as long as you don't touch any Wasp-managed objects.

I use Qt's notifiation APIs in the GUI wrapper library to let Qt know when it needs to do the same.

Vacation's over, time to drive home and start getting ready for work.  (As opposed to Wasp, which is still strictly goofing off.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-5462778259548478134?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/5462778259548478134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=5462778259548478134' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/5462778259548478134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/5462778259548478134'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2007/11/mixing-waspdoc-vm-with-threaded.html' title='Mixing a Wasp VM With Threaded Applications'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-1943960887436256213</id><published>2007-11-24T06:55:00.000-08:00</published><updated>2007-11-24T07:01:15.804-08:00</updated><title type='text'>WaspDoc Dump Module / Source Feature</title><content type='html'>"Dump Module" is a neat new toy in the WaspDoc tree that grew out of WaspDoc's source parser.  Given a source file, "waspdoc check source &lt;path&gt;" will open the file, analyze its imports and exports, then print them to standard output.  As you can see in the example below, it isn't perfect; things like doing &lt;i&gt;(define func (lambda args ...))&lt;/i&gt; will look like a variable export to WaspDoc, but it can be really handy when you need to know what the arguments for a given function are.

&lt;img src='http://img.photobucket.com/albums/v384/Fuligin/waspdoc.png' /&gt;

Hopefully, by next weekend, WaspDoc will be able to do this for primitives as well; this data is used by WaspDoc to generate skeleton documentation files.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-1943960887436256213?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/1943960887436256213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=1943960887436256213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/1943960887436256213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/1943960887436256213'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2007/11/waspdoc-dump-module-source-feature.html' title='WaspDoc Dump Module / Source Feature'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-722247789159923063</id><published>2007-11-19T06:39:00.000-08:00</published><updated>2007-11-19T06:42:16.136-08:00</updated><title type='text'>One Last Thing -- Dir-Read and Dir-Path</title><content type='html'>Added two more primitives to support WaspDoc before I get away from my build environment: &lt;i&gt;(dir-files path)&lt;/i&gt;, which lists files contained by a directory, (Well, files, directories, named pipes, it's not terrible discriminating..) and &lt;i&gt;(dir-path? path)&lt;/i&gt; which works much like &lt;i&gt;(file-path? path)&lt;/i&gt; to identify valid directory paths.

Both of these primitives will work under POSIX and Windows, thanks to MinGW.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-722247789159923063?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/722247789159923063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=722247789159923063' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/722247789159923063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/722247789159923063'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2007/11/one-last-thing-dir-read-and-dir-path.html' title='One Last Thing -- Dir-Read and Dir-Path'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-8710280041498477999</id><published>2007-11-18T19:06:00.001-08:00</published><updated>2007-11-18T19:17:17.844-08:00</updated><title type='text'>Iterations Over Sequences</title><content type='html'>Mosquito's implementation of iterators was derived from "&lt;a href="http://srfi.schemers.org/srfi-1/srfi-1.html"&gt;SRFI-1: List Library&lt;/a&gt;," and restricted itself mostly to iterating over lists, much like the original.  Since Mosquito and Wasp have much richer type libraries, it makes sense to generalize these functions to support other primitive sequence types, such as Sets, Dictionaries, Vectors and Channels.  (Yes, channels can be considered sequences of a sort.)

It is now possible to do the following:
&lt;pre&gt;&gt;&gt; (for-each send (current-input))&lt;/pre&gt;
The input yielded by &lt;i&gt;(current-input)&lt;/i&gt; is applied to the &lt;i&gt;(iter value)&lt;/i&gt; function, which yields an iteration thunk.  That thunk is called repeatedly by for-each until it raises a &lt;i&gt;(done why)&lt;/i&gt; error.  A slightly less verbose version:
&lt;pre&gt;&gt;&gt; (for-each send wait)&lt;/pre&gt;
The iterator for a function is the function itself; iter makes the assumption that the supplied function is a generator.  Part of this was already done in Mosquito, but only a couple functions supported it, it was never documented, and most sequences had to be converted into an intermediate list.  Those oversights have been corrected.

I am going on vacation this week, so, either expect a lot of changes, or none at all, next weekend.  Waspdoc now lists all functions exported by a module, identifies its imports, and is coming along nicely.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-8710280041498477999?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/8710280041498477999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=8710280041498477999' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/8710280041498477999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/8710280041498477999'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2007/11/iterations-over-sequences.html' title='Iterations Over Sequences'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-720491645451604525</id><published>2007-11-10T08:11:00.001-08:00</published><updated>2007-11-10T08:19:56.084-08:00</updated><title type='text'>Improvements in the Wasp Debugger..</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_82-gntTVtz4/RzXYYEFsOSI/AAAAAAAAAAU/9Wf5g-CTOww/s1600-h/trace-process.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_82-gntTVtz4/RzXYYEFsOSI/AAAAAAAAAAU/9Wf5g-CTOww/s400/trace-process.png" alt="" id="BLOGGER_PHOTO_ID_5131245258384619810" border="0" /&gt;&lt;/a&gt;As you can see from the screenshot, Wasp's trace mode now works only on the process that enters trace.  This should make it much easier to trace coroutines and subprocesses, especially in the REPL.  (Previously, you often got an eyeful of the REPL's compiler busily chopping up your expressions.)

Any sub-processes spawned by a process in trace mode will also start out in trace mode.  Keep in mind that the REPL runs each expression within the REPL's process, so typing &lt;span style="font-style: italic;"&gt;(enable-trace)&lt;/span&gt; at the REPL prompt is ill-advised.  (For those of you who couldn't resist, just type in &lt;span style="font-style: italic;"&gt;(disable-trace)&lt;/span&gt; to turn it back off when your terminal catches up..)

Also, the output has been cleaned up quite a bit -- only call frames and returned values are displayed.  I think that Wasp's compiler has matured enough for end users to resent seeing every variable lookup, argument push and jump.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-720491645451604525?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/720491645451604525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=720491645451604525' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/720491645451604525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/720491645451604525'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2007/11/improvements-in-wasp-debugger.html' title='Improvements in the Wasp Debugger..'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_82-gntTVtz4/RzXYYEFsOSI/AAAAAAAAAAU/9Wf5g-CTOww/s72-c/trace-process.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-7867801554197589963</id><published>2007-11-10T02:06:00.001-08:00</published><updated>2007-11-10T07:47:06.485-08:00</updated><title type='text'>Welcome to Wasp Lisp 0.2!</title><content type='html'>Wasp Lisp 0.2 is ready for the public!  The REPL is back in this version, and it seems to work well on my two test platforms, Linux/x86 and WinNT.  As in 0.1, the network event loop is still missing, subsystems won't build automatically, although they DO load on both platforms, and Wasp still won't produce standalone executables.

I know I said that 0.2 would have the network loop back, but people have been asking questions about Wasp again, so it is time to get something out the door.

For 0.3, I want to include a preliminary version of the WaspDoc documentation tool so a new Wasp Lisp manual can be written with the assistance of the user community.  (All three of you.. Well, if you build it, either they'll come or they'll still prefer DrScheme..)

In 0.4, the event loop will return, and Wasp will probably enter a feature freeze.  I expect to focus on unit tests, build processes and documentation.  Wasp and Mosquito have never had a real production quality release -- something I would like to change.

For Source and Win32 Builds, see the &lt;a href="http://waspvm.googlepages.com/"&gt;possibly temporary distribution site&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-7867801554197589963?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/7867801554197589963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=7867801554197589963' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/7867801554197589963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/7867801554197589963'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2007/11/march-to-alpha-one.html' title='Welcome to Wasp Lisp 0.2!'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-3498391103177610316</id><published>2007-06-22T20:30:00.000-07:00</published><updated>2007-06-22T21:59:59.314-07:00</updated><title type='text'>Version 0.1 Released! Kind of..</title><content type='html'>To avoid becoming the next Debian project manager, I decided it is probably time to release version 0.1 of WaspVM.  This version compiles and executes programs, but does not read input from the user correctly, does not do asynchronous I/O, does not build subsystems, and probably does not build on Windows.

But, it does contain the new Channel and Connection semantics, and it will be the last version that does not provide integration with native threads.  Version 0.2 will use pthreads and libevent to create a worker thread to manage I/O concurrent with the virtual machine.  I will also add the ability to build subsystems, which has been omitted because I am still trying to get comfortable with autoconf.

After 0.2, we will probably see Alpha One, and work will begin on the Wasp Documentation project.  With the lessons learned from WaspDoc and Alpha One, the Beta process and march to 1.0 will begin.

I'm setting a project deadline of roughly 2017 for 1.0..  Learned my lesson with that December target. :)

&lt;a href="https://code.launchpad.net/%7Eswdunlop/waspvm/0.1"&gt;http://code.launchpad.net/~swdunlop/waspvm/0.1&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-3498391103177610316?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/3498391103177610316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=3498391103177610316' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/3498391103177610316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/3498391103177610316'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2007/06/version-01-released-kind-of.html' title='Version 0.1 Released! Kind of..'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-1935226307788720454</id><published>2007-06-21T08:46:00.001-07:00</published><updated>2007-06-21T08:49:48.476-07:00</updated><title type='text'>So I don't misplace it.. A BSD licensed readline clone..</title><content type='html'>Perhaps calling it a clone is &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;disingenuous&lt;/span&gt;; WaspVM, like MOSVM, is LGPL'd and incompatible with GNU's readline implementation.  While I could probably do some horrible two-step around the license requirements, it is more honest to just use another library.

&lt;a href="http://www.cs.utah.edu/%7Ebigler/code/libedit.html"&gt;http://www.cs.utah.edu/~bigler/code/libedit.html&lt;/a&gt;

(For the curious legal minds -- since GNU Readline is GPL, it cannot be linked into our LGPL source code.  But, a GPL stub application could be linked to our LGPL interpreter library and the GPL Readline, acting as some legal insulation.  This kind of perversity keeps the lawyers of the world in business..)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-1935226307788720454?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/1935226307788720454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=1935226307788720454' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/1935226307788720454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/1935226307788720454'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2007/06/so-i-dont-misplace-it-bsd-licensed.html' title='So I don&apos;t misplace it.. A BSD licensed readline clone..'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-7274945857064248624</id><published>2007-06-03T18:04:00.000-07:00</published><updated>2007-06-03T18:13:18.573-07:00</updated><title type='text'>Getting Closer..</title><content type='html'>The thicket of bugs related to the I/O changes afflicting the Wasp REPL are starting to thin out; I cannot wait for some of the changes I have planned for debugging Wasp programs -- even I get tired of weaving through low level trace output.

The current issue appears to be a deadlock that forms after the first line is received by the Wasp REPL.  Deadlocks in Wasp cause the virtual machine to terminate without comment; I need to change this to emit more information about the current processes, and what they are waiting on.

Still no idea what is going on over at EphSec.. Wish people would stop asking me.  When I hit Alpha One, I'll start making Wasp more visible to the Lisp community to test the waters.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-7274945857064248624?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/7274945857064248624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=7274945857064248624' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/7274945857064248624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/7274945857064248624'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2007/06/getting-closer.html' title='Getting Closer..'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-2754608255998179654</id><published>2007-05-11T12:28:00.000-07:00</published><updated>2007-05-11T12:39:55.146-07:00</updated><title type='text'></title><content type='html'>It's May.. Like most deadlines, everything crept by..  The new job tends to leave me exhausted at the end of the day, so I have been slow in achieving my objective with WaspVM.   It didn't help that I made the mistake of using Google Code, which is horribly raw and unready, for managing the public source tree.

The &lt;a href="http://launchpad.net/projects/waspvm"&gt;new source tree&lt;/a&gt; may be found at the Ubuntu project's Launchpad; while this, too, is relatively raw, it doesn't force me to use Subversion, which automatically makes it a hell of a lot better than Google Code.  (&lt;a href="http://bazaar-vcs.org"&gt;Bazaar&lt;/a&gt; is like a more readable, less self-imploding &lt;a href="http://darcs.net"&gt;Darcs&lt;/a&gt;.)

The build tree self compiles, but does not do any of the following:
&lt;ul&gt;&lt;li&gt;Install.  It's a bit early for installing this version, it's very immature.&lt;/li&gt;&lt;li&gt;REPL. I still need to adjust all of the REPL source files for the new Channel semantics.&lt;/li&gt;&lt;li&gt;TCP Connections. The I/O monitor is going to be moved into a subsystem.&lt;/li&gt;&lt;/ul&gt;Once all of these things work, I will cut an alpha one release, and start laying down the framework for a new documentation project.  While I still have access to the old Mosquito  reference data, it was never clearly licensed and its quality was somewhat uneven -- I had very little input in the documentation process, and was never satisfied with it.

Which brings us to the next question: where in the world is &lt;a href="http://www.ephemeralsecurity.com"&gt;Ephemeral Security&lt;/a&gt;?  I can only guess that things have gone awry, and Wes Brown has decided to let the whole thing lapse into silence.  Since we split on less than amicable terms, I would probably be the last to know..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-2754608255998179654?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/2754608255998179654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=2754608255998179654' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/2754608255998179654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/2754608255998179654'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2007/05/its-may.html' title=''/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-7625059824786774101</id><published>2006-12-25T17:00:00.000-08:00</published><updated>2006-12-25T17:20:20.035-08:00</updated><title type='text'>Christmas Status Report</title><content type='html'>Things are proceeding slower than I would have liked for Alpha One.  The good news is that almost all of the new features have been written, but I have not had the time to test and integrate them into the code base.  The most painful problem has been with Mac OS X, which has some interesting idiosyncrasies in its dynamic library loader that have made the dynamic subsystems much more complicated to implement.  While I appreciate Apple's efforts at breaking new ground with OS X, I really wish they would either clearly document workarounds for their little innovations or keep them out of the POSIX / GNU / C level of their API's.  (In specific, the loading program cannot export symbols to be loaded by dynamic libraries loaded at run time.  An intermediate shared library that contains these definitions must be used, despite Apple's claims of 100% compatibility with other dlopen/dlsym implementations.)

This has forced a near total rewrite of the build system, which, for 1.0, will probably break the ability of waspc to produce standalone binaries.  This isn't a terrible thing, since I've wanted to move to autoconf for a while; we have wasted far too much time on our own build system and I would like things like Canadian Cross and VPATH builds.

The Sqlite3 subsystem was trivial to write, taking about a night to write and test.  I hope this is a good indication of how easy it will be to write third party subsystems for Wasp.  Quick, informal tests show it to be somewhat faster than the Python module I have been using, which is reassuring.

Work on the Streams and Channels reform has also been a bit of a struggle.  I have a fairly clear idea of where I want Channels and Streams to be -- easy to expand, easier to debug, and better performing.  And the C files in the current source tree reflect the new Channels fairly well.  The miserable part, as usual, is integrating these clean, neat abstractions with the OS.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-7625059824786774101?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/7625059824786774101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=7625059824786774101' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/7625059824786774101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/7625059824786774101'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2006/12/christmas-status-report.html' title='Christmas Status Report'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6395156550990005973.post-3014114416651973083</id><published>2006-12-01T06:07:00.000-08:00</published><updated>2006-12-01T06:12:55.483-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='waspvm'/><title type='text'>An' 31 Days Has December..</title><content type='html'>The objective - present a first alpha version of the new Wasp Virtual Machine, fork of the Mosquito Virtual Machine I designed for &lt;a href="http://www.ephemeralsecurity.com/"&gt;Ephemeral Security&lt;/a&gt;, by the beginning of the New Year.

For this first alpha, I want the new loadable subsystem API done, at least for UNIX platforms if not Windows, a complete Sqlite API, and an overhaul of Channels and Streams to make them more generic.  If possible I also want to have a simple API for native threads to run concurrent with the virtual machine thread for "worker" functionality so we can make peace with the Win32 APIs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6395156550990005973-3014114416651973083?l=waspvm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://waspvm.blogspot.com/feeds/3014114416651973083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6395156550990005973&amp;postID=3014114416651973083' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/3014114416651973083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6395156550990005973/posts/default/3014114416651973083'/><link rel='alternate' type='text/html' href='http://waspvm.blogspot.com/2006/12/31-days-has-december.html' title='An&apos; 31 Days Has December..'/><author><name>swdunlop</name><uri>http://www.blogger.com/profile/09410793088283629174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
