|
|
უბრალო მაგალითზე მოვახდინოთ დემონსტრირება თუ როგორ შეუძლია სემანტიკურ ვერსიონირებას “დამოკიდებულებათა ჯოჯოხეთი” აქციოს წარსულად. წარმოვიდგინოთ ბიბლიოთეკა სახელად “Firetruck”. მას ჭირდება სემანტიკურად ვერსიონირებული პაკეტი სახელად “Ladder”. როდესაც შეიქმნა Firetruck, პაკეტი Ladder იყო 3.1.0 ვერსია.
|
|
|
La precedencia DEBE ser calculada separando la versión en major, minor, patch e identificadores pre-release en ese orden (La metadata de build no figuran en la precedencia). Las versiones major, minor, y patch son siempre comparadas numéricamente. La precedencia de pre-release DEBE ser determinada comparando cada identificador separado por puntos de la siguiente manera: los identificadores que solo consisten de números son comparados numéricamente y los identificadores con letras o guiones son comparados de acuerdo al orden establecido por ASCII. Los identificadores numéricos siempre tienen una precedencia menor que los no-numéricos. Ejemplo: 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0.
|
|
|
バージョン同士をどのように比較するのかは優先度によって決まります。優先度はメジャー、マイナー、パッチ、プレリリース識別子の順番(ビルドメタデータは優先度に関して考慮しない)で分けて評価されなければなりません(MUST)。優先度は、各識別子を左から右に比較して最初の違いによって評価します。以下のように、メジャー、マイナー、パッチバージョンと常に数値的に比較します。例:1.0.0 < 2.0.0 < 2.1.0 < 2.1.1。 メジャー、マイナー、パッチが同じ場合、プレリリースバージョンを持っている方が通常のバージョンよりも低い優先度です。例:1.0.0-alpha < 1.0.0。 同じ、メジャー、マイナー、パッチを持つプレリリースバージョンの優先度の決定は、ドットで区切れた識別子を左から右に、異なるところが見つかるまで比較し決定しなければなりません(MUST)。数値のみで構成される識別子は数値的に比較され、文字列やハイフンを含む識別子はASCIIソート順に辞書的に比較されます。数値的な識別子は常に非数値的な識別子よりも低い優先度です。もし先行する識別子が同じ場合、プレリリースのフィールドが小さいセットよりも大きいセットのほうが高い優先度です。例:1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0。
|
|
|
این ایدهای جدید یا انقلابی نیست. در واقع، احتمالاً شما چیزی مشابه به این را پیش از این انجام دادهاید. مشکل اینجاست که «مشابه» به اندازهٔ کافی خوب نیست. بدون انطباق با نوعی تعریف رسمی، شمارههای نسخه ضرورتاً برای مدیریت وابستگی (dependency) بلااستفاده هستند. بوسیلهٔ اختصاص اعداد و تعاریف واضح به ایدههای بالا، برقراری ارتباط میان کاربران نرمافزار شما و اهدافتان آسانتر میشود. بهمجرد اینکه این اهداف واضح شود، مشخصات وابستگی انعطافپذیر (نه آنچنان انعطافپذیر) میتواند نهایتاً ایجاد شود.
|
|
|
Následující příklad ilustruje, jak se díky Sémantickému verzování můžete snadno vyhnout problémům se závislostmi (tzv. “dependency hell”). Mějme knihovnou “Firetruck” (česky požární vůz). Ta závisí na Sémanticky verzované knihovně “Ladder” (česky žebřík). Ve době vzniku knihovny Firetruck je aktuální verze knihovny Ladder 3.1.0. Protože Firetruck využívá některé funkce knihovny Ladder, které do ni byly přidány až ve verzi 3.1.0, můžete bez rizika nadefinovat závislost na knihovně Ladder ve verzi vyšší nebo rovno 3.1.0 a menší než 4.0.0. Jakmile bude vydána verze Ladder 3.2.0, můžete se spolehnout na to, že s ní bude knihovna Firetruck kompatibilní.
|
|
|
Kot odgovoren razvijalec boste seveda želeli preveriti, da katerikoli paket nadgradnje funkcionira, kot je oglaševano. Realni svet je grdo mesto; ničesar ni, kar bi lahko naredili o tem, razen da smo pazljivi. Kar lahko naredite je omogočiti semantičnim verzijam, da vam ponudijo pameten način izdaje in nadgradnje paketov brez, da morate kotaliti nove verzije odvisnih paketov, kar vam prihrani čas in težave.
|
|
|
דוגמא פשוטה תדגים כיצד גירסאות סמנטיות יכולות להפוך את ״גינהום התלויות״ לנחלת העבר. דמיינו ספריה בשם ״כבאית״. שדורשת ספרייה בשם ״סולם״ שעומדת במפרט של גרסאות סמנטיות. באותו הזמן שבו הכבאית נוצרה, ספריית סולם הייתה בגרסה 3.1.0. מכיוון שהכבאית משתמשמת בפונקציונליות שהוצגה בגרסה 3.1.0, ניתן לציין את התלות של ספריית כבאית בספריית סולם כגדול או שווה לגרסה מספר 3.1.0 אך פחות מ 4.0.0. עכשיו כאשר גרסת סולם מספר 3.1.1 ומספר 3.2.0 מתפרסמות, אפשר להשתמש בהם בספריית הכבאית בבטחה, ולדעת שהם יהיו תואמות את ה API הקיים של הספרייה עליו אנו מסתמכים בספריית הכבאית שלנו.
|