That leads me to a couple books I've been reading lately. The first is Lisp in Small Pieces, by Christian Queinnec. I'm only a couple chapters in (stuck on continuations right now), but it's already been pretty profound. So far, the aspect of the book that's been the most useful is that it has gone through several core design choices Lisp implementors have to make ( Lisp-1 vs. Lisp-2, Lexical Scope vs. Dynamic Scope, types of continuations to support), and goes into depth regarding the implications and history of the choices involved. I think I'm finally starting to understand more of the significance of funcall and function in Common Lisp, not to mention throw/catch and block/return-from.
Book two is The
First Computers--History and Architectures, edited by
Raul Rojas. This book is a collection
of papers discussing the architecture of significant early computers from the late
30's and 40's. The thing that's so unique about the book is that it focuses on
the architectural issues surrounding these machines: the kinds of hardware they
were built with, how they processed information, and how they were programmed. Just
as an example, it has a detailed description of many of ENIAC's functional units,
even going into descriptions of how problems were set up on the machine. Another
highlight of the book for me (so far) has been a description of Konrad Zuse's
relay-based Z3, down to the level of a system architectural diagram, schematics of
a few key circuits, and coverage of its microprogramming (!).
reddit this! Digg Me!