Rust 1.47 dasturlash tilining relizi

nashr etilgan tizim dasturlash tilining 1.47 versiyasini chiqaring zang, Mozilla loyihasi tomonidan asos solingan. Til xotira xavfsizligiga e'tibor qaratadi, xotirani avtomatik boshqarishni ta'minlaydi va foydalanmasdan yuqori vazifa parallelligiga erishish uchun vositani taqdim etadi axlat yig'uvchi ΠΈ ish vaqti (ish vaqti standart kutubxonani asosiy ishga tushirish va texnik xizmat ko'rsatishga qadar qaynatiladi).

Rust-ning avtomatik xotira boshqaruvi ko'rsatkichlarni boshqarishda xatolarni yo'q qiladi va past darajadagi xotira manipulyatsiyasi natijasida kelib chiqadigan muammolardan himoya qiladi, masalan, bo'shatilgandan so'ng xotira hududiga kirish, null ko'rsatkichni yo'qotish, buferni haddan tashqari oshirib yuborish va hokazo. Kutubxonalarni tarqatish, yig'ishni ta'minlash va loyiha tomonidan bog'liqliklarni boshqarish uchun paket menejeri ishlab chiqilmoqda. yuk. Xost kutubxonalar uchun ombor qo'llab-quvvatlanadi crates.io.

asosiy yangiliklar:

  • Turlarni qo'llab-quvvatlash amalga oshirildi massivlar har qanday o'lcham. Ilgari, barcha butun qiymatlar uchun umumiy funktsiyalarni aniqlashning imkoni yo'qligi sababli, standart kutubxona faqat o'lchamdagi 32 elementgacha bo'lgan massivlar uchun o'rnatilgan xususiyatlarni qo'llab-quvvatlagan (har bir o'lcham uchun belgilar statik ravishda aniqlangan). Doimiy generiklarning ("const generics") funksionalligini yaratish tufayli har qanday massiv o'lchami uchun umumiy funktsiyalarni aniqlash mumkin bo'ldi, ammo ular hali ham barqaror til xususiyatlariga kiritilmagan, garchi ular kompilyatorda amalga oshirilgan va mavjud bo'lsa ham. hozir jalb qilingan har qanday o'lchamdagi massiv belgilari uchun standart kutubxonada.

    Masalan, Rust 1.47 da quyidagi konstruksiya massiv mazmunini chop etadi, garchi ilgari u xatoga olib kelgan boβ€˜lsa ham:

    fn main() {
    xs = [0; 34];

    println!("{:?}", xs);
    }

  • Qisqa izlarning chiqishi (backtrace), favqulodda vaziyatlarda chiqishi ta'minlangan. Aksariyat vaziyatlarda qiziqish uyg'otmaydigan, lekin chiqishni chalg'itadigan va muammoning asosiy sabablaridan e'tiborni chalg'itadigan elementlar izdan chiqarib tashlanadi. ToΚ»liq izni qaytarish uchun β€œRUST_BACKTRACE=full” muhit oΚ»zgaruvchisidan foydalanishingiz mumkin. Masalan, kod uchun

    fn main() {
    vahima!();
    }

    Ilgari iz 23 bosqichda chiqarilgan bo'lsa, endi u qisqartiriladi
    Mohiyatni darhol anglash imkonini beruvchi 3 qadam:

    "main" mavzui "aniq vahima" da vahimaga tushdi, src/main.rs:2:5
    stack backtrace:
    0: std::vahima::begin_panic
    /rustc/d…d75a/library/std/src/panicking.rs:497 manzilida
    1: o'yin maydonchasi :: asosiy
    ./src/main.rs: 2 da
    2: core::ops::function::FnOnce::call_once
    /rustc/d…d75a/library/core/src/ops/function.rs:227 manzilida

  • Rustc kompilyatori yordamida qurish uchun yangilangan LLVM 11 (Rast ispolzet LLVM uchun backend sifatida kod ishlab chiqarish). Shu bilan birga, eski LLVM-lar bilan 8-versiyagacha qurish imkoniyati saqlanib qoladi, lekin sukut bo'yicha (da rust-lang/llvm-loyihasi) hozir LLVM 11 dan foydalanmoqda. LLVM 11 yaqin kunlarda chiqarilishi kutilmoqda.
  • Windows platformasida rustc kompilyatori "-C control-flow-guard" bayrog'i yordamida faollashtirilgan boshqaruv oqimining yaxlitligini tekshirishni (Control Flow Guard) yoqishni qo'llab-quvvatlaydi. Boshqa platformalarda bu bayroq hozircha e'tiborga olinmaydi.
  • API-larning yangi qismi barqaror toifaga, jumladan barqarorlashtirilgan toifaga o'tkazildi
    Ident::new_raw,
    Range::is_empty,
    RangeInclusive::is_empty,
    Natija::as_deref,
    Natija::as_deref_mut,
    Vec :: oqish,
    ko'rsatgich::offset_from,
    f32::TAU va
    f64::TAU.

  • Konstantalar o'rniga uni istalgan kontekstda ishlatish imkoniyatini belgilovchi "const" atributi usullarda qo'llaniladi:
    • noldan boshqa barcha butun sonlar uchun yangi;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub va saturating_mul barcha butun sonlar uchun;
    • is_ascii_alphabetic, is_ascii_upppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punktuation, is_ascii_graphic, is_ascii_whitescirrol va iscontrol char8 va.
  • FreeBSD uchun jalb qilingan FreeBSD 11.4 dan asboblar to'plami (FreeBSD 10 LLVM 11 ni qo'llab-quvvatlamaydi).

Manba: opennet.ru

a Izoh qo'shish