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

نسخه بعدی borrow checker راست وارد Nightly شد؛ Polonius Alpha چه تغییری می‌دهد؟

راست Polonius Alpha را در کانال nightly فعال کرده است تا پیش از تثبیت احتمالی در سال ۲۰۲۶، تحلیل جریان‌محورِ borrowها در کد واقعی آزمایش شود.

اشتراک‌گذاری
راست (Rust)
نسخه بعدی borrow checker راست وارد Nightly شد؛ Polonius Alpha چه تغییری می‌دهد؟
تصویر: تولید هوش مصنوعی

borrow checker راست وارد مرحله آزمایش بعدی خود شده است. تیم راست در اطلاعیه ۴ اوت اعلام کرد که Polonius Alpha اکنون در کانال nightly فعال است تا توسعه‌دهندگان پیش از تثبیت احتمالی آن در ادامه سال، این تحلیل جدید را آزمایش کنند.

تغییر اصلی، بررسی جریان‌محور رابطه‌های طول‌عمر است. تحلیل فعلیِ non-lexical lifetimes ممکن است وقتی طول‌عمر reference بازگشتی زیاد است، یک borrow را در سراسر تابع زنده فرض کند؛ حتی اگر یک شاخه مشخص از کنترل جریان از آن borrow استفاده نکند. مثال تیم راست به HashMap::get_mut مربوط است: اگر جست‌وجو موفق شود، reference برگردانده می‌شود؛ اگر موفق نشود، تابع یک مقدار پیش‌فرض درج کرده و کلید را دوباره جست‌وجو می‌کند. NLL ممکن است این الگو را رد کند، چون با احتیاط borrow اول را در شاخه None نیز زنده در نظر می‌گیرد. Polonius Alpha آن را می‌پذیرد، چون تشخیص می‌دهد borrow در آن مسیر زنده نیست.

یک مثال کوچک‌تر، reborrow کردن یک reference قابل‌تغییر داخل عبارت if است. Polonius Alpha می‌تواند تشخیص دهد که reborrow فقط در شاخه‌ای اهمیت دارد که آن را برمی‌گرداند و به شاخه دیگر اجازه دهد از reference قابل‌تغییر اصلی استفاده کند.

این بهبود یک بده‌بستان مهم مهندسی دارد. Polonius Alpha فعلاً به اندازه NLL یا بیشتر کار انجام می‌دهد؛ بنابراین تیم راست آن را روی ۱۰هزار crate دارای بیشترین دانلود در crates.io اندازه‌گیری کرده است. نتایج گزارش‌شده در این مجموعه، regressionهای قابل‌توجه نسبتاً کمی نشان می‌دهد، اما بدترین مورد مشاهده‌شده خارج از آن مجموعه، کندی ۲ تا ۳ برابری بوده است. به همین دلیل، پروژه پیش از تثبیت هم رفتار زمان کامپایل و هم درستی تحلیل را آزمایش می‌کند.

Polonius Alpha هنوز جایگزین کامل همه رفتارهای نسخه قدیمی Polonius نیست. در اطلاعیه، نمونه‌ای ارائه شده که با پیاده‌سازی قدیمی کامپایل می‌شد اما با Alpha کامپایل نمی‌شود؛ یکی از دلایل آزمایشی‌بودن این قابلیت همین است.

برای توسعه‌دهندگان، برداشت ایمن این است که Polonius Alpha را یک آزمایش سازگاری و diagnostics بدانند، نه مهاجرتی به زبان پایدار. تیم‌هایی که کدهای متکی بر lifetimeهای پیچیده دارند می‌توانند قابلیت را روی nightly امتحان کنند، diagnostics و زمان build را مقایسه کنند و regressionها را گزارش دهند. ابزارهای production باید تا زمان اعلام تصمیم تثبیت از سوی پروژه راست، روی stable بمانند.

نکته احتیاطی: Polonius Alpha فعلاً فقط در nightly عرضه شده است؛ تیم راست می‌گوید تثبیت آن برای ادامه سال ۲۰۲۶ برنامه‌ریزی شده، اما زمان‌بندی قطعی نیست. نکته احتیاطی: checker جدید هنوز می‌تواند regression عملکردی داشته باشد—در بدترین مورد گزارش‌شده تا ۲ تا ۳ برابر—و جایگزین کامل همه رفتارهای Polonius قدیمی نیست.

برچسب‌هاRustBorrow CheckerPoloniusCompiler
منابع مستند۲ مرجع
  1. [۰۱]Enabling the next iteration of the borrow checker on nightlyblog.rust-lang.org
  2. [۰۲]Stabilize and model Polonius Alpha #118github.com
خواندنی بعدی

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

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

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