The second article
you linked to (which by the way is the same as your third link) starts out by
contradicting you when it provides links to the Wikipedia article on LISP
programming language and to the article on operating systems. Those articles
define each in such a way that makes it clear that LISP is a programming
language and not an OS. It then goes on to support your view with the single
sentence, unsupported by a citation, that "Lisp was used as an operating system
on some early machines. e.g. on the Lisp Machine and then at Symbolics with the
Genera (operating system)". Yes that agrees with you. Yes I think that is an
example of erroneous information in a Wikipedia article. It doesn't even make
sense for the article to have an entry for Lisp which talks about Genera, and
then further down in the same list a separate entry for Genera.
And more
evidence that the Lisp Machine did not run LISP as its native machine
instruction set. From an old Lisp Machine manual:
Nobody looks at
machine language code by trying to interpret octal numbers by hand. Instead,
there is a program called the Disassembler which converts the numeric
representation of the instruction set into a more readable textual
representation. It is called the Disassembler because it does the opposite of
what an Assembler would do; however, there isn't actually any assembler that
accepts this input format, since there is never any need to manually write
assembly language for the Lisp Machine.
The simplest way to invoke the
Disassembler is with the Lisp function disassemble. Here is a simple example.
Suppose we type:
(defun foo (x)
(assq 'key (get x
'propname)))
(compile 'foo)
(disassemble 'foo)
This defines
the function foo, compiles it, and invokes the Disassembler to print out the
textual representation of the result of the compilation.
Here is what it
looks like:
22 MOVE D-PDL FEF|6 ;'KEY
23 MOVE
D-PDL ARG|0 ;X
24 MOVE D-PDL FEF|7
;'PROPNAME
25 (MISC) GET D-PDL
26 (MISC) ASSQ D-RETURN
The
Disassembler is also used by the Error Handler and the Inspector.
When you
see stuff like the above while using one of these programs, it is disassembled
code, in the same format as the disassemble function uses. Inspecting a compiled
code object shows the disassembled code.
Now, what does this mean? Before
we get started, there is just a little bit of jargon to learn.
The acronym
PDL stands for Push Down List, and means the same thing as Stack: a last-in
first-out memory. The terms PDL and stack will be used interchangeably. The
Lisp Machine's architecture is rather typical of "stack machines"; there is a
stack that most instructions deal with, and it is used to hold values being
computed, arguments, and local variables, as well as flow-of-control
information. An important use of the stack is to pass arguments to
instructions, though not all instructions take their arguments from the
stack.
The acronym `FEF' stands for Function Entry Frame. A FEF is a
compiled code object produced by the compiler.
The Lisp Machine
had a stack oriented machine architecture, had its own machine language, and
needed a operating system to make it useful. The OS, which eventually was
Genera, just happened to be written in LISP, but LISP was not Genera.