Rust 1.45 dasturlash tilining relizi

nashr etilgan tizim dasturlash tilining 1.45 versiyasini chiqaring zang, Mozilla loyihasi tomonidan asos solingan. Til xotira xavfsizligiga e'tibor qaratadi, xotirani avtomatik boshqarishni ta'minlaydi va axlat yig'uvchidan foydalanmasdan yuqori vazifalar parallelligiga erishish uchun vositalarni taqdim etadi. ish vaqti.

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, bir marta bosish orqali dastur uchun kerakli kutubxonalarni olish imkonini beradi. Xost kutubxonalar uchun ombor qo'llab-quvvatlanadi crates.io.

asosiy yangiliklar:

  • Uzoq vaqt davomida yo'q qilingan kamchilik butun sonlar va suzuvchi nuqta raqamlari o'rtasida konvertatsiya qilishda. Rust kompilyatori LLVM dan backend sifatida foydalanganligi sababli, turdagi konvertatsiya operatsiyalari LLVM oraliq kod ko'rsatmalari orqali amalga oshirildi. fptoui, bitta muhim xususiyatga ega - agar natijada olingan qiymat maqsadli turga mos kelmasa, aniqlanmagan xatti-harakatlar. Masalan, f300 tipidagi float qiymati 32 ni butun u8 turiga o'zgartirganda, natija oldindan aytib bo'lmaydi va turli tizimlarda farq qilishi mumkin. Muammo shundaki, bu xususiyat "xavfsiz" deb belgilanmagan kodda paydo bo'ladi.

    Rust 1.45 dan boshlab, turdagi o'lchamning to'lib ketishining xatti-harakati qat'iy tartibga solinadi va "as" konvertatsiya operatsiyasi toshib ketishni tekshiradi va qiymatni maqsadli turning maksimal yoki minimal qiymatiga aylantiradi (yuqoridagi misol uchun 300 255 ga aylantiriladi). Bunday tekshiruvlarni o'chirish uchun xavfli rejimda ishlaydigan "{f64, f32}::to_int_unchecked" qo'shimcha API chaqiruvlari taqdim etiladi.

    fn cast(x: f32) -> u8 {
    x u8 sifatida
    }

    fn main() {
    let too_big = 300.0;
    let too_small = -100.0;
    let nan = f32::NAN;

    x bo'lsin: f32 = 1.0;
    ruxsat y: u8 = xavfsiz {x.to_int_unchecked()};

    println!("too_big_casted = {}", cast(juda_katta)); // chiqish 255
    println!("too_small_casted = {}", cast(juda_kichik)); // chiqish 0
    println!("not_a_number_casted = {}", cast(nan)); // chiqish 0
    }

  • Stabillashtirilgan holda foydalaning protsessual makroslarfunksiyaga o'xshash ifodalar, andozalar va bayonotlar. Ilgari, bunday makroslarni hamma joyda chaqirish mumkin emas edi, lekin faqat kodning ma'lum qismlarida (boshqa kod bilan o'zaro bog'lanmagan alohida qo'ng'iroq sifatida). Funktsiyalarga o'xshash makroslarni chaqirish usullarini kengaytirish veb-ramkaning ishlashi uchun talablardan biri edi. raketa Rustning barqaror nashrlarida. Ilgari, Rocket-da ishlov beruvchilarni aniqlashda qo'shimcha moslashuvchanlikka erishish uchun Rustning barqaror versiyalarida mavjud bo'lmagan "proc_macro_hygiene" deb nomlangan eksperimental xususiyatni yoqish kerak edi. Ushbu funktsiya endi tilning barqaror nashrlarida o'rnatilgan.
  • Diapazon qiymatlarini takrorlash uchun β€œchar” tipidagi diapazonlardan foydalanishga ruxsat berilgan (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    'a' da ch uchun..='z' {
    chop eting!("{}", ch);
    }
    println!(); // "abcdefghijklmnopqrstuvwxyz" chop etiladi

  • API-larning yangi qismi barqaror toifaga, jumladan barqarorlashtirilgan toifaga o'tkazildi
    Arc::as_ptr,
    BTreeMap::remove_entry,
    Rc::as_ptr,
    rc::Zaif ::as_ptr,
    rc::Zaif::from_raw,
    rc::Zaif ::into_raw,
    str::strip_prefiks,
    str::strip_suffix,
    sinxronlash::Zaif::as_ptr,
    sinxronlash::Zaif::from_raw,
    sync :: Weak :: into_raw,
    char::UNICODE_VERSION,
    Span::resolved_at,
    Span::location_at,
    Span::mixed_site,
    unix::process::CommandExt::arg0.

  • Rustc kompilyatori "maqsadli xususiyat" bayrog'i yordamida turli maqsadli platforma xususiyatlarini bekor qilish uchun qo'shimcha yordamni qo'shdi, masalan, "-C target-feature=+avx2,+fma". Yangi bayroqlar ham qo'shildi:
    halokatni boshqarish strategiyasidan qat'i nazar, chaqiruv jadvallarini ochish uchun "force-unwind-tables"; LLVM bitkodi yaratilgan rliblarga kiritilganligini nazorat qilish uchun "embed-bitcode". "Embed-bitcode" bayrog'i yuk tashishda sukut bo'yicha yoqilgan bo'lib, qurilish vaqtini optimallashtirish va disk maydonini sarflaydi.

  • Uchinchi darajali qo'llab-quvvatlash mipsel-sony-psp va thumbv7a-uwp-windows-msvc platformalari uchun taqdim etildi. Uchinchi daraja asosiy qo'llab-quvvatlashni o'z ichiga oladi, lekin avtomatlashtirilgan sinov va rasmiy tuzilmalarni nashr etmasdan.

Bundan tashqari, buni ta'kidlash mumkin hikoya eng oddiyini yaratish haqida ilovalar Rust tilida tizim yuklash vositasidan foydalanishni boshlash va operatsion tizim o'rniga mustaqil yuklashga tayyor.
Maqola past darajadagi dasturlash va operatsion tizimni ishlab chiqishda talab qilinadigan texnikalarni namoyish etishga bag'ishlangan seriyadagi birinchi maqoladir.

Manba: opennet.ru

a Izoh qo'shish