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