23

(David Jamesが質問と回答の両方を作成しました。Stackoverflow標準に準拠するように編集します。)

SBCLを使用すると、Lispコードをマシンコードにコンパイルできます。

Java、.net、C ++、さらにはCと同様に、ランタイムが必要になります。したがって、CommonLispコードをコンパイルする方法は2つあります。

1つは、SBCLのドキュメントで説明されている巨大なバイナリを作成することです。ターゲットマシンにSBCLは必要ありません。

もう1つの方法は、より柔軟な方法です。これは、fasl(FASt Load)形式でマシンコードを作成することです。ターゲットマシンにはSBCLランタイムが必要です。

Unixライクなオペレーティングシステムで2番目の方法はどのように機能しますか?

4

2 に答える 2

27

(DavidJamesによる回答:)

システムで2つのコマンドを作成します。1つはLispコードをバッチコンパイルするためのもので、もう1つはLispコードを簡単に実行するためのものです。

お気に入りのエディタを使用して、というファイルを開きますsbcl.compile。内容は次のとおりです。

    #!/bin/bash
    sbcl --noinform --eval "(compile-file \"$1\")" --eval "(quit)" > /dev/null

Lispファイルをコンパイルするには以下を使用します。

    # sbcl.compile hello.lisp

これにより、ファイルが作成されhello.faslます。

これらのファイルを簡単に実行できるように、新しいコマンドを作成します。お気に入りのエディタを使用して、というファイルを開きますsbcl.run。内容は次のとおりです。

    #!/bin/bash
    sbcl --noinform --load "$1" --quit --end-toplevel-options "$@"

これで、呼び出しsbcl.run hello.faslてネイティブコードを実行できます。

    # sbcl.run hello.fasl

詳細はSBCLマニュアルに記載されています:SBCLの開始

于 2012-01-29T19:22:31.410 に答える
4

もう 1 つのオプションは、一般的に使用するすべてのパッケージ/関数/フレームワークをランタイムに追加してから、この状態を新しいコア ファイルとして保存し、これをデフォルトのコアとして使用して開発を続けることです。特にlispにはVMスタイルのコアファイルに状態を保存する機能があるため、faslsは価値があるよりも多くの問題を抱えていることがよくあります。開発が進むにつれて、コアを段階的に更新するだけです。そして、GNU Make を使用してコアを再構築/更新します。

于 2012-01-30T03:57:59.553 に答える