Darius Bacon

Hi. I code stuff.


work

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

software

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

writings

personal

  • 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).

hacks

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 Möller.
  • 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.
  • 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'.

art

  • 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