Lisp compilation principles and SBCL internals
Semion Prihodko <semion.ababo <at> gmail.com>
2010-08-18 12:50:42 GMT
Hi guys,
I'm a developer who likes to learn more about SBCL runtime internals.
Being on very early stages of new OS development I need to understand is
it worthy to build OS on top of lispy runtime. I see lisp-like language
as a main system language (like C language in Unix-like systems), so I
need to know if replacing ordinal stack / register virtual machine (I
prefer a managed environment) by a lisp runtime virtual machine will
make programs run more efficient?
I will describe my view. Let's imagine lisp runtime operating with
machine size numbers (arbitrary size numbers are on a layer above),
explicitly supporting arrays, different VOPs, etc. On the layer above
there is a main lispy language compiler. The question is the following:
will the lisp runtime playing the part of a virtual machine be worth to
base on (supposing that main language compiler will be able to pass
intermediate code to it more preserving original semantics for
optimization purposes compared to ordinal stack / register virtual
machine)?
My substantial lack of knowledge about modern lisp compilation forces me
to ask another, maybe stupid question. Is the lisp compilers at general
embed a minimal interpreter to compiled code? I mean, when I define a
function with some work flow (conditions, recursion, etc) is it
interpreted on the low level (of course, with some VOP blocks of machine
code inlined and some optimization transformations applied)? Under
interpretation I understand the process that flow in lisp processors
(chips), well described in the following white paper: “Design of
LISP-Based Processors or, SCHEME: A Dielectric LISP or, Finit Memories
Considered Harmful or, LAMBDA: Ultimate Opcode” by Guy Lewis Steele Jr.
and Gerald Jay Sussman.
Thanks in advance.
<div>
<p>Hi guys,</p>
<div><br></div>
<div><span class="Apple-style-span"><span class="Apple-style-span">I'm a developer who likes to learn more about SBCL runtime internals.</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">Being on very early stages of new OS development I need to understand is</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">it worthy to build OS on top of lispy runtime. I see lisp-like language</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">as a main system language (like C language in Unix-like systems), so I</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">need to know if replacing ordinal stack / register virtual machine (I</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">prefer a managed environment) by a lisp runtime virtual machine will</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">make programs run more efficient?</span><span class="Apple-style-span"><br></span><span class="Apple-style-span"><br></span><span class="Apple-style-span"><br></span><span class="Apple-style-span">I will describe my view. Let's imagine lisp runtime operating with</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">machine size numbers (arbitrary size numbers are on a layer above),</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">explicitly supporting arrays, different VOPs, etc. On the layer above</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">there is a main lispy language compiler. The question is the following:</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">will the lisp runtime playing the part of a virtual machine be worth to</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">base on (supposing that main language compiler will be able to pass</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">intermediate code to it more preserving original semantics for</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">optimization purposes compared to ordinal stack / register virtual</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">machine)?</span><span class="Apple-style-span"><br></span><span class="Apple-style-span"><br></span><span class="Apple-style-span"><br></span><span class="Apple-style-span">My substantial lack of knowledge about modern lisp compilation forces me</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">to ask another, maybe stupid question. Is the lisp compilers at general</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">embed a minimal interpreter to compiled code? I mean, when I define a</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">function with some work flow (conditions, recursion, etc) is it</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">interpreted on the low level (of course, with some VOP blocks of machine</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">code inlined and some optimization transformations applied)? Under</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">interpretation I understand the process that flow in lisp processors</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">(chips), well described in the following white paper: “Design of</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">LISP-Based Processors or, SCHEME: A Dielectric LISP or, Finit Memories</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">Considered Harmful or, LAMBDA: Ultimate Opcode” by Guy Lewis Steele Jr.</span><span class="Apple-style-span"><br></span><span class="Apple-style-span">and Gerald Jay Sussman.</span><span class="Apple-style-span"><br></span><span class="Apple-style-span"></span><span class="Apple-style-span"><br></span><span class="Apple-style-span">Thanks in advance.</span></span></div>
</div>