منتشر شده نسخه 1.45 زبان برنامه نویسی سیستم را منتشر کرد زنگتوسط پروژه موزیلا تاسیس شد. این زبان بر مدیریت حافظه ایمن تمرکز می کند، مدیریت حافظه خودکار را فراهم می کند و ابزاری را برای دستیابی به موازی کاری بالا در عین اجتناب از استفاده از زباله جمع کن و زمان اجرا.
مدیریت خودکار حافظه Rust، برنامهنویس را از خطاها هنگام دستکاری نشانگرها نجات میدهد و از مشکلاتی که به دلیل دستکاری حافظه در سطح پایین ایجاد میشوند، مانند دسترسی به یک ناحیه حافظه پس از آزاد شدن، عدم ارجاع اشارهگرهای تهی، بیش از حد بافر و غیره محافظت میکند. برای توزیع کتابخانه ها، اطمینان از مونتاژ و مدیریت وابستگی ها، پروژه یک مدیر بسته توسعه می دهد بار، که به شما امکان می دهد کتابخانه های مورد نیاز برنامه را با یک کلیک دریافت کنید. یک مخزن برای میزبانی کتابخانه ها پشتیبانی می شود crates.io.
طولانی مدت حذف شده است نقص هنگام انجام تبدیل بین اعداد صحیح و اعداد ممیز شناور. از آنجایی که کامپایلر Rust از LLVM به عنوان باطن استفاده می کند، عملیات تبدیل نوع از طریق دستورالعمل های کد میانی LLVM مانند fptoui، که دارای یک ویژگی مهم هستند - رفتار تعریف نشده در صورتی که مقدار حاصل با نوع هدف مطابقت نداشته باشد. به عنوان مثال، هنگام تبدیل مقدار float 300 با نوع f32 به عدد صحیح نوع u8، نتیجه غیر قابل پیش بینی است و ممکن است در سیستم های مختلف متفاوت باشد. مشکل این است که این ویژگی در کدی ظاهر می شود که به عنوان "ناامن" علامت گذاری نشده است.
از Rust 1.45، رفتار سرریز اندازه نوع کاملاً تنظیم شده است، و عملیات تبدیل "as" سرریز را بررسی می کند و مقدار در حال تبدیل را به حداکثر یا حداقل مقدار نوع هدف (برای مثال بالا، مقدار 300 به 255 تبدیل می شود). برای غیرفعال کردن چنین بررسیهایی، فراخوانهای API اضافی «{f64, f32}::to_int_unchecked» ارائه میشوند که در حالت ناامن کار میکنند.
fn cast(x: f32) -> u8 {
x به عنوان u8
}
fn main() {
let too_big = 300.0;
let too_small = -100.0;
اجازه دهید nan = f32::NAN;
تثبیت شده استفاده کنید ماکروهای رویه ایعبارات، قالب ها و عبارات تابع مانند. قبلاً، چنین ماکروهایی را نمیتوان در همه جا فراخوانی کرد، بلکه فقط در بخشهای خاصی از کد (به عنوان یک تماس جداگانه، نه در هم تنیده با کدهای دیگر). گسترش روش فراخوانی ماکروها، مشابه توابع، یکی از الزامات کارکرد چارچوب وب بود. موشک در نسخه های پایدار Rust. پیش از این، دستیابی به انعطافپذیری بیشتر در تعریف هندلرها در Rocket نیازمند فعال کردن یک ویژگی آزمایشی به نام "proc_macro_hygiene" بود که در نسخههای پایدار Rust موجود نیست. این قابلیت اکنون در نسخه های پایدار زبان تعبیه شده است.
مجاز به استفاده از محدوده هایی با نوع "char" برای تکرار مقادیر در محدوده (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):
برای ch در 'a'..='z' {
print!("{}", ch);
}
println!(); // "abcdefghijklmnopqrstuvwxyz" را چاپ خواهد کرد.
بخش جدیدی از API به دسته پایدار، از جمله تثبیت شده، منتقل شده است
قوس::as_ptr،
BTreeMap::remove_entry،
Rc::as_ptr،
rc::ضعیف::as_ptr،
rc::ضعیف::from_raw،
rc::ضعیف::into_raw،
str::strip_prefix,
str::استریپ_پسوند،
همگام سازی::ضعیف::as_ptr،
همگام سازی::ضعیف::from_raw،
sync::ضعیف::into_raw،
char::UNICODE_VERSION،
Span::resolved_at,
Span::located_at,
Span::mixed_site,
unix::process::CommandExt::arg0.
کامپایلر rustc با استفاده از پرچم "target-feature"، به عنوان مثال، "-C target-feature=+avx2,+fma"، پشتیبانی از نادیده گرفتن ویژگی های مختلف پلت فرم هدف را اضافه کرده است. پرچم های جدید نیز اضافه شده است:
"اجباری-باز کردن-جدول" برای ایجاد جداول تماس باز کردن، بدون توجه به استراتژی مدیریت خرابی؛ "embed-bitcode" برای کنترل اینکه آیا بیت کد LLVM در rlib های تولید شده گنجانده شده است یا خیر. پرچم "Embed-bitcode" به طور پیش فرض در Cargo فعال است تا زمان ساخت و مصرف فضای دیسک را بهینه کند.
سطح سوم پشتیبانی برای پلتفرم های mipsel-sony-psp و thumbv7a-uwp-windows-msvc ارائه شده است. سطح سوم شامل پشتیبانی اولیه است، اما بدون آزمایش خودکار و انتشار بیلدهای رسمی.
علاوه بر این، می توان به آن اشاره کرد داستان در مورد ایجاد ساده ترین برنامه های در زبان Rust، شروع به استفاده از بوت لودر سیستم و آماده بارگیری مستقل به جای سیستم عامل.
این مقاله اولین مقاله از مجموعه ای است که به نشان دادن تکنیک هایی اختصاص داده شده است که در برنامه نویسی سطح پایین و توسعه سیستم عامل مورد تقاضا هستند.