Rust 1.58 dasturlash tilining relizi

Mozilla loyihasi tomonidan asos solingan, ammo hozirda Rust Foundation mustaqil notijorat tashkiloti homiyligida ishlab chiqilgan umumiy maqsadli Rust 1.58 dasturlash tilining chiqarilishi chop 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:

  • Satrni formatlash bloklarida qatordan keyin aniq sanab o'tilgan o'zgaruvchilarni raqam va nom bo'yicha almashtirish imkoniyatidan tashqari, qatorga "{identifikator}" ifodasini qo'shish orqali ixtiyoriy identifikatorlarni almashtirish imkoniyati amalga oshiriladi. Masalan: // Oldin qo'llab-quvvatlangan konstruktsiyalar: println!("Salom, {}!", get_person()); println!("Salom, {0}!", get_person()); println!("Salom, {shaxs}!", person = get_person()); // endi siz let person = get_person(); println!("Salom, {shaxs}!");

    Identifikatorlar to'g'ridan-to'g'ri formatlash parametrlarida ham ko'rsatilishi mumkin. let (kenglik, aniqlik) = get_format(); get_scores() da (ism, ball) uchun { println!("{name}: {score:width$.precision$}"); }

    Yangi almashtirish “vahima!” makrosidan tashqari, qator formatini aniqlashni qo‘llab-quvvatlaydigan barcha makroslarda ishlaydi. Rust tilining 2015 va 2018 versiyalarida vahima!("{ident}") oddiy qator sifatida ishlanadi (Rust 2021da almashtirish ishlaydi).

  • Windows platformasidagi std::process::Buyruqlar tuzilmasining xatti-harakati shunday o'zgartirildiki, buyruqlar bajarilayotganda xavfsizlik nuqtai nazaridan u endi joriy katalogdagi bajariladigan fayllarni qidirmaydi. Joriy katalog chiqarib tashlandi, chunki dasturlar ishonchsiz kataloglarda (CVE-2021-3013) ishga tushirilsa, u zararli kodni bajarish uchun ishlatilishi mumkin. Yangi bajariladigan aniqlash mantig'i Rust kataloglarini, ilovalar katalogini, Windows tizim katalogini va PATH muhit o'zgaruvchisida ko'rsatilgan kataloglarni qidirishni o'z ichiga oladi.
  • Standart kutubxona qaytariladigan qiymat e'tiborga olinmasa, ogohlantirish berish uchun "#[foydalanish_kerak]" deb belgilangan funksiyalar sonini kengaytirdi, bu funksiya yangi qiymatni qaytarish o'rniga qiymatlarni o'zgartiradi deb taxmin qilish natijasida yuzaga kelgan xatolarni aniqlashga yordam beradi.
  • APIning yangi qismi barqaror toifaga ko'chirildi, shu jumladan xususiyatlarning usullari va amalga oshirilishi barqarorlashtirildi:
    • Metadata ::is_symlink
    • Path::is_symlink
    • {integer}::saturating_div
    • Variant :: unwrap_unchecked
    • Natija :: unwrap_unchecked
    • Natija::unwrap_err_unchecked
  • Konstantalar o'rniga uni istalgan kontekstda ishlatish imkoniyatini belgilovchi "const" atributi funksiyalarda qo'llaniladi:
    • Davomiyligi::yangi
    • Davomiyligi::checked_add
    • Davomiyligi::to'yingan_qo'shish
    • Davomiyligi::checked_sub
    • Duration::saturating_sub
    • Davomiyligi::checked_mul
    • Duration::saturating_mul
    • Davomiyligi::checked_div
  • "const" kontekstlarida "*const T" ko'rsatkichlarini o'chirishga ruxsat berilgan.
  • Yuk paketi menejerida rust_version maydoni paket metama'lumotlariga qo'shilgan va "--message-format" opsiyasi "yukni o'rnatish" buyrug'iga qo'shilgan.
  • Kompilyator CFI (Control Flow Integrity) himoya mexanizmini qo'llab-quvvatlaydi, u har bir bilvosita qo'ng'iroqdan oldin tekshiruvlarni qo'shadi, natijada oddiy bajarish tartibini (boshqaruv oqimi) buzilishiga olib kelishi mumkin bo'lgan noaniq xatti-harakatlarning ayrim shakllarini aniqlash uchun. funksiyalar bo'yicha xotirada saqlangan ko'rsatkichlarni o'zgartiruvchi ekspluatatsiyalardan foydalanish.
  • Kompilyator LLVM qamrovini taqqoslash formatining 5 va 6-versiyalari uchun qo'shimcha qo'llab-quvvatladi, u sinov paytida kod qamrovini baholash uchun ishlatiladi.
  • Kompilyatorda LLVM ning minimal versiyasiga qo'yiladigan talablar LLVM 12 ga ko'tariladi.
  • X86_64-noma'lum-none platformasini qo'llab-quvvatlashning uchinchi darajasi amalga oshirildi. Uchinchi daraja asosiy qo'llab-quvvatlashni o'z ichiga oladi, lekin avtomatlashtirilgan testlarsiz, rasmiy tuzilmalarni nashr etmasdan yoki kodni qurish mumkinligini tekshirmasdan.

Bundan tashqari, Microsoft tomonidan Windows OS uchun ilovalarni ishlab chiqish uchun Rust tilidan foydalanish imkonini beruvchi Windows 0.30 kutubxonalari uchun Rust nashri e'lon qilinganini ta'kidlashimiz mumkin. To'plam ikkita quti paketini (Windows va Windows-sys) o'z ichiga oladi, ular orqali Rust dasturlarida Win API-ga kirishingiz mumkin. API qo'llab-quvvatlash kodi dinamik ravishda API tavsiflovchi metama'lumotlardan yaratiladi, bu sizga nafaqat mavjud Win API qo'ng'iroqlari uchun, balki kelajakda paydo bo'ladigan qo'ng'iroqlar uchun ham qo'llab-quvvatlashni amalga oshirish imkonini beradi. Yangi versiya UWP (Universal Windows Platform) maqsadli platformasini qo'llab-quvvatlaydi va Tutqich va Debug turlarini amalga oshiradi.

Manba: opennet.ru

a Izoh qo'shish