質問

1)CCLで画像を作成する適切な方法は何ですか?または次の間の正確な違いは何ですか:

(compile-file "foo.lisp")(progn (load "foo.lisp") (save-application "foo"))?

2)複数の画像をロードする可能性はありますか(コマンドラインを好む)?

役に立ちましたか?

解決

一般的なLISPシステムのファイルコンパイラは、ある種のマシン言語(ターゲットプロセッサに応じて)または仮想マシン(CLISPなど)で元のソースの表現を作成します。このコンパイルされたファイルは、ロード関数を備えた実行中のLISPシステムにロードし、ソース(関数、クラス、変数など)の定義を作成し、ファイル内の他のコードを実行できます。

ソースファイルを直接読み込むことができます(関数負荷も使用します)。 LISPがフォームをロードするためにコンパイラを使用している場合、ファイルコンパイラの利点は次のとおりです。

  • コンパイルされたコードの読み込みは、わずかに高速になるはずです
  • コンパイル時にいくつかのエラーチェック
  • 実行時に、より高速なコードを使用したより積極的なコンパイル
  • コードは小さくなる可能性があります(依存)

画像を保存することは独立しています。画像は、実行中のリスプのメモリダンプです。しかし、一般に、すべての状態をLISPシステムに応じて投棄できるわけではありません。ファイル接続、ネットワーク接続、開いたウィンドウなど、画像に捨てられないものの候補者...したがって、これらのものは、画像の開始時に再開する必要がある場合があります。

LISPアプリケーションを開始する場合は、いくつかのオプションがあります。

  • 起動時にすべてのソースコードをロードします
  • 起動時にすべてのコンパイルされたコードをロードします
  • すべてのコードを含む画像をロードします

後者はおそらく最速です。多くの目的で、特に開始がたまにしか発生しない場合、起動時にコンパイルされたコードをロードすることも十分に速くなります。

もう一度あなたの質問を見てみましょう。

(compile-file "foo.lisp")

上記は、単一のファイルをコンパイルされたファイル(FASLファイル「Fast Load」)にコンパイルするだけです。コンパイルの効果は、LISPシステムにいくつかの情報が記録されているが、ファイルの定義は利用できないこともあります。コンパイルされたファイルをロードする必要があります。

(progn (load "foo.lisp") (save-application "foo"))

上記の上にファイルがロードされます。インクリメンタルコンパイラを備えたLISPは、そのファイル内の一部またはすべてのステートメントをコンパイルする場合があることに注意してください(CCLとSBCLがそれを行っています)。保存アプリケーションはCCL固有の関数であり、完全なLISP状態(マイナスファイル接続など)をダンプし、その後開始できるアプリケーションを作成します。

他のアプリケーションと同様に開始するLISPアプリケーションを作成する場合は、保存適用が進む方法です。

複数の画像をロードできる場合は、システムに依存します。 CCLではできません。 LISPマシンでは、ベース画像をロードしてから、その上に複数の増分画像をロードできます。

他のヒント

compile-file それが言っていることをします:ソースファイルをネイティブコードにコンパイルし、結果を別のファイルに保存します。コンパイルされたファイル compile-file でロードできます load 関数。コンパイルは単なる最適化であるため、効果はソースファイルを直接ロードすることに非常に似ています。

対照的に、コア画像は保存します 完全な状態 LISPヒープ(すべてのロードされたコードとデータを含む)を含むLISP環境と実行の状態があるため、複数のコア画像を単一のLISPインスタンスにロードしようとすることは意味がありません。マニュアルで説明されているように、できます コア画像を保存します 使用して (ccl:save-application "image_name") どこ image_name 作成する画像ファイルの名前です。コア画像は、新しいClozure CLインスタンスを起動し、画像ファイルにを提供することによってのみロードできます。 -I コマンドラインオプション。

一般的に、複数のソースファイルで構成されるソフトウェアを作成している場合、通常、手動で物をコンパイルしてロードしたくありません。代わりに、考慮してください システム定義の作成 ソフトウェアをASDFでファイルしてロードします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top