Hacker News new | ask | show | jobs
by antonvs 20 days ago
Ok, tell me how you're an "avid digital archaeologist" and you're not aware of what I'm about to tell you.

The original Lisp as designed by John McCarthy was interpreted. That became Lisp 1.5, which ran on several mainframes of the time.

Programs were represented directly as S-expressions and evaluated recursively. This is one of the defining features of Lisp - the metacircular evaluator! Almost any Lisp text which covers the implementation of the language will describe this. It's emblematic of what Lisp is!

Interlisp was interpreted up until its final versions, which added some JIT capabilities.

The PC versions of Lisp, like muLisp and XLisp, were interpreted. muLisp introduced compilation in later versions.

If you count Scheme as a Lisp, there are probably more Scheme interpreters than there are compilers.

The reason that several Lisp implementations added compilation in later versions is because the hardware limitations of the time meant interpreters had a substantial handicap against compilers. But compilation was never a fundamental feature of Lisp.

1 comments

Lisp 1.5 manual, appendix D, compiler

https://softwarepreservation.computerhistory.org/LISP/book/L...

"When the compiler is called upon to compile a function, it looks for an EXPR or FEXPR on the property list of the function name. The compiler then translates this S-expression into an S-expression that represents a subroutine in the LISP Assembly Language (LAP). LAP then proceeds to assemble this program into binary program space. Thus an EXPR, or an FEXPR, has been changed to a SUBR or an FSUBR, respectively. Experience has shown that compiled programs run anywhere from 10 to 100 times as fast as interpreted programs, the time depending upon the nature of the program. Compiled programs are also more economical with memory than their corresponding S-expressions, taking only from 50 per cent to 80 per cent a s much space.' The major part of the compiler is a translator or function from the S-expression function notation into the assembly language, LAP. The only reasons why the compiler is regarded as a pseudo-function are that it calls LAP, and it removes EXPRts and FEXPR1s when it has finished compiling."

Enough said.