システム
大規模なシステムを構築するには、システム管理ツールを使用します。「無料」のものはASDFです。
ライブラリまたはアプリケーションの一部をリストするシステム宣言が必要になります。通常、それは独自のファイルに入ります。次に、システムをロードするか、システムをコンパイルします。それを行う方法のチュートリアルがあるはずです。
単純な Lisp システムには、次のファイルが含まれる場合があります。
- システム、そのパーツ、その他必要なもの (他のシステム) を記述したシステム ファイル
- 使用される名前空間を記述するパッケージ ファイル
- 基本的なツール ファイル (マクロで使用される関数の例)
- マクロを一覧表示するマクロ ファイル (残りのソフトウェアの前にコンパイル/ロードするために使用)
- 機能を持つ 1 つ以上の他のファイル。
Quicklisp はそれとは独立しています。ソフトウェア配布ツールです。
ファイルをコンパイルしてロードするためのクイックハック
ただし、システムツールを使用せずに、昔ながらの方法でファイルをコンパイルしてロードすることもできます。
(defparameter *files*
'("/yourdir/foo.lisp" "/yourdir/bar.lisp"))
(defun compile-foobar ()
(mapc #'compile-file *files*))
(defun load-foobar ()
(mapc #'load *files*))
(defun compile-and-load ()
(mapc (lambda (file)
(load (compile-file file)))
*files*))
実際にはそれ以上のこともあるかもしれませんが、多くの場合それで十分です。独自の構築ツールを作成するのは簡単なはずです。典型的なシステムツールは、構造化された方法でより複雑なソフトウェアを構築するためのより多くの機能を提供します。これらのツールのアイデアの多くは、少なくとも 35 年前にさかのぼります。たとえば、Lisp Machine マニュアルを参照してください。ここでは、1984 年版で、 Maintaining Large Systemsの章があります。
ファイルの役割
単純な Common Lisp では、ファイルの役割とそのセマンティクスはそれほど複雑ではないことに注意してください。
ファイルは名前空間ではなく、クラス/サブクラスまたはオブジェクトに関連付けられておらず、モジュールでもありません。必要に応じて、Lisp 構造をファイルに混在させます。ファイルは任意の大きさにすることができます (たとえば、1 つの複雑なライブラリには、30000 行の単一のソース ファイルとして提供されるバージョンがあります)。標準的なセマンティクスでファイルが役割を果たす唯一の実際の場所は、ファイルをコンパイルするときです。ファイルのコンパイルにはどのような副作用がありますか? コンパイラはどのような最適化を行うことができますか?
それ以外では、開発環境はファイルのグループのロードやコンパイルなどのサービスを提供し、コンパイル エラーの概要を提供し、定義のソースの場所を記録し、定義などを見つけることができると想定されています。ASDFのようなツールがシステム部分を処理します。