Rust 1.34 dasturlash tilining relizi

Mozilla loyihasi tomonidan ishlab chiqilgan Rust 1.34 tizimli dasturlash tili chiqarildi. Til xotira xavfsizligiga e'tibor qaratadi, xotirani avtomatik boshqarishni ta'minlaydi va axlat yig'uvchi yoki ish vaqtidan foydalanmasdan yuqori vazifalar parallelligiga erishish uchun vositani taqdim etadi.

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 o'chirish, buferni haddan tashqari oshirib yuborish va boshqalar. Kutubxonalarni tarqatish, yig'ishni ta'minlash va bog'liqliklarni boshqarish uchun loyiha bir marta bosish orqali dastur uchun zarur bo'lgan kutubxonalarni olish imkonini beruvchi Cargo paketi menejerini ishlab chiqmoqda. Crates.io ombori kutubxonalarni joylashtirish uchun qo'llab-quvvatlanadi.

Asosiy innovatsiyalar:

  • Yuk paketi menejeri crates.io davlat reestri bilan birga mavjud bo'lishi mumkin bo'lgan muqobil paketlar registrlari bilan ishlash uchun vositalarni qo'shdi. Masalan, xususiy ilovalarni ishlab chiquvchilar endi Cargo.toml-ga bog'liqliklarni ro'yxatga olishda foydalanishlari mumkin bo'lgan shaxsiy registrlaridan foydalanishlari va o'z mahsulotlari uchun crates.io-ga o'xshash versiya modelini qo'llashlari, shuningdek, ikkala qutiga bog'liqliklarni ko'rsatishlari mumkin. io va o'zingizning ro'yxatga olish kitobingizga.

    ~/.cargo/config ga tashqi registrni qo'shish uchun
    “[registrlar]” bo‘limida yangi “mening registrim” opsiyasi taqdim etilgan va “[bog‘liqliklar]” bo‘limida Cargo.toml’dagi qaramlikdagi tashqi registrni eslatish uchun “boshqa sandiq” opsiyasi qo‘shilgan. Qo'shimcha registrga ulanish uchun ~/.cargo/credentials fayliga autentifikatsiya belgisini qo'ying va buyruqni bajaring.
    "cargo login --registry=my-registry" va paketni nashr qilish uchun -
    "cargo publish -registry=mening registrim";

  • “?” operatoridan foydalanish uchun toʻliq yordam qoʻshildi. doctestlarda, bu sizga hujjatlardagi misol kodini test sifatida ishlatish imkonini beradi. Ilgari operator
    "?" "fn main()" funksiyasi yoki "#[test]" funksiyalari mavjud bo'lgandagina testni bajarish paytida xatolarni qayta ishlash uchun foydalanish mumkin;

  • Protsessual makroslar yordamida aniqlangan maxsus atributlarda ixtiyoriy tokenlar toʻplamidan (“#[attr($tokens)]”, “#[attr[$tokens]] va #[attr{$tokens}]”) foydalanish mumkin. Ilgari elementlar faqat string literallari yordamida daraxt/rekursiv shaklda ko‘rsatilishi mumkin edi, masalan, “#[foo(bar, baz(quux, foo = “bar”))]”, lekin endi raqamlardan foydalanish mumkin (' #[diapazon(0. .10)]') va “#[bound(T: MyTrait)]” kabi konstruksiyalar;
  • TryFrom va TryInto xususiyatlari barqarorlashtirildi, bu xatolarni qayta ishlash bilan turlarni o'zgartirishga imkon beradi. Masalan, butun sonli from_be_bytes kabi usullar kirish sifatida massivlardan foydalanadi, lekin ma'lumotlar ko'pincha Slice tipida keladi va massivlar va bo'limlar o'rtasida konvertatsiya qilish qo'lda qilish muammoli. Yangi xususiyatlar yordamida ko'rsatilgan operatsiyani .try_into() ga qo'ng'iroq qilish orqali tezda bajarish mumkin, masalan, "let num = u32::from_be_bytes(slice.try_into()?)". Har doim muvaffaqiyatli bo'ladigan konvertatsiyalar uchun (masalan, u8 turidan u32gacha) shaffof foydalanishga ruxsat berish uchun xato turi qo'shilgan.
    "Kimdan" ning barcha mavjud ilovalari uchun TryFrom;

  • Fork() qo'ng'irog'idan keyin forklangan bola jarayoni kontekstida bajariladigan execdan oldin ishlov beruvchini bajarishga ruxsat beruvchi CommandExt::before_exec funksiyasi eskirgan. Bunday sharoitda asosiy jarayonning ba'zi resurslari, masalan, fayl deskriptorlari va xaritalangan xotira maydonlari takrorlanishi mumkin, bu esa noaniq xatti-harakatlarga va kutubxonalarning noto'g'ri ishlashiga olib kelishi mumkin.
    Before_exec o'rniga xavfli CommandExt::pre_exec funksiyasidan foydalanish tavsiya etiladi.

  • 8 dan 64 bitgacha (masalan, AtomicU8) o'lchamdagi barqarorlashtirilgan imzolangan va ishorasiz atom tamsayılar turlari, shuningdek, NonZeroI[8|16|32|54|128] imzolangan turlari.
  • APIning yangi qismi barqaror toifaga koʻchirildi, jumladan Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[qoʻshish|sub ] va SystemTime usullari barqarorlashtirildi ::checked_[add|sub]. iter::from_fn va iter::successors funktsiyalari barqarorlashtirildi;
  • Barcha integer turlari uchun checked_pow, saturating_pow, wrapping_pow va overflowing_pow usullari qo'llaniladi;
  • “-C linker-plugin-lto” qurish opsiyasini belgilash orqali ulanish bosqichida optimallashtirishni yoqish imkoniyati qo'shildi (rustc Rust kodini LLVM bitkodiga kompilyatsiya qiladi, bu LTO optimallashtirishlarini qo'llash imkonini beradi).

Manba: opennet.ru

a Izoh qo'shish