Rust 1.66 dasturlash tilining relizi

Mozilla loyihasi tomonidan asos solingan, ammo hozirda Rust Foundation mustaqil notijorat tashkiloti homiyligida ishlab chiqilgan Rust 1.66 umumiy maqsadli dasturlash tilining nashri chop etildi. Til xotira xavfsizligiga e'tibor qaratadi va axlat yig'uvchi va ish vaqtidan foydalanishdan qochgan holda yuqori ish parallelligiga erishish vositalarini taqdim etadi (ish vaqti standart kutubxonani asosiy ishga tushirish va texnik xizmat ko'rsatishga qisqartiriladi).

Rust-ning xotira bilan ishlash usullari ishlab chiquvchini ko'rsatkichlarni boshqarishda xatolardan qutqaradi va past darajadagi xotira bilan ishlash natijasida yuzaga keladigan muammolardan himoya qiladi, masalan, bo'shatilgandan so'ng xotira maydoniga kirish, null ko'rsatkichlarni o'chirish, buferni ortiqcha yuklash va hokazo. Kutubxonalarni tarqatish, qurishni ta'minlash va bog'liqliklarni boshqarish uchun loyiha Cargo paketi menejerini ishlab chiqadi. Crates.io ombori kutubxonalarni joylashtirish uchun qo'llab-quvvatlanadi.

Xotira xavfsizligi Rust-da kompilyatsiya vaqtida mos yozuvlarni tekshirish, ob'ektga egalik qilish, ob'ektning ishlash muddatini (ko'lamini) kuzatib borish va kodni bajarish paytida xotiraga kirishning to'g'riligini baholash orqali ta'minlanadi. Rust shuningdek, butun sonlarning to'lib ketishidan himoya qiladi, ishlatishdan oldin o'zgaruvchan qiymatlarni majburiy ishga tushirishni talab qiladi, standart kutubxonada xatolarni yaxshiroq boshqaradi, sukut bo'yicha o'zgarmas havolalar va o'zgaruvchilar tushunchasini qo'llaydi, mantiqiy xatolarni minimallashtirish uchun kuchli statik yozishni taklif qiladi.

Asosiy innovatsiyalar:

  • Butun son ko'rinishlari bo'lgan ro'yxatlarda ("#[repr(Int)]" atributi), hatto sanabda maydonlar mavjud bo'lsa ham, diskriminantning aniq ko'rsatilishiga ruxsat beriladi. #[repr(u8)] enum Foo { A(u8), # diskriminant 0 B(i8), # diskriminant 1 C(bool) = 42, # diskriminant 42 }
  • Qo'shilgan funktsiya yadrosi::hint::black_box, bu oddiygina qabul qilingan qiymatni qaytaradi. Kompilyator bu funktsiya biror narsa qilmoqda deb o'ylaganligi sababli, black_box funksiyasidan kod ishlashi testini o'tkazishda yoki yaratilgan mashina kodini tekshirishda tsikllar uchun kompilyatorni optimallashtirishni o'chirish uchun foydalanish mumkin (shuning uchun kompilyator kodni foydalanilmagan deb hisoblamaydi va uni olib tashlamaydi). Masalan, quyidagi misolda black_box(v.as_ptr()) kompilyator v vektor ishlatilmayapti deb o'ylashiga yo'l qo'ymaydi. std :: hint :: black_box dan foydalaning; fn push_cap(v: &mut Vec) { i uchun 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • "Yuk" paket menejeri "o'chirish" buyrug'ini taklif qiladi, bu sizga buyruq satridan Cargo.toml manifestidagi bog'liqliklarni olib tashlash imkonini beradi.
  • APIning yangi qismi barqaror toifaga ko'chirildi, shu jumladan xususiyatlarning usullari va amalga oshirilishi barqarorlashtirildi:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{birinchi, oxirgi, pop_birinchi, pop_oxirgi}
    • BTreeMap::{birinchi_kalit_qiymati, oxirgi_kalit_qiymati, birinchi_yozuv, oxirgi_yozuv, ochilgan_birinchi, ochilgan_oxirgi}
    • WASI dan foydalanganda stdio qulflash turlari uchun AsFd ilovalarini qo'shing.
    • impl TryFrom > Box<[T uchun; N]>
    • yadro :: maslahat :: qora quti
    • Davomiyligi::try_from_secs_{f32,f64}
    • Variant :: ZIP ochish
    • std::os::fd
  • Shablonlarda "..X" va "..=X" diapazonlariga ruxsat berilgan.
  • Rustc kompilyatorining old qismini va LLVM backendini qurishda, natijada olingan kodning ishlashini oshirish va xotira sarfini kamaytirish uchun LTO (Link Time Optimization) va BOLT (Binary Optimization and Layout Tool) optimallashtirish rejimlaridan foydalaniladi.
  • Armv5te-none-eabi va thumbv5te-none-eabi platformalari uchun XNUMX-darajani qoΚ»llab-quvvatlash amalga oshirildi. Uchinchi daraja asosiy qo'llab-quvvatlashni nazarda tutadi, lekin avtomatlashtirilgan testlarsiz, rasmiy tuzilmalarni nashr etish va kodni yaratish qobiliyatini tekshirish.
  • MacOS umumiy kutubxonalariga ulanish uchun qoΚ»shimcha yordam.

Bundan tashqari, biz Rust tilining (gccrs) oldingi kompilyatorining GCC kod bazasiga kiritilganligini ta'kidlashimiz mumkin. Frontend 13 yil may oyida chiqariladigan GCC 2023 filialiga kiritilgan. GCC 13 dan boshlab, standart GCC asboblar to'plamidan Rust dasturlarini kompilyatsiya qilish uchun LLVM ishlanmalari yordamida qurilgan rustc kompilyatorini o'rnatmasdan foydalanish mumkin bo'ladi. GCC 13 da Rust ilovasi beta holatida bo'ladi, sukut bo'yicha yoqilmaydi.

Manba: opennet.ru

a Izoh qo'shish