Rust 1.40 dasturlash tilining relizi

nashr etilgan tizim dasturlash tilini chiqarish Pas 1.40, 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:

  • " atributidan foydalangan holda tuzilmalarni (struktura) va ro'yxatlarni (variant bloki bilan sanab) belgilash imkoniyati qo'shildi.#[tugallanmagan]", qaysi Bu beradi kelajakda e'lon qilingan tuzilmalar va ro'yxatlarga yangi maydonlar va variantlarni qo'shing. Misol uchun, maydonlar ommaviy e'lon qilingan tuzilmalarga ega modullarni ishlab chiquvchilar kelajakda yangi maydonlar qo'shilishi mumkin bo'lgan tuzilmalarni belgilash uchun "#[no_exhaustive]" dan foydalanishlari mumkin. Hozirgacha, bu vaziyatda, ishlab chiquvchi maydonlarni shaxsiy e'lon qilish va maydonlarning o'zgarmas ro'yxatiga bog'lash o'rtasida tanlov qilishga majbur bo'ldi. Yangi atribut ushbu cheklovni olib tashlaydi va ilgari tuzilgan tashqi kodni buzish xavfisiz kelajakda yangi maydonlarni qo'shish imkonini beradi. Kassa paketlarida "moslik" bo'limidagi variantlarni moslashtirishda kelajakda yuzaga kelishi mumkin bo'lgan maydonlarni qamrab oluvchi "_ => {...}" niqobining aniq ta'rifi talab qilinadi, aks holda yangi maydonlarni qo'shishda xatolik ko'rsatiladi.
  • Qo'shilgan protsessual makrosni mac!() turi kontekstida chaqirish imkoniyati. Misol uchun, agar “turi_kengaytirish” protsessual makros bo'lsa, endi “Foo turi = kengaytirish_to_turi!(bar);” deb yozishingiz mumkin.
  • "extern { ... }" bloklarida qo'shildi protsessual va atribut makroslaridan, jumladan “bang!()” makroslaridan foydalanish imkoniyati, masalan:

    makro_qoidalar! make_item { ($name:ident) => { fn $name(); } }

    tashqi {
    make_element!(alfa);
    make_element!(beta);
    }

    tashqi "C" {
    #[mening_identifikatsiyam_makros] fn foo();
    }

  • Makroslarda amalga oshirildi “makro_qoidalar!” elementlarini yaratish qobiliyati. “Makro_qoidalar!” yaratilmoqda. funksiyaga o'xshash makroslarda ("mac!()") ham, atributlar ko'rinishidagi makrolarda ham ("#[mac]") mumkin.
  • $m:meta xaritalash elementida qo'shildi ixtiyoriy tokenlarni sanab chiqish qiymatlarini qo'llab-quvvatlash ("[TOKEN_STREAM]", "{TOKEN_STREAM}" va "(TOKEN_STREAM)"), masalan:

    makro_qoidalar! accept_meta { ($m:meta) => {}}
    accept_meta!( my::path );
    accept_meta!( my::path = "yongan" );
    accept_meta!( my::path ( abc ) );
    accept_meta!( my::path [ abc ] );
    accept_meta!( my::path { abc });

  • Rust 2015 rejimida NLL (Lexical Non-Lexical Lifetimes) texnikasidan foydalangan holda o'zgaruvchilarni (qarz olish tekshiruvi) qarz olishni tekshirishda aniqlangan muammolar uchun xato chiqishi yoqilgan. Ilgari, Rust 2018 rejimida ishlayotganda ogohlantirishlar xatolar bilan almashtirildi.
    O'zgartirish Rust 2015 rejimiga kengaytirilgandan so'ng, ishlab chiquvchilar nihoyat buni amalga oshirishga muvaffaq bo'lishdi qutulmoq eski qarz tekshiruvchisidan.

    Eslatib o'tamiz, qarzga olingan o'zgaruvchilarning ishlash muddatini hisobga olishning yangi mexanizmiga asoslangan tekshirish tizimi eski tekshirish kodiga e'tibor bermagan ba'zi muammolarni aniqlashga imkon berdi. Bunday tekshiruvlar uchun xato chiqishi ilgari ishlagan kod bilan muvofiqlikka ta'sir qilishi mumkinligi sababli, dastlab xatolar o'rniga ogohlantirishlar chiqarildi.

  • Uni konstantalar o'rniga istalgan kontekstda ishlatish imkoniyatini belgilovchi "const" atributi is_power_of_two funksiyasi uchun ishlatiladi (belgisiz butun sonlar uchun).
  • API ning yangi qismi todo!() makros va slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value kabi barqaror toifaga ko‘chirildi, usullar barqarorlashtirildi.
    Variant ::as_deref, Option::as_deref_mut, Option::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32, f64}::from_be_bayt, {f32,f64}::from_le_bayt va {f32,f64}::from_ne_bayt.

  • Yuk paketi menejerida
    amalga oshirildi diskdagi kompilyator ogohlantirishlarini keshlash. "Yuk metadata" buyrug'iga "yuk metadata" opsiyasi qo'shildi--filtr-platforma" faqat bog'liqlikni hal qilish ustunida belgilangan maqsadli platformaga bog'langan paketlarni ko'rsatish uchun. Yaroqli TLS versiyalarini aniqlash uchun http.ssl-versiya konfiguratsiya opsiyasi qo‘shildi.
    Bo'limni nashr qilish imkoniyati qo'shildi "devga bog'liqliklar"versiya" kalitini ko'rsatmasdan.

  • Rustc kompilyatori thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 va mips64el-noma'lum-linux-muslabi64 maqsadli platformalar uchun uchinchi darajali yordamni taqdim etadi. Uchinchi daraja asosiy qo'llab-quvvatlashni o'z ichiga oladi, lekin avtomatlashtirilgan sinov va rasmiy tuzilmalarni nashr etmasdan.

Manba: opennet.ru

a Izoh qo'shish