انتشار زبان برنامه نویسی Rust 1.47

نسخه 1.47 زبان برنامه نویسی Rust System که توسط پروژه موزیلا تاسیس شده است منتشر شد. این زبان بر ایمنی حافظه تمرکز می کند، مدیریت خودکار حافظه را فراهم می کند و ابزاری را برای دستیابی به موازی کاری بالا بدون استفاده از جمع آوری زباله یا زمان اجرا فراهم می کند (زمان اجرا به مقدار اولیه اولیه و نگهداری کتابخانه استاندارد کاهش می یابد).

مدیریت خودکار حافظه Rust خطاها را هنگام دستکاری نشانگرها حذف می کند و در برابر مشکلات ناشی از دستکاری حافظه در سطح پایین، مانند دسترسی به یک منطقه حافظه پس از آزاد شدن، عدم ارجاع اشاره گر تهی، بیش از حد بافر و غیره محافظت می کند. برای توزیع کتابخانه ها، اطمینان از مونتاژ و مدیریت وابستگی ها، این پروژه در حال توسعه مدیر بسته بار است. مخزن crates.io برای میزبانی کتابخانه ها پشتیبانی می شود.

نوآوری های اصلی:

  • پشتیبانی از صفات برای آرایه هایی با اندازه دلخواه اجرا شد. پیش از این، به دلیل ناتوانی در تعریف توابع عمومی برای همه مقادیر صحیح، کتابخانه استاندارد فقط برای آرایه‌هایی تا اندازه 32 عنصر پشتیبانی از ویژگی داخلی ارائه می‌کرد (ویژگی‌ها برای هر اندازه به صورت ایستا تعریف شده بودند). به لطف ایجاد قابلیت const generic، امکان تعریف توابع عمومی برای هر اندازه آرایه فراهم شد، اما آنها هنوز در ویژگی های پایدار زبان گنجانده نشده اند، اگرچه در کامپایلر پیاده سازی شده اند و اکنون در کتابخانه استاندارد استفاده می شوند. برای انواع آرایه با هر اندازه
    به عنوان مثال، ساختار زیر در Rust 1.47 محتویات یک آرایه را چاپ می کند، اگرچه قبلاً منجر به خطا می شد:

fn main() {
اجازه دهید xs = [0; 34]؛
println!("{:?}"، xs);
}

  • خروجی ارائه شده از ردیابی های کوتاهتر (بک ردیابی)، خروجی در شرایط اضطراری. عناصری که در بیشتر موقعیت ها مورد توجه نیستند، اما خروجی را به هم می ریزند و توجه را از علل اولیه مشکل منحرف می کنند، از ردیابی حذف می شوند. برای برگرداندن یک ردیابی کامل، می توانید از متغیر محیطی "RUST_BACKTRACE=full" استفاده کنید. مثلا برای کد

fn main() {
وحشت!()؛
}

قبلاً ردیابی در 23 مرحله خروجی می شد ، اما اکنون به 3 مرحله کاهش می یابد و به شما امکان می دهد فوراً ماهیت را درک کنید:

thread 'main' در 'explicit panic' دچار وحشت شد، src/main.rs:2:5
پشته پشته:
0: std::panicking::begin_panic
در /rustc/d…d75a/library/std/src/panicking.rs:497
1: زمین بازی:: اصلی
در ./src/main.rs:2
2: هسته::ops::function::FnOnce::call_once
در /rustc/d…d75a/library/core/src/ops/function.rs:227

  • کامپایلر rustc برای ساخت با استفاده از LLVM 11 به روز شده است (Rust از LLVM به عنوان پشتیبان برای تولید کد استفاده می کند). در عین حال، قابلیت ساخت با LLVM قدیمی تا نسخه 8 حفظ شده است، اما به طور پیش فرض (در پروژه rust-lang/llvm) اکنون از LLVM 11 استفاده می شود. انتظار می رود که LLVM 11 در آینده منتشر شود. روزها.
  • در پلتفرم ویندوز، کامپایلر rustc از فعال کردن بررسی یکپارچگی جریان کنترل (Control Flow Guard) پشتیبانی می‌کند، که با استفاده از پرچم "-C control-flow-guard" فعال می‌شود. در سایر پلتفرم ها این پرچم در حال حاضر نادیده گرفته می شود.
  • بخش جدیدی از API به دسته پایدار منتقل شده است، از جمله تثبیت شده Ident::new_raw، Range::is_empty، RangeInclusive::is_empty، Result::as_deref، Result::as_deref_mut، Vec::leak، اشاره گر::offset_from ، f32:: TAU و f64::TAU.
  • ویژگی "const" که امکان استفاده از آن را در هر زمینه ای به جای ثابت ها تعیین می کند، در روش های زیر استفاده می شود:
    • جدید برای همه اعداد صحیح غیر از صفر؛
    • checked_add، checked_sub، checked_mul، checked_neg، checked_shl، checked_shr، saturating_add، saturating_sub و saturating_mul برای همه اعداد صحیح.
    • is_ascii_alphabetic، is_ascii_uppercase، is_ascii_widecase، is_ascii_alphanumeric، is_ascii_digit، is_ascii_hexdigit، is_ascii_punctuation، is_ascii_graphic، is_ascii_whitespace و is_control for انواع.
  • برای FreeBSD، از جعبه ابزار FreeBSD 11.4 استفاده می شود (FreeBSD 10 از LLVM 11 پشتیبانی نمی کند).

گرفته شده از opennet.ru

منبع: linux.org.ru

اضافه کردن نظر