ICP·Devآی‌سی‌پی‌·دِو
بازگشت به مقالات
راست۴ تیر ۱۴۰۵3 دقیقه مطالعه

نگاهی به انقلاب کامپایلر راست در سال ۲۰۲۶: ابزار BorrowSanitizer و موفقیت‌های دوگانه GCC

زنجیره ابزار زبان راست با ظهور BorrowSanitizer (BSAN) برای اعتبارسنجی امنِ «Tree Borrows» در تعامل با سایر زبان‌ها (FFI) و ادغام رسمی پشتیبانی دوگانه از GCC در rustup، دستخوش یک تحول تاریخی شده است.

نکات کلیدی

  • زنجیره ابزار زبان راست با ظهور BorrowSanitizer (BSAN) برای اعتبارسنجی امنِ «Tree Borrows» در تعامل با سایر زبان‌ها (FFI) و ادغام رسمی پشتیبانی دوگانه از GCC در rustup، دستخوش یک تحول تاریخی شده است
اشتراک‌گذاری
نگاهی به انقلاب کامپایلر راست در سال ۲۰۲۶: ابزار BorrowSanitizer و موفقیت‌های دوگانه GCC

نگاهی به انقلاب کامپایلر راست در سال ۲۰۲۶: ابزار BorrowSanitizer و موفقیت‌های دوگانه GCC

همان‌طور که زبان راست (Rust) از یک زبان سیستم‌محور محبوب به ستون باربر زیرساخت‌های مدرن تبدیل می‌شود، جامعه توسعه‌دهندگان آن تمرکز خود را روی حل دو چالش بزرگ معماری معطوف کرده است: اعتبارسنجی مرزهای پیچیده unsafe/FFI و شکستن انحصار اتکا به LLVM.

در اواسط سال ۲۰۲۶، دو موفقیت بزرگ در ابزارها رسماً ارائه شده‌اند تا نحوه کامپایل و اعتبارسنجی کدهای راست را بازتعریف کنند.


۱. ابزار BorrowSanitizer (BSAN): پر کردن شکاف امنیتی در FFI

اگرچه راستِ ایمن (Safe Rust) تضمین می‌کند که عاری از رقابت داده‌ها (Data Races) و باگ‌های حافظه باشد، اما کدهای سیستمی اغلب برای تعامل با زبان‌های C و C++ به بلوک‌های unsafe و رابط‌های تابع خارجی (FFI) متکی هستند.

به‌طور سنتی، توسعه‌دهندگان برای شناسایی موارد نقض مدل نام مستعار (Aliasing) جدید راست یعنی «Tree Borrows» به ابزار Miri متکی بودند. با این حال، Miri با گلوگاه‌های شدیدی مواجه است: سرعت اجرای آن تا ۱۰۰۰ برابر کندتر از اجرای محلی (Native) است و نمی‌تواند باینری‌های کامپایل‌شده‌ی C/C++ را بررسی کند.

در این میان، BorrowSanitizer (BSAN) وارد می‌شود؛ یک ابزار اعتبارسنجی پویای مبتنی بر LLVM که برای حل هر دو مشکل طراحی شده است.

  • نحوه کارکرد: ابزار BSAN دستورات داخلی (Intrinsics) از نوع "retag" را در زمان کامپایل تزریق می‌کند تا مسیر حرکت اشاره‌گرها و ارجاع‌ها را در حافظه ردیابی کند.
  • ردیابی منشأ (Provenance): ابزار BSAN با استفاده از یک Shadow Stack و یک جدول دایرکتوری دو‌سطحی مجزا، «منشأ» اشاره‌گر (داده‌های متایی که اشاره‌گر را به مجوزهای Tree Borrows آن مرتبط می‌کند) را در مرزهای توابع خارجی بدون به هم زدن سازگاری ABI ردیابی می‌کند.
  • آماده برای تست فازینگ (Fuzzing): بر خلاف Miri، ابزار BSAN آن‌قدر سریع است که می‌توان آن را در حلقه‌های فازینگ و خطوط لوله CI (یکپارچه‌سازی مداوم) اجرا کرد.

با ارسال رسمی پروپوزال (RFC) برای LLVM در اواخر مه ۲۰۲۶، BSAN در مسیر تبدیل شدن به یک استاندارد بالادستی است که اعتبارسنجی نام مستعار چندزبانه در سطح محصول را مستقیماً به LLVM می‌آورد.

یک نمودار توالی فنی که نحوه عملکرد BorrowSanitizer را نشان می‌دهد...


۲. موفقیت‌های دوگانه GCC: رهاسازی بخش بک‌اند

سال‌ها بود که راست کاملاً به زنجیره ابزار LLVM محدود بود. در سال ۲۰۲۶، این اکوسیستم از طریق دو ابتکار موازی گام بزرگی به سمت همگامی با GCC برداشته است:

ورود rustc-codegen-gcc به Rustup

توسعه‌دهندگان اکنون می‌توانند بک‌اند تولید کد GCC را مستقیماً از نسخه Nightly در rustup نصب کنند:

bash
rustup +nightly component add rustc-codegen-gcc-preview gcc-x86_64-unknown-linux-gnu-preview

این قابلیت به توسعه‌دهندگان اجازه می‌دهد تا پروژه‌های استاندارد Cargo را با استفاده از بهینه‌ساز افسانه‌ای GCC و مجموعه وسیع معماری‌های هدف آن، بدون نیاز به کامپایل کردن GCC از روی کد منبع، کامپایل کنند.

نزدیک شدن gccrs به هسته لینوکس

در حالی که بک‌اند codegen اتصال GCC را به فرانت‌اند استاندارد rustc برقرار می‌کند، gccrs یک فرانت‌اند تمیز و مستقل (Clean-room) برای زبان راست است که از ابتدا برای مجموعه کامپایلر گنو (GNU Compiler Collection) توسعه یافته است.

در گزارش پیشرفت اواسط سال ۲۰۲۶، تیم gccrs دستاوردهای کلیدی خود در نقشه راه کامپایل بومی هسته لینوکس را برجسته کرد. آن‌ها پس از تکمیل گام «کامپایلر راست برای سیستم‌های نهفته» (که تنها به core وابسته است)، اکنون به‌طور فعال در حال برنامه‌ریزی برای گام «کامپایلر راست برای لینوکس» هستند که شامل پشتیبانی از کریت alloc و قرار دادن رفتارهای صحیح فراخوانی Drop برای انواع داده‌های پیچیده هسته مانند Mutexها می‌شود.

آینده‌ای مستقل و انعطاف‌پذیر

با اعطای سرعت فوق‌العاده‌ی BorrowSanitizer به توسعه‌دهندگان جهت اعتبارسنجی پایگاه‌های کد ترکیبی و همچنین آزادی عمل کامپایلر GCC برای هدف قرار دادن سخت‌افزارهای نهفته و خاص، راست در حال تثبیت جایگاه خود به عنوان برترین زبان برنامه‌نویسی سیستم برای چندین دهه آینده است.

برچسب‌ها

#راست#LLVM#GCC#کامپایلر#امنیت حافظه

منابع و ارجاعات مستند

پیشنهاد مطالعه بعدی

خوشتان آمد؟ مقاله بعدی را بگیرید

در خبرنامه عضو شوید تا راهنمای بعدی در ایمیلتان باشد — بدون مزاحمت، لغو عضویت در هر زمان.