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

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

مدیریت خودکار حافظه 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 (زنگ استفاده می کند LLVM به عنوان یک Backend برای تولید کد). در عین حال، توانایی ساخت با LLVM های قدیمی، تا نسخه 8، حفظ می شود، اما به طور پیش فرض (در پروژه rust-lang/llvm) اکنون از LLVM 11 استفاده می کند. انتظار می رود LLVM 11 در روزهای آینده منتشر شود.
  • در پلتفرم ویندوز، کامپایلر rustc از فعال کردن بررسی یکپارچگی جریان کنترل (Control Flow Guard) پشتیبانی می کند که با استفاده از پرچم "-C control-flow-guard" فعال می شود. در سایر پلتفرم ها این پرچم در حال حاضر نادیده گرفته می شود.
  • بخش جدیدی از API به دسته پایدار، از جمله تثبیت شده، منتقل شده است
    شناسه::new_raw،
    محدوده::is_empty،
    RangeInclusive::is_empty،
    نتیجه::as_deref,
    نتیجه::as_deref_mut،
    Vec::نشت،
    اشاره گر::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

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