Синтаксисът на Lisp представлява AST, доколкото знам, но във формат на високо ниво, за да позволи на човека лесно да чете и модифицира, като в същото време улеснява машината да обработва и изходния код.
Поради тази причина в Lisp се казва, че кодът е данни и данните са код, тъй като кодът (s-epxression) е просто AST по същество. Можем да включим повече AST (които са нашите данни, които са просто код на lisp) в други AST (код на lisp) или независимо, за да разширим функционалността му и да го манипулираме в движение (по време на изпълнение), без да се налага да прекомпилираме цялата операционна система, за да интегрираме нови код. На други езици трябва да прекомпилираме от, за да превърнем изходния код на човешки език във валиден AST, преди да бъде компилиран в код.
Това ли е причината синтаксисът на Lisp да бъде проектиран такъв, какъвто е (представлява AST, но е четим от човека, за да задоволи както човека, така и машината) на първо място? За да активирате по-силна (в движение - по време на изпълнение), както и по-опростена (без повторно компилиране, по-бърза) комуникация между човек-машина?
Чух, че машината Lisp има само едно адресно пространство, което съдържа всички данни. В операционна система като Linux, програмистите имат само виртуално адресно пространство и се преструват, че е истинското физическо адресно пространство и могат да правят каквото си искат. Данните и кодът в Linux са разделени региони, защото на практика данните са данни и данните са код. В нормална операционна система, написана на C (или език, подобен на C), би било много объркващо, ако работим само с едно адресно пространство за цялата система и смесването на данни с код би било много объркано.
В Lisp Machine, тъй като кодът е данни и данните са код, това ли е причината да има само едно адресно пространство (без виртуалния слой)? Тъй като имаме GC и нямаме указател, трябва ли да е безопасно да работим с физическа памет, без да я разбиваме (тъй като наличието на само 1 единично пространство е много по-малко сложно)?
РЕДАКТИРАНЕ: Питам това, защото се казва, че едно от предимствата на Lisp е единично адресно пространство:
Безопасен език означава надеждна среда без необходимост от отделяне на задачи в техните собствени отделни пространства на паметта.
Моделът на „ясно отделен процес“, характерен за Unix, има мощни предимства при работа със софтуер, който може да е ненадежден до степен да е опасен, какъвто е случаят с код, написан на C или C++, където невалиден достъп до указател може да „свали система." MS-DOS и неговите наследници са много ненадеждни в този смисъл, където почти всеки програмен бъг може да свали цялата система; "Син екран на смъртта" и други подобни.
Ако цялата система е конструирана и кодирана на Lisp, системата е толкова надеждна, колкото и средата на Lisp. Обикновено това е доста безопасно, тъй като след като стигнете до съвместимите със стандартите слоеве, те са доста надеждни и не предлагат директен достъп до указател, който би позволил на системата да се самоунищожи.
Третият закон за разумни лични компютри
Енергонезависимите устройства за съхранение (т.е. RAM) трябва да служат изключително като кеш за четене/запис за енергонезависими устройства за съхранение. От гледна точка на целия софтуер, с изключение на операционната система, машината трябва да представя едно адресно пространство, което може да се счита за енергонезависимо. Никоя компютърна система не се подчинява на този закон, който отнема повече време, за да възстанови напълно състоянието си след прекъсване на източника на захранване, отколкото на електрическа лампа.
Единното адресно пространство, както е посочено, държи всички работещи процеси в едно и също пространство на паметта. Просто съм любопитен защо хората настояват, че едно адресно пространство е по-добро. Свързвам го с подобен на AST синтаксис на Lisp, за да се опитам да обясня как се вписва в единичния пространствен модел.