デプロイされたソースコードにquicklisp呼び出しをまったく含めたくない場合は、quickprojectシステム定義ファイルを残りのソースから分離します。
defpackage
ソースの上部で、呼び出しの直前に、(require ...)
パッケージの依存関係に必要なを追加します。これは、先に進む前にそれらのlispパッケージが(何らかの方法で)ロードされることを保証しますが、それらのパッケージがロードされる「方法」を指定しません。ql:quickload :my-package
それらは、 (quickprojectを使用して)呼び出しを実行することによってロードできます。これにより、最初に依存関係がロードされ、次にソースをロードするときにrequire呼び出しが実行されます。または、ユーザーが(を呼び出さずに)ソースを直接ロードql:quickload
し、それらの依存関係がにある場合は、require呼び出し中に依存関係がロードされる可能性があります*module-search-path*
。あなたが言ったように、このテクニックはエンドユーザーがあなたのソースをロードしたいどんなビルドツールでも使うことを可能にするでしょう。
これを数分間試した後、quicklispはrequire関数呼び出しにラッチしているようです。そのため、quicklispがインストールされている場合、(require :bordeaux-threads)
たとえばが呼び出された場合、lispはquicklispを使用してその依存関係をダウンロードしてインストールします。これは非常に優れた機能(IMO)です。これは、Common Lisp標準require
関数がインターフェース層として機能し、依存関係を満たすために使用される特定のビルドツールを抽象化できるためです。Quicklispはrequireにラッチでき、asdfはそれにラッチします(IIRC)など。
したがって、質問に答えるために、quicklisp呼び出しは、デプロイされたソースコードのどこにも行かないようにrequires
する必要があり、パッケージ定義ファイルが評価される前に依存関係がロードされるようにするために使用する必要があります。パッケージ定義ファイルをロードする前に誰かがquicklispをインストールしている場合は、quicklispを使用して依存関係をダウンロードしてインストールすることで、これらの要件を満たすことができます。誰かがasdfをインストールしている場合、それらの依存関係はそのビルドツールで満たされます。そして、誰かがすでに依存関係をインストールしている場合(他の手法を使用して)、requiresは単に渡されます。