Rust 1.42 dasturlash tilining relizi

nashr etilgan tizim dasturlash tilini chiqarish Pas 1.42, 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 ishlab chiquvchini ko'rsatgichlarni manipulyatsiya qilishdan ozod qiladi va past darajadagi xotira manipulyatsiyasi natijasida kelib chiqadigan muammolardan himoya qiladi, masalan, bo'sh xotiradan keyin foydalanish, null ko'rsatkichni yo'qotish, buferni haddan tashqari oshirib yuborish va boshqalar. 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:

  • Qo'shilgan tilim qismlarini moslashtirish uchun shablonlarni qo'llab-quvvatlash (dinamik massivlar, tilim). Ilgari aniq mosliklarga ruxsat berilgan, endi esa massivning qolgan elementlarini qoplash uchun “..” belgilangan konstruksiyalardan foydalanish mumkin. Masalan:

    fn foo (so'zlar: &[&str]) {
    mos so'zlar {

    // massivning boshlang'ich elementlarini tekshiradi va e'tiborsiz qoldiradi
    ularni kuzatib boradigan elementlar
    ["Salom", "Dunyo", "!", ..] => println!("Salom Dunyo!"),

    // "Foo" va "Bar" birinchi ikkita elementini tekshiradi, qolganlari esa muhim emas
    ["Foo", "Bar", ..] => println!("Baz"),

    // hamma narsani e'tiborsiz qoldiring, lekin oxirgi element "!" bo'lishi kerak.
    [..., “!”] => println!(“!!!”),

    // boshlang'ich bo'limiga biz "z" bo'lishi kerak bo'lgan oxirgi elementdan tashqari hamma narsani o'z ichiga olamiz
    [start @ .., "z"] => println!("boshlanadi: {:?}", start),

    // oxirgi bo'limda biz "a" bo'lishi kerak bo'lgan birinchi elementdan tashqari hamma narsani joylashtiramiz.
    ["a", end @ ..] => println!("bilan tugaydi: {:?}", oxiri),

    rest => println!("{:?}", qolgan),
    }
    }

  • Yangi so‘l “mos keladi!” qo‘shildi, u ifoda va naqshni kiritish sifatida qabul qiladi va agar naqsh ifodaga mos kelsa, “to‘g‘ri”ni qaytaradi. Shablon “|” amallaridan foydalanishi mumkin va "agar".

    mos. self.partial_cmp (boshqa) {
    Ba'zi (kamroq) => rost,
    _ => noto'g'ri,
    }

    mos keladi!(self.partial_cmp(boshqa), ba'zilari(kamroq))

    let foo = 'f';
    assert!(mos keladi!(foo, 'A'..='Z' | 'a'..='z'));

    let bar = Ba'zi(4);
    assert!(mos keladi!(bar, Ba'zi(x) agar x > 2));

  • Vahima xabarlari noto'g'ri ishlatilganda ko'rsatiladi
    Option va Result turlari, endi libcore-da qo'ng'iroqni amalga oshiradigan kodga havolalar emas, balki muammoli qo'ng'iroqni amalga oshirgan kodga havola bilan qator raqamlarini ko'rsatadi. Masalan, o'zgartirish Option::None orqali ochish va kutish qo'ng'iroqlariga ta'sir qiladi yoki Natija turida unwrap_err, expect, expect_err va shunga o'xshash usullardan foydalanganda ishlamay qoladi.

  • Yuk paketi menejeri protsessual makroslari bo'lgan paketlar uchun "proc_macro sandiq" ni "extern" blokiga avtomatik almashtirishni ta'minlaydi. Ushbu o'zgartirish "foydalanish" direktivasini kodda "extern crate proc_macro;" ni belgilamasdan protsessual makroslarga qo'llash imkonini beradi. Misol uchun, agar dastur "use proc_macro::TokenStream;" qatoridan foydalansa, "extern crate proc_macro;" undan o'chirilgan bo'lsa, kod hozir ishlaydi.
  • Standart kutubxonaning imkoniyatlari kengaytirildi. Iterda:: Bo'sh qo'shildi Har qanday T qiymatlari uchun yuborish va sinxronlashtirishni qo'llab-quvvatlash.
    Qo'ng'iroqlar PIN::{map_unchecked, map_unchecked_mut} yetkazib berildi "O'lchamli" amalga oshirish uchun turdagi qiymatni qaytarish kerakligidan.
    io::Kursorda amalga oshirildi Qisman tenglama va tenglama. "const" atributi doimiylar o'rniga har qanday kontekstda foydalanish imkoniyatini belgilaydi, qo'llaniladi Layout::yangi usul uchun.

  • APIning yangi qismi barqaror toifaga oʻtkazildi, jumladan barqarorlashtirilgan CondVar::wait_while, CondVar::wait_timeout_while,
    DebugMap::key, DebugMap::value,
    ManuallyDrop::ol,
    ptr::slice_from_raw_parts_mut va ptr::slice_from_raw_parts.

  • Error::description usuli eskirgan.
  • Armv7a-none-eabi va riscv64gc-unknown-linux-gnu platformalari uchun ikkinchi darajali yordam taqdim etildi. Riscv64gc-noma'lum-linux-gnu platformasi uchun standart kutubxonani qo'llab-quvvatlash taqdim etildi.
    Apple 32 bitli platformalar lavozimidan tushirilgan qo'llab-quvvatlashning uchinchi darajasiga qadar, bu asosiy qo'llab-quvvatlashni nazarda tutadi, lekin avtomatlashtirilgan sinovdan o'tkazmasdan va rasmiy tuzilmalarni nashr etmasdan. Qo'llab-quvvatlash darajasining pasayishi Apple endi 32 bitli platformalarni qo'llab-quvvatlamasligi bilan bog'liq.

Manba: opennet.ru

a Izoh qo'shish