I am a doctoral student at Indiana University in the Computer Science Deparment. My advisor is Dan Friedman, with whom I work on a variety of topics in programming languages. (See also the IU Computer Science Research Page.)
In case someone wants it, my resume is available in PostScript format. (You can also have it in PDF.)
Several people have asked where they can find my note on how I used correctness-preserving transformations to implement a very fast "Fast Multiplication" program in an algoriths class my first year at IU. Here it is.
This page is a little out of date now. Updates coming soon!
call/cc to spawn to
exception-handling mechanisms.Our most recent result here is that CPS can be used as a route to using no stack- or continuation-space overhead in programs that construct data structures. Dan Friedman and I have a paper on this topic, which appeared at ICFP '98. (There was a little bug, discovered by Oleg Kiselyov, on the next-to-last page in the version presented at the conference. The version here has been corrected.) It is available in hypertext format or in several printable forms, listed here in decreasing order of print quality. The PDF was created from the PostScript, which was created from the DVI file. Get the DVI file if you have a viewer or printer driver (such as dvips) for it.
If you are looking for thedatatype macro, it can
be found below.
The following section contains my biased opinions about various programming languages, but it also contains links to code that you may find useful.
My favorite programming language is Dylan. Dylan is a completely object-oriented language, with multiple inheritance, generic functions, a powerful module system, a very expressive exception-handling system, hygienic macros, pleasant semantics, and a clean way to turn the knob between expensive dynamic behavior and efficient static constraints.
I am working (occasionally) on an optimizing Dylan compiler. I also have thousands of lines of Dylan code lying around, some of which I'll link in here, as soon as I get around to it. In the meantime, here are some other valuable Dylan resources:
The common toungue around here is Scheme. Scheme is technically a small, neat dialect of Lisp, but Scheme programming tends to feel quite different from Lisp programming, to me. Currently, Scheme has a beautiful core, but no standardized module, macro, exception-handling, or record mechanisms. Almost all real implementations of Scheme have these things, but they all differ. Of course, Scheme isn't object-oriented, either.
I think Scheme really shines as a language for scripting, application extension, and all those other things for which people use Perl, Basic, and shell languages. Here are some resources:
datatype macro for Scheme (also
available in DVI and
PostScript formats).
If you just want to use the macro, without understanding all the
details, you can get
datatype.ss,
which contains only the code. This is a work-in-progress, which
is being updated regularly. The current version was posted on 24
September 1998.
Well, OK, so Java isn't all that bad. In fact, it has several redeeming qualities, and even a few good ideas. I have actually done quite a bit of hacking in Java. The best things about Java are its portability (especially for GUIs), its attempt to be secure, and its concept of snatching code from across the 'Net. (Sending the code to handle data along with the data itself is simply the right way to do things.) The worst things about Java are its nasty attempts to cater to C++ syntactic conventions, its impure object model, and its failure to demand that JVMs handle tail recursion properly.
The largest body of Java code I have written is a big library of data structures and supporting routines. I also have several other cute hacks (cute in a programming-language way, that is), which will appear here soon. In the meantime, here are some other resources:
I used to do lots and lots of programming in C++. Yes, that's right, hundreds of pages of code. I got sick of managing my own memory, mainly. Actually, it's hard to pin down what makes C++ so unpleasant for coding. In fact, C++ is unpleasant in the same sort of general way that Dylan is pleasant.
On the other hand, I suppose it is worth mentioning that C++ has provided some excellent material for analysis and study. For example, nailing down the true foundations of the multiple inheritance mode (and its implementation) in a mathematical way turned out to be a major undertaking (see Jon Rossie's work).
Even though I don't like it, I do have some fairly useful C++ code lying around. I'll make it available here soon.
Here is my GnuPG public key, in case you need it.