Because I'm an amazingly huge geek, I started working on creating my own programming language over the Thanksgiving holiday. I now have a working (but very primitive) byte-compiler and interpreter.
- Imperative-style syntax (i.e., like Python/C/Perl/Java and unlike LISP/ML/Prolog)
- Full support for continuations including callcc (a la Scheme) and serialization 
- List, unicode string, and byte-array types based on my blist data structure
- A pipe (|) operator (as in bash)
- Easy access to C libraries (similar to Python's ctypes module
Right now, continuations, serialization, and object prototypes appear to work. Many other important things (such as basic 4-function arithmetic!) remain unimplemented.
For the pipe operator, I imagine being able to chain Python-like generators together, something like this:
open `somefile.txt' | contains `Agthorr' | sort > important_lines
which (imo) is much easier to read than the Python equivalent:
important_lines = sorted(line for line in open('somefile.txt') if 'Agthorr' in line)
I find the pipe operator lends itself better to left-to-right reading, as opposed to nesting things in layers of parenthesis. Shells are the only languages I know of with a pipe operator, and they require spawning a separate process for each segment of the pipe.
Ideally, on multi-core machines I'd like to be able to assign each segment to a separate thread if the compiler can determine that the segments are fully independent (except for the piped data). I'm not sure how feasible it is for the compiler to determine independence other than in the most trivial cases, though.
 = Serializable continuations mean you can save the execution state of the program for later use. For example, you can save a CGI script's state to a database and resume where you left off
when you get a hit with the matching cookie, without having to explicitly move all of the data, e.g.:
foo = parse_html(html) send_form_page(foo) # save state to DB and return to main event loop foo2 = wait_for_form(event_loop) # main event loop called us back; resume sequence of pages for this user send_next_page(foo, foo2)
I have to put this project on the shelf for now, though. Maybe I'll make more progress over Christmas.