Rust 1.47 dasturlash tilining relizi

Mozilla loyihasi tomonidan asos solingan Rust tizimi dasturlash tilining 1.47 versiyasi chop etildi. Til xotira xavfsizligiga e'tibor qaratadi, xotirani avtomatik boshqarishni ta'minlaydi va axlat yig'uvchi yoki ish vaqtini ishlatmasdan yuqori vazifalar parallelligiga erishish vositalarini taqdim etadi (ish vaqti standart kutubxonani asosiy ishga tushirish va texnik xizmat ko'rsatishga qisqartiriladi).

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 bog'liqliklarni boshqarish uchun loyiha Cargo paketi menejerini ishlab chiqmoqda. Crates.io ombori kutubxonalarni joylashtirish uchun qo'llab-quvvatlanadi.

Asosiy innovatsiyalar:

  • Ixtiyoriy o'lchamdagi massivlar uchun xususiyatlarni qo'llab-quvvatlash amalga oshirildi. 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). Const generics funksionalligini yaratish tufayli har qanday massiv oʻlchami uchun umumiy funksiyalarni aniqlash mumkin boʻldi, lekin ular hali tilning barqaror xususiyatlariga kiritilmagan, garchi ular kompilyatorda amalga oshirilgan va hozirda standart kutubxonada qoʻllanilmoqda. har qanday o'lchamdagi massiv turlari uchun.
    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 3 bosqichga qisqartiriladi, bu sizga mohiyatni darhol tushunishga imkon beradi:

"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 LLVM 11 yordamida qurish uchun yangilandi (Rust LLVM-dan kod yaratish uchun backend sifatida foydalanadi). Shu bilan birga, eski LLVM bilan 8-versiyagacha qurish imkoniyati saqlanib qolgan, ammo sukut bo'yicha (rust-lang/llvm-project-da) LLVM 11 hozirda qo'llaniladi.Yaqinda LLVM 11-ning chiqarilishi kutilmoqda. kunlar.
  • 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.
  • APIning yangi qismi barqaror toifaga oʻtkazildi, jumladan barqarorlashtirilgan Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::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 FreeBSD 11.4 asboblar to'plami ishlatiladi (FreeBSD 10 LLVM 11ni qo'llab-quvvatlamaydi).

Qabul qilingan opennet.ru

Manba: linux.org.ru

a Izoh qo'shish