15

私はハックパッケージ lrucache のメンテナーです。Binary最近、とのインスタンスを追加する機能のリクエストを受け取りましたNFData。どちらも便利なものであり、原則として、これらのインスタンスに問題はありません。

ただし、どちらも新しいパッケージの依存関係を導入するため、パッケージの依存関係リストをできるだけ最小限に抑えたいと考えています。これを処理する健全な方法はありますか?lrucacheデータ構造が実装できる便利な型クラスを提供し、その恩恵を受けるパッケージは、おそらく 20 をはるかに超える数のパッケージがあります。

明らかに、それらすべてを依存関係として追加することは非スターターです。しかし、他に何ができるでしょうか?

さまざまなインスタンスのコンパイルを有効にするフラグを lrucache.cabal に追加できます。必要な場合を除いて、依存関係リストを最小限にするという点で、これは機能します。しかし、ビルド依存セクションでビルド フラグを指定できないため、現実の世界では恐ろしいことです。したがって、特定のフラグを持つパッケージに依存することはできますが、その依存関係を指定することはできません。これはすぐにほとんど役に立たなくなります。

孤立したインスタンス パッケージの束を作成できます。これには、これらのインスタンスへの依存関係を build-depends セクションで指定できるという利点があります。その主な欠点は、hackage に大量の余分なパッケージを追加し、それらを個別のパッケージとして維持する必要があることです。

他に何ができますか?どうするのが正解?

4

4 に答える 4

7

cabal (パッケージング システム) 自体のオプションの依存関係システムを除いて、オプションはあまり良くありません。

1 つのオプションは次のとおりです。メイン パッケージを統合する追加パッケージごとに、独自の追加パッケージを作成できます。

たとえば、lrucacheと統合する場合は、統合を含むbinary追加のパッケージを作成できますlrucache-binary(この場合、タイプ クラス インスタンス)。同様に、lrucache-nfdataと統合lrucacheする独自の新しいパッケージnfdata

次に、誰かが両方lrucacheと との統合を希望する場合、一緒binaryに頼ることができます[binary, lrucache, lrucache-binary]

于 2011-09-15T20:45:43.247 に答える
3

2 つのパッケージを維持するだけだとしたらどうなるでしょうか。lrucache無数の異なるものに依存する と、多かれ少なかれ現在持っているものlrucache-lite(または) です。lrucache-minimal次に、依存関係を最小限に抑えたい場合は軽量バージョンを使用し、無数の依存関係を気にしない場合は標準バージョンを使用します。コードの重複を避けるために、大きなものはおそらく軽量のものに依存します。

于 2011-09-16T00:49:54.373 に答える
1

ゲームには少し遅れましたが、私の 2 セント:

  1. ライブラリのパブリック API (クラス インスタンスを含む) は、ビルド フラグやパッケージの可用性に基づいて決して変更されるべきではありません。これは、下流の開発者やディストリビューション パッケージのメンテナーにとって不利です。

  2. 私は Haskell Platform の何に対しても疑いなく依存関係を追加します (おそらく 'unix' や 'win32' などを除く)。

それでも「バイナリ」は残りますが、その Hackage ページによると、複数の Linux ディストリビューションで利用でき、私の経験では Windows に問題なくインストールされます。この場合、私はパッチを受け入れますが、自分で作成することはしません。

これは質問に直接答えるものではありませんが、うまくいけば、私が使用する思考プロセスを示しています。

于 2011-09-22T02:38:55.057 に答える
0

さまざまなインスタンスのコンパイルを有効にするフラグを lrucache.cabal に追加できます。必要な場合を除いて、依存関係リストを最小限にするという点で、これは機能します。しかし、ビルド依存セクションでビルド フラグを指定できないため、現実の世界では恐ろしいことです。したがって、特定のフラグを持つパッケージに依存することはできますが、その依存関係を指定することはできません。これはすぐにほとんど役に立たなくなります。

これはまさにあなたが言っていることがうまくいかないかもしれませんが、条件付きでコンパイルされたCPP プラグマにインポートとクラス定義を含めることはできますか? imports「オプションの依存関係」の1つをインポートする内部モジュールがラップされていると思います。

私はこれを試したことはありませんが、答えも知りたいと思っています。

于 2011-09-16T02:09:45.140 に答える