New URL: http://www.iki.fi/~kartturi/tekstit/svlisp1.htm

St. Vitus Lisp

St. Vitus' Lisp is my experimental Lisp interpreter for MS-DOS. I have tried to combine in it many good features of various dialects of Lisp and other programming languages (like C), but still keep it quite simple, fast and compact. Currently it contains over 200 internal functions coded in C or assembly language.

The basic data types available for the programmer are symbols, strings, lists, integers, and pointers to files and internal functions. Programmer has also a limited ability to define his/her own types in the 16-bit range. There is a flexible read-macro system and other mechanisms for customizing the symbolic I/O-system to get the desired effects. I have used it especially for the various text analysis and compiling experiments. A good example of the latter is GLAD, Generic Lisp-based Assembler-Disassembler, from which there is an implementation to assemble and disassemble PDP-11 machine code.

The size of the sources of this interpreter are approximately 10,000 lines of C plus about 1500 lines of Assembly code, adequately commented.

History and Future Plans

Actually, this small Lisp interpreter is an offshoot of my original Kanji Dictionary software for MS-DOS, as after I had coded the functions to read and print Lisp-like symbolic expressions (i.e. numbers, strings, symbols and lists), I realized that I only needed to add a small evaluator to get the Lisp interpreter proper.

I designed and coded this software around the turn of the 90's, when I still had just two 360 KB floppy drives and 256 Kbytes of RAM in my basic 4.77 MHz PC, so I really paid special attention to the efficiency, both in terms of space and time.

Sometimes I still dream of porting this to the generic Unix environment, maybe also at the same time implementing the TCP/IP socket interface and I/O safe multithreading as to facilitate easy development of special Web-applications a la WWWGATE. (Read it if you have to, although it is full of truisms.)

Of course I should also implement many missing, essential things like garbage collection, floating points numbers, 32-bit integers, bignums, macros and let-forms (How about ODBC compliant or higher-level database access functions?), and probably I should tweak the overall system more towards some "standard", whether it is a reduced version of the Common Lisp, the old style Franz Lisp, or even Scheme.