だから私は前方互換性について学んでいて、依存関係に後方互換性があるが前方互換性がないこと、そしてその逆であることを「依存関係」に警告できるかどうか疑問に思っていました。
SemVer仕様では、以下が必要です。
7。 マイナーバージョンY(xYz | x> 0)は、新しい下位互換性のある機能の場合、インクリメントする必要があります(-===-)[強調]パブリックAPIに導入されました。 [...]
8。 メジャーバージョンX(X.y.z | X> 0)は、後方互換性のない変更がパブリックAPIに導入された場合、インクリメントする必要があります。 それはマイナーとパッチレベルの変更を含めることができます。[鉱山を強調] [ ...]
私にとって、それは次のことを意味します:
私が正しいと仮定します。また、後方互換性も前方互換性もないすべての変更*は、後方互換性と前方互換性*(またはその逆)の2つの連続する変更に分離できると仮定します。
つまり、下位互換性はないが上位互換性*の変更を他の変更から常に分離でき、下位互換性も前方互換性もない変更*が発生しないことを意味します。
したがって、次のように再定義できます:
新しいメジャーバージョンM.0.p
依存関係は、依存関係によって安全にダウングレードできます。前のメジャーバージョンの最後のマイナーバージョンまで、それを(M-1).m.0
。
私が正しいと仮定します。 依存関係のバージョンが前方互換性があることが保証されていることを知ることは、依存関係にとって有益か役に立たないでしょうか*?
SemVerへの追加の制約の長所と短所は何ですか?
(私の推論を確認することはこの質問の目的ではありません、私は考えすぎていることを知っていますが、この推論が何らかの形で役立つかどうか知りたいだけですが、あなたの意見をいただければ幸いです)
編集:「前方互換」の後に「*」があるところはどこでも、「安全にダウングレード可能」を意味しました。
確かに、バージョンに下位互換性がある場合、それは以前のバージョンが安全にアップグレード可能であることを意味します。したがって、バージョンに上位互換性がある場合、nextバージョンは安全にダウングレードできることを意味します。また、次のバージョンがリリースされる前に、そのバージョンの前方互換性を保証できないことも意味します。したがって、新しいバージョンが下位互換性があるか、安全にダウングレードできることは保証できますが、上位互換性があるか、安全にアップグレードできることは保証できませんまだ。
ほとんどすべての変更は、その性質上、前方互換性がありません。
Foo
をBar
に変更してからBar
を使用すると、以前のバージョンにダウングレードできませんバージョン。コメントで言うように、これに対する1つの例外は、小さな変更を使用してエイリアスを導入し、次に大きな変更を使用してオリジナルを削除し、エイリアスのみを残すことです。この特定の状況では、大きな変更は前方互換です。
したがって、8を次のように変更できます。
メジャーバージョンX(X.y.z | X> 0)は、後方互換性のない変更がパブリックAPIに導入された場合、インクリメントする必要があります。マイナーおよびパッチレベルの変更が含まれる場合があります。 前方互換性のある変更が含まれる場合があります。メジャーバージョンが増加する場合、パッチとマイナーバージョンを0にリセットする必要があります。
しかし、「可能性がある」としか言えないので、前方互換性はEdgeの場合なので、人々に混乱を与え、前方互換性のある条項の目的を尋ねる以外に、これで何ができるでしょうか。