انتشار زبان برنامه نویسی همه منظوره Rust 1.58 که توسط پروژه موزیلا تأسیس شده است، اما اکنون تحت نظارت سازمان غیرانتفاعی مستقل Rust Foundation توسعه یافته است، منتشر شده است. این زبان بر ایمنی حافظه تمرکز می کند، مدیریت خودکار حافظه را فراهم می کند و ابزاری را برای دستیابی به موازی کاری بالا بدون استفاده از جمع آوری زباله یا زمان اجرا فراهم می کند (زمان اجرا به مقدار اولیه اولیه و نگهداری کتابخانه استاندارد کاهش می یابد).
مدیریت خودکار حافظه Rust خطاها را هنگام دستکاری نشانگرها حذف می کند و از مشکلات ناشی از دستکاری حافظه در سطح پایین، مانند دسترسی به یک منطقه حافظه پس از آزاد شدن، عدم ارجاع اشاره گر تهی، بیش از حد بافر و غیره محافظت می کند. برای توزیع کتابخانه ها، اطمینان از مونتاژ و مدیریت وابستگی ها، این پروژه در حال توسعه مدیر بسته بار است. مخزن crates.io برای میزبانی کتابخانه ها پشتیبانی می شود.
نوآوری های اصلی:
- در بلوکهای قالببندی خط، علاوه بر توانایی قبلی برای جایگزینی متغیرهایی که به صراحت پس از یک خط بر اساس شماره و نام فهرست شدهاند، امکان جایگزینی شناسههای دلخواه با افزودن عبارت «{identifier}» به خط اجرا میشود. به عنوان مثال: // ساختارهای پشتیبانی شده قبلی: println!("Hello, {}!", get_person()); println!("سلام، {0}!"، get_person()); println!("سلام، {person}!"، person = get_person()); // اکنون می توانید let person = get_person(); println!("سلام، {شخص}!");
شناسه ها همچنین می توانند مستقیماً در گزینه های قالب بندی مشخص شوند. let (عرض، دقت) = get_format(); برای (نام، امتیاز) در get_scores() { println!("{name}: {score:width$.precision$}"); }
جایگزینی جدید در همه ماکروهایی کار می کند که از تعریف قالب رشته پشتیبانی می کنند، به استثنای ماکرو "panic!". در نسخههای 2015 و 2018 زبان Rust، که در آن وحشت!("{ident}") به عنوان یک رشته معمولی در نظر گرفته میشود (در Rust 2021 جایگزینی کار میکند).
- رفتار std::process:: ساختار فرمان در پلتفرم ویندوز تغییر کرده است به طوری که هنگام اجرای دستورات، به دلایل امنیتی، دیگر به دنبال فایل های اجرایی در فهرست فعلی نمی گردد. دایرکتوری فعلی مستثنی است زیرا اگر برنامهها در دایرکتوریهای نامعتبر اجرا شوند (CVE-2021-3013) میتوان از آن برای اجرای کدهای مخرب استفاده کرد. منطق تشخیص اجرایی جدید شامل جستجو در دایرکتوری های Rust، دایرکتوری برنامه، دایرکتوری سیستم ویندوز و دایرکتوری های مشخص شده در متغیر محیطی PATH است.
- کتابخانه استاندارد تعداد توابع علامت گذاری شده با "#[must_use]" را افزایش داده است تا در صورت نادیده گرفتن مقدار بازگشتی، اخطاری صادر کند، که به شناسایی خطاهای ناشی از این فرض که یک تابع به جای برگرداندن یک مقدار جدید، مقادیر را تغییر می دهد، کمک می کند.
- بخش جدیدی از API به دسته پایدار منتقل شده است، از جمله روش ها و اجرای صفات تثبیت شده اند:
- فراداده::is_symlink
- مسیر::is_symlink
- {integer}::saturating_div
- گزینه::unwrap_unchecked
- نتیجه::unwrap_unchecked
- نتیجه::unwrap_err_unchecked
- ویژگی "const" که امکان استفاده از آن را در هر زمینه ای به جای ثابت ها تعیین می کند، در توابع استفاده می شود:
- مدت زمان::جدید
- مدت زمان::checked_add
- مدت زمان::saturating_add
- مدت زمان::checked_sub
- Duration::saturating_sub
- مدت زمان::checked_mul
- مدت زمان::saturating_mul
- مدت زمان::checked_div
- عدم ارجاع نشانگرهای "*const T" در زمینه های "const" مجاز است.
- در مدیریت بسته بار، قسمت rust_version به فراداده بسته و گزینه «--message-format» به دستور «cargo install» اضافه شده است.
- کامپایلر از مکانیزم حفاظتی CFI (Control Flow Integrity) پشتیبانی میکند، که چکهایی را قبل از هر فراخوانی غیرمستقیم اضافه میکند تا برخی از اشکال رفتار تعریفنشده را شناسایی کند که به طور بالقوه میتواند منجر به نقض دستور اجرای عادی (جریان کنترل) در نتیجه اعمال شود. استفاده از اکسپلویت هایی که نشانگرهای ذخیره شده در حافظه را روی توابع تغییر می دهند.
- کامپایلر پشتیبانی از نسخه های 5 و 6 فرمت مقایسه پوشش LLVM را اضافه کرده است که برای ارزیابی پوشش کد در طول آزمایش استفاده می شود.
- در کامپایلر، الزامات حداقل نسخه LLVM به LLVM 12 افزایش یافته است.
- سومین سطح پشتیبانی از پلتفرم x86_64-unknown-none پیاده سازی شده است. سطح سوم شامل پشتیبانی اولیه است، اما بدون آزمایش خودکار، انتشار بیلدهای رسمی یا بررسی اینکه آیا کد قابل ساخت است یا خیر.
علاوه بر این، ما میتوانیم به انتشار کتابخانههای Rust برای ویندوز 0.30 توسط مایکروسافت اشاره کنیم که به شما امکان میدهد از زبان Rust برای توسعه برنامههای کاربردی برای سیستم عامل ویندوز استفاده کنید. این مجموعه شامل دو بسته جعبه (windows و windows-sys) است که از طریق آنها می توانید به Win API در برنامه های Rust دسترسی داشته باشید. کد برای پشتیبانی API به صورت پویا از ابرداده توصیفکننده API تولید میشود، که به شما امکان میدهد نه تنها برای تماسهای Win API موجود، بلکه برای تماسهایی که در آینده ظاهر میشوند، پشتیبانی را اجرا کنید. نسخه جدید از پلتفرم هدف UWP (پلتفرم ویندوز جهانی) پشتیبانی می کند و انواع Handle و Debug را پیاده سازی می کند.
منبع: opennet.ru