نسخه‌بندی معنایی به زبان ساده

پوریا سبحانلو

پوریا سبحانلو

30 دی 1400
دقیقه 2
نسخه‌بندی معنایی به زبان ساده
app

سلام دوستان. یکی از بحث‌های داغ این روزها توی گروه‌ها و انجمن‌های لاراولی، ورژن‌های جدیدی از لاراول هست که تقریبا هر هفته منتشر میشه. بعد از منتشر شدن ورژن 6.0 لاراول، تقریبا هر ماه شاهد منتشر شدن دو ورژن جدید از این فریم‌ورک هستیم. یعنی 6.1، 6.2 و ... . اگر با ورژن‌های لاراول پایین‌تر از 6 کار کرده باشید، عادت داشتیم حداقل هر 6 ماه شاهد منتشر شدن یک ورژن جدید باشیم. مثلا فاصله زمانی بین ورژن‌های 5.6 تا 5.7 و همچنین 5.8 تا 6.0 حدود هفت ماه بود و توسعه‌دهنده‌های لاراول به این سبک عادت کرده بودن. اما با منتشر شدن نسخه 6.0، شاهد این هستیم که اعدادی که ورژن رو نشون میدن خیلی سریع داره بالا میره و این سوال پیش میاد که من تازه به ورژن 6.0 آپگرید کردم، با این همه آپدیت جدید چکار کنم؟ (و احتمالا یک حس عقب موندن رو تجربه می‌کنه). اما قضیه یک چیز دیگه هست.

 

همونطور که توی تغییرات ورژن 6.0 لاراول اعلام شد، از این ورژن به بعد این فریم‌ورک از نسخه‌بندی معنایی (Semantic Versioning) استفاده می‌کنه. اول باید بدونیم که نسخه‌بندی معنایی چی هست:

 

نسخه‌بندی معنایی
روزانه میلیون‌ها نرم‌افزار درحال توسعه داده شدن هستن و هر نسخه‌ی جدیدی از هر نرم‌افزار با یک شماره یکتا مشخص میشه. اما این شماره‌ها از چه قانونی تبعیت می‌کنن؟ مثلا یک نرم‌افزار دیروز نسخه 5.0.0 اون منتشر شد و امروز نسخه 5.1.0 اون. این عددها که با نقطه از هم جدا میشن چه معنایی دارن؟

هدف نسخه‌بندی معنایی، استاندارد سازی شماره‌ی نسخه‌هایی هست که به یک نرم‌افزار نسبت داده میشه.

با درک کردن این استاندارد، می‌تونیم اطلاعات جالبی از این اعداد بدست بیاریم. حالا بررسی می‌کنیم که توی این نسخه‌بندی، اعداد چه معنایی دارن.

توی نسخه‌بندی معنایی، اعداد یک ورژن شامل سه عدد هست که با نقطه از هم جدا میشن. یعنی طبق فرمت X.Y.Z که توی اونها x و y و z اعداد صحیح هستن:

X: نشون‌دهنده نسخه اصلی (Major Version) نرم‌افزار هست.
Y: نشون‌دهنده نسخه جزیی (Minor Version) نرم‌افزار هست.
Z: نشون‌دهنده نسخه پچ (Patch) نرم‌افزار هست.

برای مثال برای ورژن 6.12.3 یک نرم‌افزار، نسخه‌ی اصلی 6، نسخه جزیی 12 و نسخه پچ اون 3 هست.

حالا این شماره‌ها کی تغییر می‌کنن؟

X: عدد X زمانی تغییر می‌کنه که یک تغییر عمده و بزرگ توی نرم‌افزار می‌دیم. این تغییر باعث ناسازگاری عقب‌رو میشه. ناسازگاری عقب رو چی هست؟ فرض کنیم داریم از API نسخه 2.0.0 یک سیستم مثلا ربات تلگرام استفاده می‌کنیم. وقتی ورژن 3.0.0 ربات تلگرام منتشر بشه، یعنی یک تغییر عمده (Major Update) صورت گرفته. در این صورت ورژن 3.0.0 تلگرام با نرم‌افزارهایی که دارن از ورژن 2.0.0 تلگرام استفاده می‌کنن ناسازگار خواهد بود و این نرم‌افزارها برای استفاده از ورژن 3.0.0 باید یک سری تغییرات متناسب با ورژن جدید API اعمال کنن.

