一般に、これらのシステム ツールはそれを許可する必要があります。必要なのは、システムの説明と FASL ファイルだけです。その後、システム ツールはロードに FASL ファイルを使用する必要があります。一部のソースファイルに強く依存していないことを確認するだけで済みます。
このようにして、ソフトウェアは Lisp の世界で何十年も (> 30 年) 提供してきました。そのアプローチには何の問題もありません。特定のツール (ここでは ASDF ですが、他にもあります) に問題がある場合は、作成者に文句を言う必要があります。
実用的な問題がある場合は、ASDF メーリング リストで議論するか、ここに質問を投稿してください。実用的な問題はありますか?
これは直接の助けにはなりませんが、システム ツールが通常どのように機能するかについてのヒントが得られるかもしれません。
LispWorks 6 と独自の DEFSYSTEM を使用した例
ディレクトリ FOO に 3 つのファイルがあります。
RJMBA:foo joswig$ ls -l
-rw-r--r-- 1 joswig admin 13 22 Jul 20:42 a.lisp
-rw-r--r-- 1 joswig admin 14 22 Jul 20:42 b.lisp
-rw-r--r-- 1 joswig admin 331 22 Jul 20:41 system.lisp
system.lisp には、次のシステム記述が含まれています。
(defvar *foo-directory*
(make-pathname :name nil
:type nil
:directory (pathname-directory *load-pathname*)
:defaults *load-pathname*))
(defsystem foo (:default-pathname *foo-directory*)
:members ("a" "b"))
上記は*foo-directory*
、ロードされたファイルのパス名に基づいてパス名を設定します。したがって、実際の絶対パス名を設定できますが、手動で指定する必要はありません。別の方法として、相対パス名を使用することもできます。これは、何を使用するかによって異なります。これを選んだのは、絶対パス名を自動的に設定する方法を示すためです。
次に、このファイルを LispWorks にロードし、システムをコンパイルします。
CL-USER 12 > (compile-system 'foo)
;;; Compiling file /Lisp/foo/a.lisp ...
;;; Safety = 3, Speed = 1, Space = 1, Float = 1, Interruptible = 1
;;; Compilation speed = 1, Debug = 2, Fixnum safety = 3
;;; Source level debugging is on
;;; Source file recording is on
;;; Cross referencing is on
; (TOP-LEVEL-FORM 0)
; (TOP-LEVEL-FORM 1)
;; Processing Cross Reference Information
;;; Compiling file /Lisp/foo/b.lisp ...
;;; Safety = 3, Speed = 1, Space = 1, Float = 1, Interruptible = 1
;;; Compilation speed = 1, Debug = 2, Fixnum safety = 3
;;; Source level debugging is on
;;; Source file recording is on
;;; Cross referencing is on
; (TOP-LEVEL-FORM 0)
; (TOP-LEVEL-FORM 1)
;; Processing Cross Reference Information
(FOO)
2 つの fasl ファイルを作成しました。
次に、system.lisp ファイルと fasl ファイルを新しいディレクトリにコピーします。
RJMBA:Lisp joswig$ mkdir bar
RJMBA:Lisp joswig$ cp foo/system.lisp bar/system.lisp
RJMBA:Lisp joswig$ cp foo/a.64xfasl bar/a.64xfasl
RJMBA:Lisp joswig$ cp foo/b.64xfasl bar/b.64xfasl
次に、ディレクトリで新しい LispWorks を開始しb
、system.lisp ファイルをロードしてから、システムをロードします。
RJMBA:Lisp joswig$ cd bar
RJMBA:bar joswig$ lispworks
LispWorks(R): The Common Lisp Programming Environment
Copyright (C) 1987-2009 LispWorks Ltd. All rights reserved.
Version 6.0.0
User joswig on RJMBA.local
...
CL-USER 1 > (load "system.lisp")
; Loading text file /Lisp/bar/system.lisp
;; Creating system "FOO"
#P"/Lisp/bar/system.lisp"
CL-USER 2 > (load-system 'foo)
; Loading fasl file /Lisp/bar/a.64xfasl
"a" ; whatever the file does
; Loading fasl file /Lisp/bar/b.64xfasl
"b" ; whatever the file does
(FOO)
完了し、動作します。
さらに、これは相対ディレクトリまたはいわゆる論理パス名で行うことができます。論理パス名には、あるパス名から物理パス名へのマッピングがあるため、アーキテクチャ、OS、およびディレクトリ構造から独立した、システムに依存しないパス名を使用できます。これにより、特定の展開シナリオからの独立性がさらに高まります。