私が知る限り、Lisp 構文は AST を表していますが、人間が簡単に読み取ったり変更したりできる高レベルの形式であると同時に、マシンがソース コードを簡単に処理できるようにもなっています。
このため、Lisp ではコードはデータであり、データはコードであると言われています。これは、コード (s-epxession) が AST にすぎないためです。OS全体を再コンパイルして新しいものを統合することなく、より多くのAST(これは私たちのデータであり、単なるLispコードです)を他のAST(Lispコード)にプラグインするか、独立して機能を拡張し、オンザフライで操作できます(ランタイム)他の言語では、コードにコンパイルされる前に、人間の言語のソース コードを有効な AST に変換するために、から再コンパイルする必要があります。
これが、Lisp 構文がそのように設計される (人間と機械の両方を満足させるために、AST を表しますが、人間が読める形式である) 理由でしょうか? より強力な (オンザフライ - ランタイム) だけでなく、より単純な (再コンパイルなし、より高速な) マンマシン間の通信を可能にするには?
Lisp マシンには、すべてのデータを保持する単一のアドレス空間しかないと聞きました。Linux のようなオペレーティング システムでは、プログラマーは仮想アドレス空間しか持たず、それを実際の物理アドレス空間のふりをして、好きなことを何でもできます。Linux のデータとコードは領域が分離されています。事実上、データはデータであり、データはコードであるからです。C (または C に似た言語) で書かれた通常の OS では、システム全体に対して単一のアドレス空間だけを操作すると非常に面倒になり、データとコードを混在させると非常に面倒になります。
Lisp マシンでは、コードはデータであり、データはコードであるため、(仮想層なしで) 単一のアドレス空間しか持たないのはこれが理由ですか? GC がありポインタがないので、物理メモリを壊さずに安全に操作できるでしょうか?
編集: Lispの利点の1つは単一のアドレス空間であると言われているので、私はこれを尋ねます:
安全な言語とは、タスクを個別のメモリ空間に分離する必要のない信頼できる環境を意味します。
Unix の「明確に分離されたプロセス」モデルの特徴は、C や C++ で記述されたコードの場合のように、安全でなくなるほど信頼できない可能性があるソフトウェアを扱う場合に強力なメリットがあります。システム。" MS-DOS とその継承者は、その意味で非常に信頼性が低く、ほとんどのプログラムのバグがシステム全体をダウンさせる可能性があります。「死のブルースクリーン」など。
システム全体が Lisp で構築およびコーディングされている場合、システムは Lisp 環境と同じくらい信頼できます。通常、これは非常に安全です。標準に準拠したレイヤーに到達すると、それらは非常に信頼性が高く、システムの自己破壊を可能にする直接ポインター アクセスを提供しないためです。
揮発性記憶装置 (RAM など) は、不揮発性記憶装置の読み取り/書き込みキャッシュとしてのみ機能します。オペレーティング システムを除くすべてのソフトウェアの観点から、マシンは、不揮発性と見なすことができる単一のアドレス空間を提示する必要があります。電源の中断から状態を完全に回復するのに電球よりも時間がかかるこの法則に従うコンピューター システムはありません。
前述のように、単一のアドレス空間は、実行中のすべてのプロセスを同じメモリ空間に保持します。単一アドレス空間の方が優れていると人々が主張する理由が気になります。これを Lisp の AST に似た構文に関連付けて、それが単一空間モデルにどのように適合するかを説明しようとしました。