Rust 1.38 dasturlash tilining relizi

nashr etilgan tizim dasturlash tilini chiqarish Pas 1.38, Mozilla loyihasi tomonidan asos solingan. 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:

  • Bog'liqlik metama'lumotlari mavjud bo'lishi bilanoq, kompilyatsiya tugashini kutmasdan, bog'liq quti paketini yaratish boshlanadigan quvurli kompilyatsiya rejimi qo'shildi (quvurli). To'plamni kompilyatsiya qilishda bog'liqliklarni to'liq yig'ish shart emas, faqat metama'lumotlarni aniqlang, u turlar, bog'liqliklar va eksport qilinadigan elementlar ro'yxatini o'z ichiga oladi. Metadata kompilyatsiya jarayonining boshida taqdim etiladi, shuning uchun bog'langan paketlarni endi ancha oldinroq kompilyatsiya qilish mumkin. Yagona paketlarni qurishda tavsiya etilgan rejim ishlashga ta'sir qilmaydi, lekin agar tuzilish tarmoqlangan bog'liqliklar bilan paketlarni qamrab olsa, umumiy qurish vaqtini 10-20% ga qisqartirish mumkin;
  • Funktsiyalardan noto'g'ri foydalanishni aniqlashni ta'minlaydi std :: mem :: ishga tushirilmagan и std :: mem :: nolga teng. Misol uchun, std::mem::uninitialized massivlarni tez yaratish uchun qulay, lekin u kompilyatorni chalg'itadi, chunki u initsializatsiya qilingan ko'rinadi, lekin aslida qiymat boshlang'ich bo'lib qoladi. mem:: ishga tushirilmagan funksiya allaqachon eskirgan deb belgilangan va uning o'rniga oraliq turdan foydalanish tavsiya etiladi. Balki birlik. mem::zeroedga kelsak, bu funksiya nol qiymatlarni qabul qila olmaydigan turlar bilan bog'liq muammolarni keltirib chiqarishi mumkin.

    Aniqlanmagan xatti-harakatni aniqlashga yordam berish uchun yangi versiya kompilyatorga mem::unitialized yoki mem::zeroed bilan bog'liq ba'zi muammolarni aniqlaydigan lint tekshiruvini qo'shadi. Masalan, endi nol qiymatlarni qabul qila olmaydigan ko'rsatkich ob'ektlarini ifodalovchi &T va Box‹T› turlari bilan mem::initialized yoki mem::zeroed dan foydalanmoqchi bo'lganingizda xatoga duch kelasiz;

  • “#[eskirgan]” atributi quti paketlarini eskirgan deb belgilash va kelajakda o‘chirib tashlashni rejalashtirish imkonini berish uchun kengaytirildi. Rust 1.38 dan boshlab ushbu atribut makroslar uchun ham ishlatilishi mumkin;
  • Submodullarda “#[global_allocator]” atributidan foydalanish imkoniyati qo‘shildi;
  • Qo'shilgan funksiya std :: any :: type_name, bu sizga disk raskadrovka maqsadlarida foydali bo'lishi mumkin bo'lgan tur nomini aniqlash imkonini beradi. Masalan, dasturni bajarish jarayonida siz funktsiya qanday turdagi chaqirilganligini bilib olishingiz mumkin:

    fn gen_value‹T: Standart>() -› T {
    println!("{} misolini ishga tushirish", std::any::type_name::‹T›());
    Standart::default()
    }

    fn main() {
    ruxsat _: i32 = gen_value(); # "i32" chop etiladi
    let _: String = gen_value(); # "alloc::string::String" ni chop etadi
    }

  • Standart kutubxonaning kengaytirilgan funksiyalari:
    • slice::{concat, connect, join} endi &T dan tashqari &[T] qiymatini olishi mumkin;
    • "*const T" va "*mut T" endi markerni amalga oshiradi::Unpin;
    • "Arc‹[T]›" va "Rc‹[T]›" endi FromIterator‹T›-ni qo'llaydi;
    • iter::{StepBy, Peekable, Take} endi DoubleEndedIterator dasturini qo'llaydi.
    • ascii::EscapeDefault Clone va Displeyni amalga oshiradi.
  • API-larning yangi qismi barqaror toifaga, jumladan barqarorlashtirilgan usullarga o'tkazildi
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Davomiyligi::as_secs_f{32|64},
    • Davomiyligi::div_duration_f{32|64},
    • Davomiyligi::div_f{32|64},
    • Davomiyligi::from_secs_f{32|64},
    • Davomiyligi::mul_f{32|64},
    • qoldiq bilan bo'lish operatsiyalari
      div_euclid va rem_euclid barcha butun sonli primitivlar uchun;

  • Yuk paketi menejerida turli funksiyalarni yoqish uchun “--features” opsiyasini bir necha marta belgilash uchun qo‘shimcha qo‘llab-quvvatlash;
  • Kompilyator uchinchisini beradi daraja maqsadli platformalarni qo'llab-quvvatlash aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msv7- maqsadlari ma'lum armv, -gnueabi, armv7-noma'lum-linux-musleabi, olti burchakli-noma'lum-linux-musl va riscv32i-noma'lum-hech-elf. 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