| Path: | README.txt |
| Last Update: | Mon Feb 18 10:40:56 -0800 2008 |
Bus Scheme
by Phil Hagelberg (c) 2007 - 2008
http://bus-scheme.rubyforge.org
Bus Scheme is a Scheme written in Ruby, but implemented on the bus! Every programmer must implement Scheme as a rite of passage; this is mine. Note that at least half of the implementation of Bus Scheme must be written while on a bus. Documentation, tests, and administrivia may be accomplished elsewhere, but the majority of actual implementation code is strictly bus-driven. Patches are welcome especially if they were written while riding a bus. (If your daily commute does not involve a bus but you want to submit a patch, we may be able to work something out regarding code written on trains, ferries, or perhaps even carpool lanes.) Bus Scheme is primarily a toy; using it for anything serious is (right now) ill-advised.
Bus Scheme aims for general Scheme usefulness optimized for learning and fun. It‘s not targeting R5RS or anything like that.
$ bus # drop into the REPL
$ bus -e "(do some stuff)"
$ bus foo.scm # load a file
See technomancy.us/104 for a "Getting Started" tutorial.
Well, for starters it‘s implemented on the bus. No other Scheme implementation can claim this. Here are a few other things that set Bus Scheme apart:
Taking a hint from Arc, Bus Scheme allows you to use the notation (mylist n) to access the nth place of the mylist list instead of (nth mylist n) or the (myhash key) notation to access the slot in myhash corresponding to the value of key instead of (gethash myhash key). TODO: This notation is flexible, and other data types may have their own "call behaviour" specified.
Web and RESTful application development are part of the package. Bus Scheme uses the wonderful Mongrel web server to allow scheme programs to serve web applications. TODO: Representations of data can be easily translated between s-expressions, HTML, and JSON.
Bus Scheme is written in Ruby, which means anyone with experience in high-level dynamic languages (like, oh, I don‘t know… Scheme?) should be right at home poking around at the implementation. Using Ruby allows the implementation code to remain compact and concise. Bus Scheme should run on Ruby 1.8, Ruby 1.9, and Rubinius at least. Bus Scheme also allows you to drop into Ruby when that‘s convenient. TODO: allow real inline Ruby blocks instead of access via a function call.
TODO: Bus Scheme has a notion of XML literals so that it may be inlined into your Scheme code, much like the way ECMAScript uses E4X. If you‘d prefer, you can leverage convenient s-expression -> XML conversion facilities.
Bus Scheme is written in an entirely test-driven manner. As much as possible, it tries to keep its tests written in Scheme itself, so it includes a fairly comprehensive testing suite and encourages programs to be written test-first.
For the source:
Bus Scheme is currently missing pieces of functionality:
Failing tests for some of these are already included (commented out, mostly) in the relevant test files.
Bus Scheme should run on (at least) Ruby 1.8, Ruby 1.9, and Rubinius.
I haven‘t actually used a real Scheme yet. Everything I know about it I‘ve gathered from reading The Little Schemer, watching the Structure and Interpretation of Computer Programs videos, and reading lots about Common Lisp and Emacs Lisp. If there are huge gaping flaws in the implementation, this is likely to be why.