title: The purpose of Lisp syntax to model AST
body: <p>Lisp syntax represents AST as far as I know, but in high level format to allow human to easily read and modify, at the same time make it easy for the machine to process the source code as well. </p>
  
  <p>For this reason, in Lisp, it is said that code is data and data is code, since code (s-epxression) is just AST, in essence. We can plug in more ASTs (which is our data, which is just lisp code) into other ASTs (lisp code) or independently to extend its functionality and manipulate it on the fly (runtime) without having to recompile the whole OS to integrate new code.In other languages, we have to recompile from to turn the human-language source code into valid AST before it is compiled into code. </p>
  
  <p><em>Is this the reason for Lisp syntax to be designed like it is (represent an AST but is human readable, to satisfy both human and the machine) in the first place? To enable stronger (on the fly - runtime) as well as simpler (no recompile, faster) communication between man-machine?</em> </p>
  
  <p>I heard that the Lisp machine only has a single address space which holds all data. In operating system like Linux, the programmers only have virtual address space and pretend it to be the real physical address space and can do whatever they want. Data and code in Linux are separated regions, because effectively, data is data and data is code. In normal OS written in C (or C like language), it would be very messy if we only operate a single address space for the whole system and mixing data with code would be very messy.</p>
  
  <p><em>In Lisp Machine, since code is data and data is code, is this the reason for this to have only a single address space (without the virtual layer)? Since we have GC and no pointer, should it be safe to operate on physical memory without breaking it (since having only 1 single space is a lot less complicated)?</em> </p>
  
  <p><strong>EDIT:</strong> I ask this because it is said that <a href="http://linuxfinances.info/info/lisposes.html" rel="noreferrer">one of the advantage</a> of Lisp is single address space:</p>
  
  <blockquote>
    <p>A safe language means a reliable environment without the need to
    separate tasks out into their own separate memory spaces.</p>
    
    <p>The "clearly separated process" model characteristic of Unix has
    potent merits when dealing with software that might be unreliable to
    the point of being unsafe, as is the case with code written in C or
    C++ , where an invalid pointer access can "take down the system."
    MS-DOS and its heirs are very unreliable in that sense, where just
    about any program bug can take the whole system down; "Blue Screen of
    Death" and the likes.</p>
    
    <p>If the whole system is constructed and coded in Lisp, the system is as
    reliable as the Lisp environment. Typically this is quite safe, as
    once you get to the standards-compliant layers, they are quite
    reliable, and don't offer direct pointer access that would allow the
    system to self-destruct.</p>
  </blockquote>
  
  <p><a href="http://www.loper-os.org/?p=231" rel="noreferrer">Third Law of Sane Personal Computing</a></p>
  
  <blockquote>
    <p>Volatile storage devices (i.e. RAM) shall serve exclusively as
    read/write cache for non-volatile storage devices.  From the
    perspective of all software except for the operating system, the
    machine must present a single address space which can be considered
    non-volatile.  No computer system obeys this law which takes longer to
    fully recover its state from a disruption of its power source than an
    electric lamp would.</p>
  </blockquote>
  
  <p>Single address space, as it is stated, holds all the running processes in the same memory space. I am just curious why people insist that single address space is better. I relate it to the AST like syntax of Lisp, to try to explain how it fits the single space model. </p>