EN
→ بازگشت به خبرخوان
شمارهٔ ۰۲۰۴Rust۲ دقیقه۳ منبع

Rust 1.97.1؛ انتشار آرامی برای ایمنی تولید—پیش از اعتماد به باینری‌های جدید به‌روزرسانی کنید

Rust 1.97.1 یک خطای کامپایل نادرست در LLVM را که با Rust 1.97.0 مرتبط بود برطرف می‌کند؛ سری 1.97 همچنین نام‌گذاری نمادها، پیام‌های لینکِر و سیاست هشدارهای Cargo را تغییر داده است. این راهنمای بررسی‌های لازم پیش از انتشار را توضیح می‌دهد.

اشتراک‌گذاری
راست (Rust)
Rust 1.97.1؛ انتشار آرامی برای ایمنی تولید—پیش از اعتماد به باینری‌های جدید به‌روزرسانی کنید
تصویر: تولید هوش مصنوعی

Rust 1.97.1 نسخه‌ای کوچک با پیامدی مهم برای ایمنی استقرار است: این نسخه خطای کامپایل نادرست در یک بهینه‌سازی LLVM را برطرف می‌کند. تیم Rust می‌گوید هم اصلاح LLVM و هم تغییر سمت Rust را که احتمال فعال‌شدن خطا را کاهش می‌داد، به این نسخه بازگردانده است. بااین‌حال، تیم اعلام کرده که خطای اصلی دست‌کم از Rust 1.87 وجود داشته است؛ بنابراین این موضوع ثابت نمی‌کند که همه برنامه‌های ساخته‌شده با نسخه‌های قدیمی تحت‌تأثیر بوده‌اند.

اقدام فوری روشن است: rustup update stable را اجرا کنید، خروجی‌های production را با Rust 1.97.1 دوباره بسازید و آزمون‌هایی را اجرا کنید که مسیرهای بهینه‌سازی‌شده را پوشش می‌دهند. تیم‌هایی که بازتولیدپذیری برایشان مهم است باید checksum یا سایر خروجی‌های build را نیز مقایسه کنند. ارتقای کامپایلر به‌تنهایی درست‌بودن باینریِ از قبل منتشرشده را ثابت نمی‌کند؛ فقط باعث می‌شود build بعدی با toolchain اصلاح‌شده انجام شود.

این مسئله مهم‌تر می‌شود، چون Rust 1.97.0 چند تغییر در شیوه بررسی و بهره‌برداری از باینری‌ها ایجاد کرد. نام‌گذاری نمادهای مخصوص Rust با نسخه v0 در stable به پیش‌فرض تبدیل شد. این روش اطلاعات بیشتری درباره نمونه‌سازی genericها حفظ می‌کند، اما debuggerها و profilerهای قدیمی ممکن است نتوانند نام‌های جدید را demangle کنند و قالب backtraceها نیز ممکن است تغییر کند.

Rust 1.97.0 همچنین خروجی linker را به‌صورت پیش‌فرض قابل مشاهده کرد. پیش‌تر، پیام‌های linker در build موفق معمولاً پنهان می‌شدند؛ اکنون از طریق lint به نام linker_messages نمایش داده می‌شوند. این تغییر می‌تواند مشکلات واقعی پلتفرم یا toolchain را زودتر آشکار کند، هرچند پروژه‌ها ممکن است لازم باشد نویز عمدی را صراحتاً با سطح allow خاموش کنند.

Cargo نیز پیکربندی پایدار build.warnings را ارائه کرده است؛ قابلیتی که جایگزین راهکار رایج RUSTFLAGS=-Dwarnings می‌شود. در CI می‌توان از CARGO_BUILD_WARNINGS=deny استفاده کرد و در توسعه محلی سطح allow یا warn را برگزید. چون این تنظیم cache build را بی‌اعتبار نمی‌کند، تیم‌ها می‌توانند CI بدون warning داشته باشند، بدون آنکه هر آزمایش محلی باعث cache miss شود.

درس عملی این انتشار از یک patch فراتر می‌رود. در Rust، صحت کامپایلر، مشاهده‌پذیری باینری و سیاست CI هم‌زمان در حال پیشرفت‌اند. برای پروژه‌های production، فهرست ایمن این است: به Rust 1.97.1 ارتقا دهید، سازگاری debugger و profiler با نمادهای v0 را بررسی کنید، هشدارهای تازه‌نمایش‌داده‌شده linker را ببینید و سیاست هشدارها را به پیکربندی Cargo منتقل کنید. تضمین‌های memory safety، خطاهای کامپایلر یا toolchain را حذف نمی‌کنند؛ راستی‌آزمایی منظم انتشار همچنان ضروری است.

برچسب‌هاRustRust 1.97.1LLVMایمنی کامپایلرCargotoolchain
منابع مستند۳ مرجع
  1. [۰۱]Announcing Rust 1.97.1blog.rust-lang.org
  2. [۰۲]Announcing Rust 1.97.0blog.rust-lang.org
  3. [۰۳]segfault on Rust 1.97.0 · Issue #159035github.com
خواندنی بعدی

خبرخوان را در ایمیل بگیرید

هر سیگنال تازه، مستقیم از خط تولید. بدون مزاحمت، لغو عضویت در هر زمان.

خوراک RSS در دسترس · بدون هرزنامه