Rust 1.57 dasturlash tilining relizi

Mozilla loyihasi tomonidan asos solingan, lekin hozirda Rust Foundation mustaqil notijorat tashkiloti homiyligida ishlab chiqilgan Rust 1.57 tizim dasturlash tilining relizi nashr etildi. Til xotira xavfsizligiga e'tibor qaratadi, xotirani avtomatik boshqarishni ta'minlaydi va axlat yig'uvchi yoki ish vaqtini ishlatmasdan yuqori vazifalar parallelligiga erishish uchun vositalarni 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.

Asosiy innovatsiyalar:

  • β€œVahima!” soβ€˜ldan foydalanish barqarorlashtirildi. kompilyatsiya paytida yaratilgan kontekstlarda, masalan, "const fn" deklaratsiyalari. Bundan tashqari, "vahima!" const deklaratsiyalari β€œassert!” makrosidan foydalanishga imkon beradi. va ba'zi boshqa standart kutubxona API'lari. Barqarorlashtirish hali butun formatlash infratuzilmasini qamrab olmaydi, shuning uchun hozirgi ko'rinishida "vahima!" makrosi. faqat statik satrlar bilan (vahima!(β€œ...")) yoki almashtirishda bitta interpolyatsiya qilingan "&str" qiymati bilan foydalanish mumkin (panic!("{}", a)), bu "{" ni almashtirish bilan cheklanishi kerak. }" formatlash ko'rsatkichlari va boshqa turlarsiz. Kelajakda doimiy kontekstlarda makroslarni qo'llash imkoniyatlari kengaytiriladi, ammo barqarorlashtirilgan imkoniyatlar kompilyatsiya bosqichida tasdiqlash tekshiruvlarini o'tkazish uchun allaqachon etarli: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = assert!(std::mem::size_of:: () == 8);
  • Yuk paketi menejeri "dev", "release", "test" va "skameyka" bilan cheklanmagan holda o'zboshimchalik nomlari bilan profillardan foydalanishga imkon beradi. Misol uchun, ulanish bosqichida (LTO) optimallashtirishni faqat yakuniy mahsulot yig'indilari yaratilganda yoqish uchun siz Cargo.toml da "ishlab chiqarish" profilini yaratishingiz va unga "lto = true" bayrog'ini qo'shishingiz mumkin. Biroq, o'z profillaringizni belgilashda standart sozlamalarni meros qilib olish uchun mavjud profilni ko'rsatishingiz kerak. Quyidagi misol "lto = true" bayrog'ini qo'shish orqali "reliz" profilini to'ldiradigan "ishlab chiqarish" profilini yaratadi. Profilning o'zi "--profile production" opsiyasi bilan yukni chaqirish orqali faollashtiriladi va yig'ish artefaktlari "maqsad / ishlab chiqarish" katalogiga joylashtiriladi. [profile.production] meros qilib oladi = "reliz" lto = rost
  • Vec, String, HashMap, HashSet va VecDeque turlari uchun try_reserve dan foydalanish barqarorlashtirildi, bu xotirani taqsimlash operatsiyalari chastotasini kamaytirish va oldini olish uchun ma'lum turdagi elementlarning ma'lum soni uchun joyni oldindan zahiralash imkonini beradi. xotira etishmasligi tufayli ish paytida ishdan chiqadi.
  • "m!{ .. }.method()" va "m!{ .. }?" kabi iboralarda jingalak qavslar bilan makroslarni belgilashga ruxsat beriladi.
  • File::read_to_end va read_to_string funksiyalarining bajarilishi optimallashtirildi.
  • Unicode spetsifikatsiyasini qo'llab-quvvatlash 14.0 versiyasiga yangilandi.
  • Qaytish qiymati e'tibordan chetda qolsa, ogohlantirish berish uchun "#[foydalanish_muhtoj]" deb belgilangan funksiyalar soni kengaytirildi, bu funksiya yangi qiymatni qaytarish o'rniga qiymatlarni o'zgartirishi mumkin bo'lgan xatoliklarni aniqlashga yordam beradi.
  • Libgccjit yordamida kod yaratish uchun eksperimental backend qo'shildi.
  • APIning yangi qismi barqaror toifaga ko'chirildi, shu jumladan xususiyatlarning usullari va amalga oshirilishi barqarorlashtirildi:
    • [T; N]::as_mut_slice
    • [T; N]:: as_slice
    • to'plamlar::TryReserveError
    • HashMap :: try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • String::try_reserve_exact
    • Vec::try_reserve
    • Vec :: try_reserve_exact
    • VecDeque :: try_reserve
    • VecDeque :: try_reserve_exact
    • Iterator::map_while
    • iter :: MapWhile
    • proc_macro::is_available
    • Buyruq :: get_program
    • Buyruq::get_args
    • Buyruq :: get_envs
    • Buyruq::get_current_dir
    • CommandArgs
    • CommandEnvs
  • Konstantalar oΚ»rniga istalgan kontekstda foydalanish mumkinligini aniqlaydigan β€œconst” atributi hint::unreachable_unchecked funksiyasida qoΚ»llaniladi.
  • Qo'llab-quvvatlashning uchinchi darajasi armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi va armv7a-km uchun amalga oshirildi. solid_asp3-eabihf platformalari. Uchinchi daraja asosiy qo'llab-quvvatlashni o'z ichiga oladi, lekin avtomatlashtirilgan testlarsiz, rasmiy tuzilmalarni nashr etmasdan yoki kodni qurish mumkinligini tekshirmasdan.

Manba: opennet.ru

a Izoh qo'shish