حلکنندهٔ تریت جدید Rust، آزمون سازگاری شبانه برای کانسترهای ICP است
حلکنندهٔ نسل جدید تریت در Rust اکنون بهصورت پیشفرض در کانال nightly فعال است. برای سازندگان ICP، نکتهٔ اصلی یک قابلیت فوری در نسخهٔ پایدار نیست؛ بلکه فرصتی است برای آزمودن کدهای عمومی، async و مبتنی بر تریت در برابر مدل کامپایلریای که Rust قصد دارد پایدار کند.

حلکنندهٔ نسل جدید تریت در Rust از یک مرز مهم عبور کرده است: پس از نزدیک به چهار سال توسعه، اکنون بهصورت پیشفرض در کانال nightly فعال شده است. تیم Rust میگوید این پیادهسازی قرار است شیوهٔ اثبات where-clauseها، نرمالسازی نوعهای وابسته و بخشهای مرتبط با سیستم نوع را در کامپایلر جایگزین کند. پایدارسازی آن برای ماههای آینده برنامهریزی شده، اما این تغییر همچنان صراحتاً یک آزمایش در nightly است.
برای سازندگان ICP، این خبر بیشتر یک تمرین سازگاری است تا دستوری برای ارتقا. کانسترهای Rust در ICP اغلب به رابطهای عمومی، نوعهای وابسته، انتزاعهای async و crateهای میانافزار متکی هستند. همین بخشها میتوانند با مدل متفاوت حل تریت، یک باگ واقعی کامپایلر، یک فرض قدیمی دربارهٔ استنتاج نوع، یا کدی را آشکار کنند که به رفتاری متکی بوده است که پروژه دیگر نمیخواهد حفظ کند.
تیم Rust چند تغییر عملی را برجسته میکند. نوعهای مبهم، از جمله impl Trait در جایگاه بازگشت و کارهای آینده پیرامون Type Alias impl Trait و Return Type Notation، اکنون به شکل متفاوتی مدیریت میشوند. حلکنندهٔ جدید همچنین شیوهٔ استدلال دربارهٔ نوعهای وابسته در نوعهای دارای کرانهای مرتبهبالا مانند for<'a> را تغییر میدهد. نتیجه میتواند استنتاج بهتر باشد، اما ممکن است کدی را که حلکنندهٔ قدیمی بهاشتباه پذیرفته بود، به خطا تبدیل کند.
تیم کامپایلر اثرات شناختهشده را در یک issue عمومی GitHub پیگیری میکند. این issue در حال حاضر crateهای تحتتأثیر را ثبت کرده و میگوید generic_const_exprs با حلکنندهٔ جدید پشتیبانی نمیشود؛ crateهایی که از آن استفاده میکنند موقتاً با هشدار به حلکنندهٔ قدیمی برمیگردند. این نکته برای تیمهای کانستر مهم است: موفقیت در nightly ثابت نمیکند گراف وابستگی برای پایدارسازی آماده است، و شکست در nightly هم لزوماً به معنای اشتباه بودن برنامه نیست.
کارایی دلیل دیگری برای آزمودن سنجیده است. اعلامیهٔ Rust میگوید تیم، دو پیادهسازی را روی ۲۰٬۰۰۰ crate برتر crates.io مقایسه کرده است. بیشتر crateهای بررسیشده رفتار تقریباً مشابهی داشتند، اما برخی workloadهای سنگین از نظر تریت در هر دو جهت تغییر چشمگیر نشان دادند. تیم DataFusion را مثال میزند که با حلکنندهٔ جدید بیش از هشت برابر سریعتر کامپایل میشود، در حالی که تأکید دارد کار بهینهسازی هنوز ادامه دارد.
یک روند منطقی برای ICP، افزودن یک job غیرمسدودکنندهٔ nightly برای کانسترهای نماینده و وابستگیهای workspace آنهاست. toolchain پایدار را gate انتشار نگه دارید و از nightly برای ثبت سه شاخص استفاده کنید: موفقیت کامپایل، تغییر زمان کامپایل و کیفیت پیامهای خطا. ابتدا crateهایی را آزمایش کنید که تریتهای سرویس عمومی، wrapperهای مرتبط با Candid، کد async یا نوعهای وابستهٔ پیچیده را به کار میگیرند. هنگام مشاهدهٔ خطا، پیش از تغییر منطق برنامه issue پیگیری Rust را بررسی کنید و در صورت امکان نمونه را به یک reproducer کوچک کاهش دهید.
ارزش فوری این تغییر، افزایش دید است. تیمهای ICP میتوانند بفهمند آیا فرضهای سطح نوع در یک کانستر با کامپایلری که Rust در حال آمادهسازی آن است همراستا هستند یا نه، و همزمان buildهای production را روی Rust پایدار نگه دارند. حلکنندهٔ نسل جدید هنوز وعدهٔ سازگاری پایدار نیست—و تیم Rust صراحتاً هشدار میدهد کاربران nightly ممکن است با شکستهای غیرجزئی، پیامهای خطای ضعیفتر یا پسرفت زمانی کامپایل روبهرو شوند—اما اکنون یک کانال هشدار زودهنگام عملی برای زیرساخت کانسترهای Rust-based است.
خبرخوان را در ایمیل بگیرید
هر سیگنال تازه، مستقیم از خط تولید. بدون مزاحمت، لغو عضویت در هر زمان.


