Rust 1.34 dasturlash tilining relizi

bo'lib o'tdi tizim dasturlash tilini chiqarish Pas 1.34, Mozilla loyihasi tomonidan ishlab chiqilgan. 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 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:

  • 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 registrlarni qo'shish uchun ($HOME yoki paketlar katalogida joylashgan)
    taqdim etilgan “[registrlar]” bo‘limida va tashqi registrdan foydalanish uchun Cargo.toml’dagi har bir qaramlik tavsifida “ro‘yxatga olish kitobi” opsiyasi paydo bo‘lgan. 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. testlarda doktestlar, hujjatlardagi misol kodini test sifatida ishlatishga imkon 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 taqdim etilgan o'zboshimchalik bilan tokenlar to'plamidan foydalanish imkoniyati (“#[attr($tokens)]”, “#[attr[$tokens]] va #[attr{$tokens}]”). 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;
  • Stabillashgan turlar (xususiyat) TryFrom и TryInto, xatolarni qayta ishlash bilan turdagi konversiyalarga ruxsat berish. 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) xato turi qo'shildi Noqulay, shaffof foydalanish imkonini beradi
    "Kimdan" ning barcha mavjud ilovalari uchun TryFrom;

  • Funktsiya eskirgan CommandExt ::before_exec, bu ishlov beruvchini exec ishga tushirishdan oldin bajarishga ruxsat berdi, bu fork() chaqiruvidan keyin forklangan bola jarayoni kontekstida bajarildi. Bunday sharoitda asosiy jarayonning ba'zi resurslari, masalan, fayl identifikatorlari va xaritalangan xotira maydonlari takrorlanishi mumkin, bu esa aniqlanmagan xatti-harakatlarga va kutubxonalarning noto'g'ri ishlashiga olib kelishi mumkin.
    Before_exec o'rniga xavfli funksiyadan foydalanish tavsiya etiladi CommandExt::pre_exec.

  • 8 dan 64 bitgacha bo'lgan o'lchamdagi barqarorlashtirilgan imzolangan va ishorasiz atom tamsayılar turlari (masalan, Atom U8), shuningdek imzolangan turlar Non Non I[8|16|32|64|128].
  • 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.

Manba: opennet.ru

a Izoh qo'shish