9

LispセマンティクスとCの低レベル操作を備えたLispの方言はありますか? 任意のメモリ アドレス (仮想メモリまたは物理メモリ) を取得し、それを使用して何かを実行するようなもの。ハードウェア デバイスへのポインタ...

例えば:

(defvar a '(1 2 3 4)) ;; I have a list
(defvar b (cdr a)) ;; b is the cdr of a. But I want b to
                   ;;  actually refer to the tail of a
(setf b '(4 5 6)) ;; b now has new value, but a remains unchanged

私が望むのは、Lisp を使用して低レベルの問題を表現することです。たとえば、ベア メタルで Lisp を実行しているときに、個々のバイトとビットを制御するにはどうすればよいでしょうか? C では、ポインターを取得し、ポインター演算を実行して、メモリ空間 (仮想または物理) 内の任意の場所を指すことができます。ポインターは、ハードウェア設計者がデバイスおよび任意に定義したアドレスを指すこともできます。

なぜこれが必要なのですか?ええと、低レベルのプログラミングで Lisp を使用する方法を学びたいです。長期的には、学習用のシンプルな OS を書きたいと思っていますが、Lisp で。最初の理解のためにCでも書きますが、Cでしか書けない場合、どうすればOSの実装方法を理解していると確信できますか? OS を実装する方法を本当に理解できるのは、C 以外の言語でそれを書くことができるかどうかを確認するためだけだと思います。

私は、OS 用に C コア、その他すべて用に Lisp のようなものを書きたくありません。

4

4 に答える 4

6

PreScheme を参照してください。

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.3.4031

Pre-Scheme は、Scheme の望ましい機能の多くを保持しながら、C の効率性と低レベルのマシン アクセスをプログラマに提供する、Scheme の静的に型付けされた方言です。PreScheme コンパイラは、型推論、部分評価、Scheme および Lisp コンパイラ テクノロジを使用して、実行時の大きなオーバーヘッドなしで、クロージャなどの Scheme の問題のある機能を C コードにコンパイルします。Pre-Scheme プログラムでのそのような機能の使用は、効率的なコードにコンパイルできる場合に限定されます。型の再構築は、オーバーロードされたユーザー定義関数を可能にする変更された Hindley/Milner アルゴリズムを使用して行われます。Pre-Scheme プログラムのすべての最上位フォームはコンパイル時に評価されます。これにより、コンパイラによるプログラムの部分的な評価をユーザーがさらに制御できるようになります。

私は、Scheme48 はまだ実装に PreScheme を使用していると思います: http://s48.org/

于 2013-08-16T16:24:12.887 に答える
4

あなたが興味を持っているかもしれない古いプロジェクトがありました:

序章

Movitz システムは、"オン ザ メタル" のユビキタスな x86 PC アーキテクチャを対象とする ANSI Common Lisp の実装を目指しています。つまり、オペレーティング システムやその他の形式のソフトウェア環境なしで実行されます。Movitz は、オペレーティング システム カーネル、組み込み、および単一目的のアプリケーション用の開発プラットフォームです。Movitz を使用して構築されたまったく異なるオペレーティング システムがいくつか存在する可能性があります。

Movitz: Common Lisp x86 開発プラットフォーム

于 2013-08-16T06:23:08.823 に答える
3

カーネルやユーザーランドなしで LISP を実行し、それを何にもリンクされていない (静的) blob にクロスコンパイルするために必要な、低レベルのものと API を使用して、既存の Lisp 言語を作成または変更します。SBCL はエイリアン CL 実装でブートストラップでき、それ自体をクロス コンパイルすることもできるため、CL が必要な場合は、オペレーティング システムの設計だけでなく、SBCL に関するコードと記事を読み始めることもできます。

そこからどのように進むかは、あなたが何になりたいかによって異なります。実行中の LISP は、理論的にはすべてのリソースを持つことができ、そこにすべてのアプリケーションとサポートを作成できます。OSの最低レベルのガベージコレクターさえあります:)

最終的には、一般的なアプリケーションとデバイス ドライバーを簡単に移植できるようにする方法が必要になります。そうすれば、他人の努力で航海できます。独自のブラウザーまたは nvidia ドライバーをゼロから作成する必要がある場合を想像してみてください..

于 2013-08-15T22:08:47.293 に答える