6

cabal ファイルの依存関係セクション:

Build-Depends: base >= 3 && < 5, transformers >= 0.2.0

私は何かのようなことをすべきですか

Build-Depends: base >= 3 && < 5, transformers >= 0.2.0 && < 0.3.0

(依存するパッケージのバージョンに上限を設ける)

か否か?

実際の例を使用します: Hackage の "List" パッケージ (Monad トランスフォーマーとクラスのリスト)

  • 制限を設けないと、「トランスフォーマー」の変更によってパッケージが破損する可能性があります
  • 制限をかけると、「トランスフォーマー」を使用しているが、新しいバージョンを使用しているユーザーは、トランスフォーマーのこれらのクラスのインスタンスにすぎないため、使用できなくなりますlift-0.2.xliftIOListT

アプリケーションが壊れないように、常に上限を設定する必要があると思います。そのため、この質問はライブラリに関するものにすぎません。

依存関係にバージョンの上限を使用する必要がありますか?

4

3 に答える 3

4

上限を推奨する明示的なポリシーがあります。特にセクション3(「カバールの依存関係」)を参照してください。他の回答は、このポリシーをさらに正当化するものです。

つまり、上限は< A.(B+1)、AとBが現在のバージョンの最初の要素である形式である必要があります(A.B.C...)。これは、バージョンを増やすA.Bと、バージョンが古いAPIを壊すことを意味するためです。

于 2010-05-13T21:26:27.273 に答える
2

故障モードについて考えてください。

  • 上限があると、パッケージがビルドされるか、ビルドの依存関係が満たされないことについて、cabalがブリーチします。非難は明確に割り当てられています。

  • 上限がない場合、顧客は最新バージョンの変圧器を使用しており、下位互換性はありません。ソフトウェアのビルドに失敗します。GHCは、コードがどのようにコンパイルされないかについてブリーチします。あなたのソフトウェアは見苦しいようです。

上限を入れてください。

于 2010-05-13T01:30:32.250 に答える
1

受け入れられるバージョン番号に上限を設定する IMO は正しいことです。Hackage で使用されるバージョン番号のセマンティクスを考えると、パッケージがトランスフォーマー 0.3.0 で動作するという保証はありません。

ただし、これに関する実際の議論は見たことがなく、基本パッケージを除いて上限を使用するという一般的な推奨事項はないようです。

于 2010-05-13T00:31:57.973 に答える