انتشار زبان برنامه نویسی همه منظوره Rust 1.67 که توسط پروژه موزیلا تأسیس شده است، اما اکنون تحت نظارت سازمان غیرانتفاعی مستقل Rust Foundation توسعه یافته است، منتشر شده است. این زبان بر ایمنی حافظه تمرکز میکند و ابزاری را برای دستیابی به موازی کاری بالا در عین اجتناب از استفاده از جمعآوری زباله و زمان اجرا فراهم میکند (زمان اجرا به مقدار اولیه اولیه و نگهداری کتابخانه استاندارد کاهش مییابد).
روشهای مدیریت حافظه Rust، توسعهدهنده را از خطا در هنگام دستکاری اشارهگرها نجات میدهد و از مشکلاتی که به دلیل مدیریت سطح پایین حافظه ایجاد میشود، محافظت میکند، مانند دسترسی به یک ناحیه حافظه پس از آزاد شدن، عدم ارجاع اشارهگرهای تهی، بیش از حد بافر و غیره. برای توزیع کتابخانه ها، ارائه ساخت و مدیریت وابستگی ها، این پروژه مدیر بسته Cargo را توسعه می دهد. مخزن crates.io برای میزبانی کتابخانه ها پشتیبانی می شود.
ایمنی حافظه در Rust در زمان کامپایل از طریق بررسی مرجع، پیگیری مالکیت شیء، پیگیری طول عمر شی (scopes) و ارزیابی صحت دسترسی به حافظه در طول اجرای کد ارائه می شود. Rust همچنین محافظت در برابر سرریز اعداد صحیح را فراهم می کند، به متغیرها نیاز دارد که قبل از استفاده مقداردهی اولیه شوند، خطاها را در کتابخانه استاندارد بهتر مدیریت می کند، مفهوم مراجع و متغیرهای غیرقابل تغییر را به طور پیش فرض اعمال می کند، و تایپ ثابت قوی برای به حداقل رساندن خطاهای منطقی ارائه می دهد.
نوآوری های اصلی:
- برای توابع ناهمگام با Future::Output، اکنون می توان حاشیه نویسی "#[must_use]" را مشخص کرد که در صورت نادیده گرفتن مقدار بازگشتی، هشداری را در بر می گیرد، که به شناسایی خطاهای ناشی از این فرض که تابع مقادیر را تغییر می دهد کمک می کند. به جای بازگشت یک مقدار جدید #[must_use] async fn bar() -> u32 { 0} async fn caller() { bar().await; } warning: خروجی استفاده نشده آینده توسط 'bar' برگردانده می شود که باید استفاده شود —> src/lib.rs:5:5 | 5 | bar().wait; | ^^^^^^^^^^^ | = توجه: «#[warn(unused_must_use)]» به طور پیشفرض روشن است
- اجرای صف های FIFO std::sync::mpsc (تک مصرف کننده چند تولید کننده) به روز شده است که با حفظ API قبلی به استفاده از ماژول crossbeam-channel تغییر یافته است. پیاده سازی جدید با حل تعدادی از مشکلات، عملکرد بالاتر و نگهداری کد ساده متمایز می شود.
- بخش جدیدی از API به دسته پایدار منتقل شده است، از جمله روش ها و اجرای صفات تثبیت شده اند:
- {integer}::checked_ilog
- {integer}::checked_ilog2
- {integer}::checked_ilog10
- {integer}::ilog
- {integer}::ilog2
- {integer}::ilog10
- NonZeroU*::ilog2
- NonZeroU*::ilog10
- NonZero*::BITS
- ویژگی "const" که امکان استفاده از آن را در هر زمینه ای به جای ثابت ها تعیین می کند، در توابع استفاده می شود:
- char::from_u32
- char::from_digit
- char::to_digit
- هسته::char::from_u32
- هسته::char::from_digit
- سومین سطح پشتیبانی برای استفاده از Rust در هسته لینوکس (linuxkernel)، و همچنین برای Sony PlayStation 1 (mipsel-sony-psx)، PowerPC با AIX (powerpc64-ibm-aix)، QNX Neutrino RTOS ( aarch64-unknown-nto-) پلتفرم های qnx710، x86_64-pc-nto-qnx710). سطح سوم شامل پشتیبانی اولیه است، اما بدون آزمایش خودکار، انتشار بیلدهای رسمی و تأیید قابلیت ساخت کد.
علاوه بر این، میتوانیم به انتشار وصلههایی توسط ARM اشاره کنیم که به استفاده از زبان Rust برای توسعه درایورها و ماژولهای هسته لینوکس مونتاژ شده برای سیستمهای مبتنی بر معماری AArch64 اجازه میدهند.
منبع: opennet.ru