Why Scheme?

An undergrad asked me `Why Scheme? Why not C?'. It seemed an odd question, but to the uninitiated, a natural one.

Lisp Machine Lore

Part of the underlying motivation for FunOS is to revive the legacy of the Lisp Machine. These were $100k single-user high-end workstations from the mid 1980s. They had many of the features this project would like to have. Rainer Joswig (before his site went down) had a nice description of Lisp Machines.


Reflection is the ability for the user to modify the system of the underlying machine without leaving the system. For example, with Linux, you can edit the source code of the kernel networking code, recompile and reboot. With a reflective system, you can modify the code (even kernel code), compile it, and replace the running system code without leaving your editor.

Scheme, and Lisp languages in general, have a very fluid transition between high level and low level. They have a dynamic quality that allows the creation or redefinition of functions.

The Little Language Problem

Olin Shivers has a paper [Shivers1996] on the Little Languages Problem. The goal is to have one, universal language so that people aren't writing all of C, cpp, sh, sed, awk, perl, <your-favorite-config-file-format>, etc. You can also send Scheme as your network protocol (see `Mobile Code,' below).

A universal scripting framework, or Lambda: the ultimate ``little language.''
Concurrency and Parallelism, Programming, Networking, and Security, Lecture Notes in Computer Science #1179, pages 254-265, Editors Joxan Jaffar and Roland H. C. Yap, 1996, Springer.

Mobile Code

You can send Scheme code over the network to a receiver who can interpret it or even compile it first. The code can be examined and rejected if it will try to perform potentially harmful side effects.

For example, NeWS is a window system developed at Sun that used PostScript as its display language. It allowed a client to send, in a sense, a PostScript callback to the server so that when the user tickled that action, it could be handled without the network burden of talking to the client.

Potentially of spectacular interest is sending closures and continuations over the network. See Kali Scheme.