Rust 2021 dasturlash tilining chiqarilishi (1.56)

Mozilla loyihasi tomonidan asos solingan, ammo hozirda Rust Foundation mustaqil notijorat tashkiloti homiyligida ishlab chiqilgan Rust 1.56 tizim dasturlash tilining relizi nashr etildi. Oddiy versiya raqamiga qo'shimcha ravishda, nashr Rust 2021 deb ham atalgan va so'nggi uch yil ichida taklif qilingan o'zgarishlarning barqarorlashuvini bildiradi. Rust 2021, shuningdek, Rust 2018-ning chiqarilishi so'nggi uch yil ichida tilning rivojlanishi uchun asos bo'lganiga o'xshab, keyingi uch yil ichida funksionallikni oshirish uchun asos bo'lib xizmat qiladi.

Muvofiqlikni saqlab qolish uchun ishlab chiquvchilar o'z dasturlarida "2015", "2018" va "2021" yorliqlaridan foydalanishlari mumkin, bu esa dasturlarni Rustning tanlangan nashrlariga mos keladigan til holati tilimlari bilan bog'lash imkonini beradi. Nashrlar alohida mos kelmaydigan o'zgarishlar uchun kiritildi va yuk paketlarining metama'lumotlarida "[paket]" bo'limidagi "nashr" maydoni orqali sozlangan. Misol uchun, "2018" nashri 2018 yil oxirida barqarorlashtirilgan funksionallikni o'z ichiga oladi va shuningdek, muvofiqlikni buzmaydigan barcha keyingi o'zgarishlarni o'z ichiga oladi. 2021 yilgi nashr joriy 1.56 versiyasida taklif qilingan va kelgusida amalga oshirish uchun tasdiqlangan birgalikda ishlash qobiliyatini buzadigan xususiyatlarni o'z ichiga oladi. Tilning o'zidan tashqari, muharrirlar asboblar va hujjatlarning holatini ham hisobga oladi.

Rust 2021 da qayd etilgan asosiy nomuvofiqliklar:

  • Yopish joylarida alohida suratga olish - yopilishlar endi butun identifikator o‘rniga alohida maydon nomlarini yozib olishi mumkin. Masalan, "|| ax + 1" faqat "a" o'rniga "ax" ni oladi.
  • Massivlar uchun IntoIterator xususiyati: array.into_iter() massiv elementlarini havolalar bo‘yicha emas, balki qiymatlar bo‘yicha takrorlash imkonini beradi.
  • Makro_qoidalarda “|” iboralarini qayta ishlash o'zgartirildi (Mantiqiy OR) naqshlarda - moslikdagi ":pat" spetsifikatsiyasi endi "A | B".
  • Yuk paketi menejeri sukut bo'yicha Rust 1.51 da qo'llab-quvvatlanadigan xususiyatni hal qiluvchining ikkinchi versiyasini o'z ichiga oladi.
  • TryFrom, TryInto va FromIterator belgilari kirish standart kutubxona moduliga qo'shildi.
  • Vahima!(..) va assert!(expr, ..) makroslari endi har doim satrlarni formatlash uchun format_args!(..) dan foydalanadi, xuddi println!().
  • Ident#, ident»..." va ident'...' iboralari til sintaksisida saqlangan.
  • bare_trait_objects va ellipsis_inclusive_range_patterns ogohlantirishlari xatolarga koʻchirildi.

Rust 1.56 yangiligi:

  • Cargo.toml-da, "[paket]" bo'limida zang versiyasi maydoni qo'shildi, bu orqali siz kassa paketi uchun Rustning minimal qo'llab-quvvatlanadigan versiyasini aniqlashingiz mumkin. Agar joriy versiya belgilangan parametrga mos kelmasa, Cargo xato xabari bilan ishlashni to'xtatadi.
  • "Birlashtiruvchi @ naqsh" iboralari yordamida naqsh moslashtirilganda, qo'shimcha bog'lanishlarni belgilash uchun yordam beriladi (masalan, "matrix @ Matrix { row_len, .. } = get_matrix();").
  • APIning yangi qismi barqaror toifaga ko'chirildi, shu jumladan xususiyatlarning usullari va amalga oshirilishi barqarorlashtirildi:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::shrink_to
    • String::shrink_to
    • OsString::shrink_to
    • PathBuf::shrink_to
    • BinaryHeap::shrink_to
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::shrink_to
  • Konstantalar o'rniga istalgan kontekstda foydalanish imkoniyatini belgilovchi "const" atributi funksiyalarda qo'llaniladi.
    • std :: mem :: transmute
    • [T]:: birinchi
    • [T]::birinchi bo'linish
    • [T]::oxirgi
    • [T]::so'nggi_bo'linish
  • Kompilyator LLVM 13 versiyasidan foydalanishga o'tkazildi.
  • Qo'llab-quvvatlashning ikkinchi darajasi aarch64-apple-ios-sim platformasi va uchinchi darajali powerpc-unknown-freebsd va riscv32imc-esp-espidf platformalari uchun amalga oshirildi. Uchinchi daraja asosiy qo'llab-quvvatlashni o'z ichiga oladi, lekin avtomatlashtirilgan testlarsiz, rasmiy tuzilmalarni nashr etmasdan yoki kodni qurish mumkinligini tekshirmasdan.

Eslatib o'tamiz, Rust xotira xavfsizligiga e'tibor qaratadi, xotirani avtomatik boshqarishni ta'minlaydi va axlat yig'uvchi yoki ish vaqtini ishlatmasdan ishni bajarishda yuqori parallellikka 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.

Manba: opennet.ru

a Izoh qo'shish