Darius Bacon

This is my old homepage from the 1990s; you may want my new one instead.


I'm not currently looking, but here's my résumé.


Programs that I either use or wrote for other people's use.
  • idel: A virtual machine for efficient cooperation of mutually-suspicious mobile code modules.
  • clickcheck: Lisp and Python libraries for testing with random test-case generation.
  • uts: A Scheme bytecode interpreter I use for my personal scheming. It includes all of the R4RS required procedures plus a few extras, like a debugger, yet it's still very small and hackable. But it's not under active development, and thus not recommended to others.
  • consp: A multiuser dialect of Scheme illustrating capability security.
  • epan: Random collection of code in E, including Mark Miller's SmallCaps virtual machine and my incomplete E compiler for it. Contributions welcome.
  • expr: Evaluates arithmetic expressions with variables, in Java. There's a manual. You may prefer the older version 1 for its smaller size; the newer version tries much harder to give helpful error messages on bad inputs.
  • tush: Literate testing for shellscripts. Vaguely like doctest, UpDoc, and FIT. More explanation.
  • yabe: A Java bytecode emitter library. Comes with a Scheme to JVM compiler descended from the `teeny' interpreter (see 'alg_gen' in the right column), to test out the Java bytecode emission. (Check out Jscheme for a more industrial-strength Scheme on Java.)
  • vapour: I created a systems-programming dialect of Lisp for this operating system that unfortunately is living up to its name right now: the code's still unreleased.
  • miasma: A machine-code toolkit for x86 CPUs usable from C and Python, written in Scheme, extracted from Vapour. With contributions by Brian Spilsbury.
  • datastruct: Scheme data structures & algorithms. Includes purely functional queues, priority queues (pairing heaps), and unordered sets, plus mutable tries and Boyer-Moore-Horspool string searching.
  • bench: A multi-language set of tiny benchmarks that try to exercise compilers in different ways. They're not a serious measure of performance, but a first cut meant to winnow out hopelessly slow systems quickly. Like the later Computer Language Shootout.
  • req: A calculator programmable with rewrite rules. Very old and another one of those programs I use daily but don't recommend to others.
  • nanocad: A free molecular modeler I contributed to.
  • ridarama: Public-transit trip planning, with scope for lots more cool stuff; this would be a good project for someone else to take further.
  • amazon rescuer: Takes the books from an Amazon wishlist and builds a new wishlist page pointing to another site like booksense.
  • skwiki: A Wiki server by Luke Gorrie that runs Scheme code users can place inline on Wiki pages. (My role was just design advice and some Scheme snippets.)



  • contact: How to reach me, plus my PGP public key.
  • books I like: Recommendations.
  • sale: Books and stuff I used to be selling (currently inactive).
  • to read: Books I would like to check out but have not yet found.
  • wry.me: My blog.
  • livejournal: My online diary for regular people.
  • advogato: Another one for free-software hackers.
  • futurism: Some links about where we're going with technology in the longer term.
  • vitals: Random info about me (somewhat outdated).


These I made more for fun or point-proving than utility.
  • icbins: A self-hosting Lisp-to-C compiler and interactive interpreter in about 10 pages of code. No, not scrunched and obfuscated code. New: ichbins, a rewrite in 6 pages, sans interpreter.
  • hypercode: A HyperCard stack prototyping some ideas about end-user programming.
  • emacscard: A variation on those ideas, in Emacs Lisp; one way to think of it is as a primitive "spreadsheet for text". You can browse the source online.
  • scheme wiki: a wiki that runs literate programs in Scheme. This is a bit like the later Logo Wiki without the graphics, or the earlier skwiki (at left) with better modularity. Written in Python. Needs a real name and a server, but I hadn't meant to release it yet.
  • ikiwiki: A prototype webserver/Wiki in C. Makes its own code publically editable. The Scheme wiki above is a more interesting development of this.
  • mixal: An assembler and interpreter for the MIX machine in Knuth's The Art of Computer Programming. This code became the starting point of GNU MDK.
  • halp: Haskell Active Literate Programming. Run your Haskell literate program as you're editing it, with results inserted in place: a quickie hack in Elisp with Brandon Moore. A more serious version of this ought to be pretty useful.
  • plonk: A Java port of the bytecode engine of uts. This was the world's first full-scale Scheme for Java, but I considered it too slow to be worth developing further. It's only known to work in Java 1.0. This all-Scheme version of the engine also includes source for the bytecode compiler and runtime.
  • screenfuls: A `screenful' is the programming analog of nanofiction: a readable program that does something interesting and fits in one screen. Send me more!
  • lambda papers: code from the Steele & Sussman papers on Scheme running on a Common Lisp substrate.
  • annotated rabbit: Guy Steele's RABBIT compiler, with extra notes I added while studying it.
  • awklisp: A Lisp interpreter in Awk that ran faster than a commercially available Basic interpreter at the time it was written. Version 1.2 includes a contributed port to Perl with some extra features.
  • classfile: Parses and unparses Java classfiles. Written in Scheme.
  • pisa: An instruction-level simulator for the MIT Pendulum reversible computer, in Scheme.
  • doe: Yet another tiny Emacs clone. While even I don't use it (actually I do use a version of it now, which I ought to upload), its design and code influenced Ermacs. There's also a simpler older version.
  • bdd: Binary decision diagrams in Scheme.
  • mlish: An infix syntax frontend for Scheme.
  • indent: A more Python/Haskell-like syntax, using indentation in place of parentheses. Also included are similar hacks by Paul Fernhout and Egil Moeller.
  • spelling: Corrects spelling using minimal edit distance from dictionary words. Also in Scheme. Add this code to enumerate mangled book titles like Nice Princes in Amber. See also Peter Norvig on spelling correction for a complementary treatment. Both programs are short.
  • toy compiler: My first compiler from a semi-real language to assembly code, in SML. Based on ideas from Kelsey's ``A Correspondence between Continuation Passing Style and Static Single Assignment Form''.
  • alg_gen: A variation on Will Ware's Algorithmic Generation of Molecular Structures. Includes a teeny Lisp in Java by Luke Gorrie and me. This wasn't meant as a fork in Ware's code so much as ``why don't you do it this way?''
  • dcalc: A simplified C version of the Java expression calculator above, used by the #C bot named algorithm. See dcalc.h and dcalc.c.
  • lisp study: The result of my participation in Erann Gat's study comparing Lisp programmers to C/C++/Java ones. Peter Norvig also tackled the problem later on, totally kicking my butt.
  • amoral carnage: The Lisp-study code was easily adapted to generate anagrams instead of `phone-a-grams'. There are much fancier anagram programs out there, but this one's short and simple and fast enough.
  • haste: My ICFP 2001 contest entry. (You can find it in the results under `demoncrat'.) Described here.
  • icfp 1999: In 1999 I forgot the contest was coming up, wasted time trying to assemble a team, and hacked up a fairly anemic optimizer in Scheme. I was too embarrassed to submit it, but from the results it looks like it would have placed decently. That's why I went ahead and submitted my 2001 entry.
  • factor: Factors numbers. Another ancient utility I call on sometimes, that's too trivial to put under `software'.


  • deviantart: Digital images created by interactive evolution.
  • gallery: Earlier results from the same program.
  • evoart: My first efforts in this line, including program source code.

Home   |   © 1994-2004 by Darius Bacon