2011/02/18

Lispkit

I first heard of Lispkit in 1983 but I am not very sure about the year. It was a long time ago and I have nothing to show, neither papers nor 8- inch floppy disks.

Historical background... I studied mathematics at the university of Leiden. As a math major, I was required to have some minor subjects too. One was about computers. Course material included a book with the subtitle Syntax and Semantics of Programming Languages. It was about finite automata and context free (or not) left/right recursive abstract grammars.

In 1974 my understanding of computers was minimal. Personal computers did not exist. Computers lived of stacks of punch cards and printed listings on chained paper. I believed that the cost of just one minute of computer time could buy a Christmas diner for a large family.

In those days abstract grammars were so abstract that the professor had to tell you that they had to do with programming languages. And I probably missed his introduction.

In 1980, after graduation, I got a job as an instructor at Sperry Univac.

One of my fellow instructors, Ben, had this great idea to build a microcomputer. I liked the idea and spent a fortune on a NASCOM II microcomputer assembly kit. Getting a 4Mhz Z80A cpu, 48KB memory and a tape cassette recorder to work was not only a challenge but also fun. The kit enabled me to write programs in Basic, Pascal and Z80 assembly.

So one day Ben gave me a print-out of a manual (not this one). He said I might find it interesting.

I did.

The manual was (probably) Peter Henderson's Functional Programming - Application and Implementation paper about the SECD virtual machine.

It took me three nights to write a Pascal implementation of a compiler for the Lispkit SECD virtual machine. Later I rewrote it in Z80 assembly language as a SECDB compiler. Just 4 Kb of machine code! The extra B register made it possible to solve problems by backtracking. My NASCOM was just big enough to solve to solve the eight queens problem.

After all this I finally understood Syntax and Semantics of Programming Languages.