実際のアプリケーション開発のベスト プラクティスを見つけようとしています。サードパーティ ライブラリをスタンドアロン パッケージとして展開するように適切に構成する方法がわかりません。ASDF-INSTALL と ASDF は、ライブラリをホームまたはサイトにインストールすることを意図しているようで、開発プラットフォームの状態が変化します。サーバー側アプリケーションを開発していて、ボックス上の CL インストール全体に対してこれらの依存関係を管理したい場合は、これで問題ありません。
しかし、スタンドアロン アプリケーションを作成し、インストール スクリプトを介してデプロイし、独自の CL インスタンスで単独で実行したい場合はどうすればよいでしょうか? 他のアプリケーションの CL インスタンスまたはターゲット システム構成を変更することは避けたいと思います (つまり、他のアプリケーションが依存するライブラリの他のコピーを上書きします)。Java では、これらのライブラリを含むインクルード ディレクトリを作成し、CLASSPATH を設定するだけです。独自の CL ランタイムをインストールせず、代わりにシステム上にあるものを使用すると仮定して、CL で同じレベルの分離を取得するにはどうすればよいですか?
ランタイムは、ランタイムが実行する特定のアプリケーション (Ruby や Python) よりも寿命が長く、アプリケーションは同じライブラリのロード状態を共有するため、これはすべての動的にコンパイル/解釈される言語に共通の問題であると思います。 . 私はそのような言語の経験がないので、ベスト プラクティスはおそらく私と顔を合わせることです。
これが実装固有の場合は IDK ですが、Clozure CL を実行しています。
編集:
ラマレン:
マッドボールを調べてみます。ありがとうございました。
ライブラリのインストールは、私が望んでいるものとは逆です。インストールは、ホスト システムの状態を変更することを意味するからです。キーは最後の段落にあるに違いないと思います。central-registryを隔離されたディレクトリに設定する起動スクリプトをどのように作成しますか? ASDF-INSTALL を使用して、上記のディレクトリに内容をフェッチすることは可能ですか? また、CL 実装の基本イメージに ASDF が含まれていない場合 (Clozure にはデフォルトで ASDF がありますが、CLISP はどのようにそれを行うのでしょうか)、全体をブートストラップするにはどうすればよいでしょうか?
開発チームの観点からも考えています。新しい CL プロジェクト スタブを作成し、CVS または SVN への最初のコミットを行った後、他の開発者はどのようにそれをローカル環境にチェックアウトして作業するのでしょうか? 誰もが自分のプロファイル/サイトのスタートアップに ASDF を持っていると仮定しても、他の開発者はそれぞれの中央レジストリに異なるライブラリ セットを持っている可能性があります。プロジェクトで一緒に作業するためだけに同期する必要はありません。Emacs/SLIME から CL ランタイムのプロジェクト固有のインスタンスを起動し、プロジェクトで指定されたものを正確にロードするためのクリーンな方法が必要です。
オンライン、CL、またはその他の言語でベスト プラクティスのリソースがあれば、喜んで独自のソリューションを展開し、それをオープン ソース化します。
ルイス:
SAVE-APPLICATION は展開には適していますが、私が概説した複数開発プロジェクトのスタブには適していません。
編集2:
バチン:
バージョン依存性は、まさにこれが問題である理由です。Perl または Ruby の Web アプリケーションを開発している場合、これらの依存関係を管理する Web 管理者の存在に依存できます。Lisp が異質な技術である小売業や中小企業向けのアプリを開発する場合 (そして、Lisp を管理するために IT 組織を「スキルアップ」するよう説得することはできません)、そのアプローチは受け入れられません。
昨夜、独自のプロジェクト固有の ASDF インスタンスをロードするプロジェクト レベルの .lisp ファイルを作成し、プロジェクト ローカルのcentral-registryを設定し、依存ライブラリを手動でダウンロードすることで (ASDF-INSTALL を使用せずに)、必要なものを取得することができました。これは、CLSQL と Webblock だけの依存関係の厄介なカスケードでした)。SLIME と Clozure 自体の両方について、ホームとサイトからすべてのカスタマイズを削除する必要があったため、開発ツールの観点からはまだ理想的ではありません。また、共有依存関係も解決されません (CLSQL と Webblock は両方とも MD5 を使用します)。
Java にはクラス ローダー分離機能があり、これがバージョン依存の問題を解決する方法です。次に、プロジェクトに必要なライブラリを取得する方法に関する別の問題があります(Maven風)。前者は言語の問題の核心です。後者はツールに関係しています。ASDF-INSTALL がプロジェクト インクルード ディレクトリ (Maven 風) に対して行うことを行う SLIME 拡張機能を一緒にハックし、lib ソース コードを変更して defpackage 呼び出しをインターセプトし、何らかの方法で gensym 文字列を先頭に追加して分離を強制します。このアプローチには多くの穴があることはわかっていますが、これをどれだけ深く埋めることができるかを知るには、パッケージ仕様について十分に知りません。
Python については何も知りませんが、小売レベルのアプリが存在することは知っています。私はいつも MusicBrainz Picard を使っています。Pythonがどのようにそれを行うかを調べます。