Open Source

These are various programs or routines that I've made publicly available in the past. Most are completely in the public domain, all are distributed with no warranty or plans for support.

Es is an extensible Unix shell based with first class functions, lexical scope, exceptions, and rich return values (i.e., functions can return values other than just numbers). Es's extensibility comes from the ability to modify and extend the shell's builtin services, such as path searching and redirection. Like the Plan 9 shell rc, it is great for both interactive use and for scripting, particularly since its quoting rules are much less baroque than the C or Bourne shells. For more details on es, see our paper Es: A shell with higher-order functions. [Joint work with Byron Rakitzis.]

dylan-phrases.y is a YACC implementation of the Dylan phrase grammar, corresponding to the BNF grammar in the Addison-Wesley edition of the Dylan Reference Manual, due out in the summer of 1996. The grammar has been reworked to be free of conflicts and ambiguities, as well as to allow words to serve multiple purposes in the same module -- for example, allowing the same word to be used as both a define word and begin word, as the language requires. I think it is suitable for use in a real implementation of the language. On the other hand, ambiguous-dylan-phrases.y is little more than a raw translation of the BNF grammar into YACC; perhaps it's useful for exploration and for purposes of comparison. (These files replace an earlier, out-of-date YACC implementation that was unsuitable for use with macros.)

A translation into Java of the ``ripper'' from the 2002 Google programming contest.

Lcomp is a basic block (or instruction) profiler, which works by doing a post-processing pass on compiler-generated assembler files. The posted version includes only VAX and Motorola 68K versions, but if you really want it, I can probably hunt up an Intel 386 back-end. The technique was cribbed from Peter Weinberger's paper, Cheap Dynamic Instruction Counting.

crc.c is a Unix filter which calculates a cyclic redundancy check for files or standard input. It's a much better checksum than sum uses and produces the same result on big- and little-endian machines.

encode85.c and decode85.c convert files to and from Ascii85 (base 85) format, which is used in PostScript. I use them in lieu of uuencode and uudecode because the encoding is denser and these programs can be used as Unix filters.

from.c is an incompatible replacement for the Unix from program, which reports who you you have mail from. This version prints names, email addresses, and subject lines.

ulc.c is a toy Untyped Lambda Calculator. You type an expression in the lambda calculus, it reduces it.

vis.c and unvis.c are Unix filters that convert binary files to 7-bit ASCII and allow translation back. (These use the auxiliary files new.h, efopen.c, and panic.c.)


Paul Haahr