نمای کلی اجرایی و اهمیت معماری
تیم انتشار راست رسماً نسخه ۱.۹۹.۱ را عرضه کرده است که نشاندهنده یک نسخه نقطهای متمرکز برای رفع رگرسیونهای بحرانی کشفشده در چرخههای تولید قبلی است. از آنجا که برنامهنویسی سیستمهای مدرن بهطور فزایندهای برای زیرساختهای کلیدی به راست اتکا دارد، حفظ ثبات مطلق در محیطهای مختلف هدف از اهمیت بالایی برخوردار است. این بهروزرسانی بر تعهد دقیق پروژه به صحت کامپایلر، قابلیت اطمینان میانپلتفرمی و سازگاری یکپارچه رابط توابع خارجی (FFI) تأکید میکند و تضمین مینماید که بارهای کاری سازمانی و جاسازیشده بتوانند با اطمینان کامل به نسخه جدید ارتقا یابند.
از نظر معماری، نسخه ۱.۹۹.۱ سه بردار آسیبپذیری مجزا را که در نسخههای اخیر معرفی شده بودند، هدف قرار میدهد: یک مسئله پیوند نماد گمشده که پلتفرمهای فاقد پشتیبانی بومی از wcslen را تحت تأثیر قرار میدهد، یک باگ ظریف عدم تطابق ABI در مورد مقادیر بازگشتی بولین FFI در معماریهای x86_64، و یک خطای بارگذاری کتابخانه پویا در لینککننده بستهبندیشده در محیطهای macOS. با رفع این موارد خاص، تیم هسته راست اصول بنیادین زبان یعنی انتزاعهای صفرهزینه و همروندی ایمن را حفظ کرده و از خطاهای فاجعهبار زمان اجرا و رفتارهای تعریفنشده پیش از انتشار در خطوط تولید جلوگیری میکند.
بهبودهای کلیدی و ارگونومی توسعهدهنده
بارزترین اصلاح فنی در نسخه ۱.۹۹.۱ راست بر روی مسئله نماد گمشده wcslen (مسئله گیتهاب شماره ۱۶۳۶۱۴) تمرکز دارد. گذرگاههای بهینهسازی مدرن LLVM، بهویژه loop-idiom-wcslen، بهطور تهاجمی فراخوانیهایی را برای wcslen به عنوان یک استراتژی بهینهسازی معرفی میکنند. با این حال، برخی محیطهای بدون سیستمعامل (bare-metal) و محدود — بهویژه اهداف UEFI که از کتابخانه استاندارد (std) استفاده میکنند — بهطور ذاتی این روتین طول رشته کاراکتر عریض را در پیادهسازیهای libc خود ارائه نمیدهند. برای حل این مشکل، کتابخانه توابع داخلی کامپایلر راست اکنون شامل یک پیادهسازی پشتیبان مقاوم از wcslen است که تضمین میکند آرتیفکتهای کتابخانه استاندارد پیشکامپایلشده و الگوهای کد فضای کاربر در تمامی سختافزارها و اهداف فریمور پشتیبانیشده با موفقیت کامپایل و لینک شوند.
علاوه بر این، این نسخه نقطهای یک رگرسیون بحرانی FFI را روی پلتفرمهای x86_64 که شامل انواع مقادیر بازگشتی bool است (مسئله گیتهاب شماره ۱۶۳۹۱۱) برطرف میکند. پیش از این، توابع راست که یک مقدار بولین را از طریق FFI بازمیگرداندند، میتوانستند بیتهای ۱ تا ۷ رجیستر بازگشتی هدف را ناخواسته نامشخص رها کنند. این انحراف از ABI سیستم باعث میشد که زمینههای فراخوانی گاهی الگوهای بیتی خام دیگری را به غیر از ۰ یا ۱ محض مشاهده کنند که این امر به بروز باگهای منطقی شدید در پایگاههای کد چندزبانه منجر میشد. نسخه ۱.۹۹.۱ علامتگذاری صریح گسترش صفر (zero-extension) را برای این انواع بازگشتی دوباره برقرار میکند. علاوه بر این، توسعهدهندگان macOS از اصلاحیهای روی rust-lld (مسئله گیتهاب شماره ۱۶۳۹۴۷) بهرهمند میشوند که پیشتر به دلیل مسیرهای جستجوی کتابخانه گمشده، هنگام فراخوانی مستقل از پروکسی rustup موفق به بارگذاری libLLVM نمیشد. لینککننده اکنون با یک ورودی سختکدشده rpath ساخته شده است که مستقیماً به libLLVM.dylib اشاره میکند و جریانهای کاری کامپایل روان را تضمین میکند.
ماتریس مقایسه معماری
| معیار ارزیابی | مبنای قبلی (قبل از ۱.۹۹.۱) | انتشار نسخه ۱.۹۹.۱ راست | تأثیر معماری |
|---|---|---|---|
| یکپارچگی پیوند هدف | مستعد خطاهای گمشده wcslen در UEFI/bare-metal |
شامل پشتیبان توابع داخلی کامپایلر wcslen |
حذف خطاهای زمان لینک برای بهینهسازیهای رشتهای LLVM |
| تطابق با FFI ABI | بیتهای بالایی نامشخص در مقادیر بازگشتی bool در x86_64 |
اعمال گسترش صفر سختگیرانه روی رجیسترهای bool |
جلوگیری از رفتار تعریفنشده در باینریهای چندزبانه |
| پایداری محیط لینککننده | شکست rust-lld بدون پروکسیهای مسیر rustup در macOS |
ورودی rpath جاسازیشده به libLLVM.dylib اشاره میکند |
سادهسازی جریانهای کاری اجرای کامپایلر مستقل |
تغییرات ناسازگار و نکات مهاجرت
نسخه ۱.۹۹.۱ راست کاملاً با تمام نسخههای قبلی ۱.x سازگار است و هیچ تغییر ناسازگار تعمدی یا تغییر در سینتکس معرفی نمیکند. تنظیمات انجامشده صرفاً رفع باگ و اصلاح رگرسیون هستند. با این حال، پایگاههای کدی که ناخواسته به بیتهای بالایی تعریفنشده مقادیر بازگشتی بولین FFI تکیه کرده یا آنها را دور زده بودند، اکنون ممکن است پایبندی سختگیرانهتری را به ABIهای سیستم تجربه کنند. به توسعهدهندگان توصیه میشود که پس از ارتقا، مجموعههای جامع تست یکپارچهسازی و چندزبانه را اجرا کنند، به ویژه اگر برنامههای آنها به شدت با کتابخانههای C یا C++ در ارتباط است.
راهنمای گامبهگام ارتقا
ارتقا به نسخه ۱.۹۹.۱ راست از طریق ابزار رسمی مدیریت ابزارک (toolchain)، یعنی rustup، بسیار ساده است. برای بهروزرسانی محیط توسعه محلی خود مراحل زیر را دنبال کنید:
۱. ترمینال خود را باز کرده و ابزارک پایدار خود را با اجرای دستور زیر به نسخه ۱.۹۹.۱ بهروزرسانی کنید:
rustup update stable
۲. بررسی کنید که ابزارک فعال کامپایلر رشته نسخه صحیح را گزارش کند:
rustc --version
۳. اهداف پروژه خود را پاکسازی و مجدداً کامپایل کنید تا مطمئن شوید تمام پشتیبانهای توابع داخلی کامپایلر و مسیرهای لینککننده به درستی یکپارچه شدهاند:
cargo clean && cargo build --release