Y: این عدد زمانی تغییر می‌کنه یک سری ویژگی‌های به نرم‌افزار اضافه کردیم. این ویژگی‌ها باید سازگاری عقب‌رو داشته باشن. طبق همون مثال ربات تلگرام، یعنی اگه بجای نسخه 2.0.0، از نسخه 2.1.0 استفاده کنیم، نباید باعث از کار افتادگی نرم‌افزار ما بشه که داریم از API نسخه‌های قدیمی استفاده می‌کنیم.

Z: این عدد زمانی تغییر می‌کنه که یک سری باگ رو توی نرم‌افزار برطرف کردیم (Bug Fix). این باگ‌فیکس ها هم باید سازگاری عقب‌رو داشته باشن.

ورژن‌های زیر همگی برای ورژن‌‌بندی معنایی، معتبر هستن:

0.0.4
1.2.3
10.20.30
1.1.2-prerelease+meta
1.1.2+meta
1.1.2+meta-valid
1.0.0-alpha
1.0.0-beta
1.0.0-alpha.beta
1.0.0-alpha.beta.1
1.0.0-alpha.1
1.0.0-alpha0.valid
1.0.0-alpha.0valid
1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okay
1.0.0-rc.1+build.1
2.0.0-rc.1+build.123
1.2.3-beta
10.2.3-DEV-SNAPSHOT
1.2.3-SNAPSHOT-123
1.0.0
2.0.0
1.1.7
2.0.0+build.1848
2.0.1-alpha.1227
1.0.0-alpha+beta
1.2.3----RC-SNAPSHOT.12.9.1--.12+788
1.2.3----R-S.12.9.1--.12+meta
1.2.3----RC-SNAPSHOT.12.9.1--.12
1.0.0+0.build.1-rc.10000aaa-kk-0.1
99999999999999999999999.999999999999999999.99999999999999999
1.0.0-0A.is.legal
و نمونه‌های اشتباه برای ورژن‌بندی معنایی:

1
1.2
1.2.3-0123
1.2.3-0123.0123
1.1.2+.123
+invalid
-invalid
-invalid+invalid
-invalid.01
alpha
alpha.beta
alpha.beta.1
alpha.1
alpha+beta
alpha_beta
alpha.
alpha..
beta
1.0.0-alpha_beta
-alpha.
1.0.0-alpha..
1.0.0-alpha..1
1.0.0-alpha...1
1.0.0-alpha....1
1.0.0-alpha.....1
1.0.0-alpha......1
1.0.0-alpha.......1
01.1.1
1.01.1
1.1.01
1.2
1.2.3.DEV
1.2-SNAPSHOT
1.2.31.2.3----RC-SNAPSHOT.12.09.1--..12+788
1.2-RC-SNAPSHOT
-1.0.3-gamma+b7718
+justmeta
9.8.7+meta+meta
9.8.7-whatever+meta+meta
اعداد و کلماتی که بعد از شماره پچ می‌بینید، نسخه پیش از انتشار هست که درباره اون می‌تونید اینجا رو بخونید.

خب حالا برگردیم به مثال لاراول. همونطور که تا الان باید متوجه شده باشیم، نسخه‌های قبل از 6.0.0 لاراول که از نسخه‌بندی معنایی استفاده نمی‌کردن، منتشر شدن ورژن‌های 5.7 و 5.8 باعث ناسازگاری عقب‌رو میشد. یعنی برای استفاده از این ورژن‌ها باید کدهامون رو تغییر می‌دادیم. حالا که لاراول داره از نسخه‌بندی معنایی استفاده می‌کنه، ورژن‌ها به این صورت افزایش پیدا می‌کنن: 6.1.0 - 6.2.0 - 6.3.0 و ... . یعنی عدد Y داره تغییر می‌کنه. عدد Y وقتی تغییر می‌کنه یعنی سازگاری عقب‌رو وجود داره. پس با خیال راحت و بدون نگرانی از اینکه کدهای ما از کار بیوفتن، می‌تونیم لاراول رو آپدیت کنیم. برای آپدیت از نسخه 6.0.0 به آخرین ورژن هم کافیه composer update رو اجرا کنیم.

طبق گفته لاراول، نسخه‌های اصلی این فریم‌ورک هر 6 ماه (فوریه و آگوست یا اسفند و شهریور) منتشر میشه و نسخه‌های جزیی (Minor) هر هفته.

 

خب دوستان امیدوارم از این مقاله استفاده کرده باشید. اگر مفید بود برای دوستانتون بفرستید و همچنین خوشحال میشم نظراتتون رو بدونم. روزتون خوش.😉 🖐️

 


پوریا سبحانلو

پوریا سبحانلو

سلام من پوریام

یه php کاری که ریز نگاهی هم به فریم ورک های js داره


admoon من اینجام

مطالب مرتبط