Rust 1.60 dasturlash tilining relizi

Mozilla loyihasi tomonidan asos solingan, ammo hozirda Rust Foundation mustaqil notijorat tashkiloti homiyligida ishlab chiqilgan Rust 1.60 umumiy maqsadli dasturlash tilining nashri chop etildi. Til xotira xavfsizligiga e'tibor qaratadi va axlat yig'uvchi va ish vaqtidan foydalanishdan qochgan holda yuqori ish parallelligiga erishish vositalarini taqdim etadi (ish vaqti standart kutubxonani asosiy ishga tushirish va texnik xizmat ko'rsatishga qisqartiriladi).

Rust-ning xotira bilan ishlash usullari ishlab chiquvchini ko'rsatkichlarni boshqarishda xatolardan qutqaradi va past darajadagi xotira bilan ishlash natijasida yuzaga keladigan muammolardan himoya qiladi, masalan, bo'shatilgandan so'ng xotira maydoniga kirish, null ko'rsatkichlarni o'chirish, buferni ortiqcha yuklash va hokazo. Kutubxonalarni tarqatish, qurishni ta'minlash va bog'liqliklarni boshqarish uchun loyiha Cargo paketi menejerini ishlab chiqadi. Crates.io ombori kutubxonalarni joylashtirish uchun qo'llab-quvvatlanadi.

Xotira xavfsizligi Rust-da kompilyatsiya vaqtida mos yozuvlarni tekshirish, ob'ektga egalik qilish, ob'ektning ishlash muddatini (ko'lamini) kuzatib borish va kodni bajarish paytida xotiraga kirishning to'g'riligini baholash orqali ta'minlanadi. Rust shuningdek, butun sonlarning to'lib ketishidan himoya qiladi, ishlatishdan oldin o'zgaruvchan qiymatlarni majburiy ishga tushirishni talab qiladi, standart kutubxonada xatolarni yaxshiroq boshqaradi, sukut bo'yicha o'zgarmas havolalar va o'zgaruvchilar tushunchasini qo'llaydi, mantiqiy xatolarni minimallashtirish uchun kuchli statik yozishni taklif qiladi.

Asosiy innovatsiyalar:

  • Rustc kompilyatori sinov paytida kod qamrovini baholash uchun ishlatiladigan qamrov ma'lumotlarini yaratish uchun barqarorlashtirilgan LLVM-ga asoslangan tizimga ega. Yig'ish vaqtida qamrov ma'lumotlarini yoqish uchun siz "-Cinstrument-coverage" bayrog'idan foydalanishingiz kerak, masalan, yig'ishni "RUSTFLAGS = -C instrument-coverage" yuk qurish buyrug'i bilan boshlashingiz kerak. Shu tarzda tuzilgan bajariladigan faylni ishga tushirgandan so'ng, default.profraw fayli joriy katalogda saqlanadi, uni qayta ishlash uchun siz llvm-tools-preview komponentidagi llvm-profdata yordam dasturidan foydalanishingiz mumkin. llvm-profdata tomonidan qayta ishlangan chiqish keyinchalik izohli kodni qamrab olish hisobotini yaratish uchun llvm-cov-ga uzatilishi mumkin. Manba kodiga havola to'g'risidagi ma'lumotlar tekshirilayotgan bajariladigan fayldan olinadi, u qamrov hisoblagichlari va kod o'rtasidagi bog'liqlik haqida kerakli ma'lumotlarni o'z ichiga oladi. 1| 1|fn main() { 2| 1| println!("Salom, dunyo!"); 3| 1|}
  • Yuk paketi menejerida "-timings" bayrog'ini qo'llab-quvvatlash barqarorlashtirildi, bu qurilishning borishi va har bir bosqichning bajarilish vaqti to'g'risida batafsil hisobot yaratishni o'z ichiga oladi. Hisobot yig'ish jarayonining ishlashini optimallashtirish uchun foydali bo'lishi mumkin.
  • Yuk paketi menejeri shartli kompilyatsiya va ixtiyoriy bog'liqliklarni tanlash mexanizmi uchun yangi sintaksisni taklif qiladi, Cargo.toml faylida [xususiyatlar] bo'limida nomlangan xususiyatlar ro'yxatini ro'yxatga olish orqali sozlangan va paketni yaratish jarayonida xususiyatlarni yoqish orqali faollashtirilgan. "--features" bayrog'i yordamida. Yangi versiya alohida nom maydonlarida va zaif bog'liqliklarda bog'liqliklarni qo'llab-quvvatlaydi.

    Birinchi holda, “[xususiyatlar]” boʻlimi ichidagi “dep:” prefiksi boʻlgan elementlardan ixtiyoriy bogʻliqlikka aniq bogʻlanish uchun bu bogʻliqlikni xususiyat sifatida koʻrsatmasdan foydalanish mumkin. Ikkinchi holda, "?" belgisi bilan belgilashni qo'llab-quvvatlash qo'shildi. ("paket nomi?/xususiyati nomi") ixtiyoriy bog'liqliklar, agar ba'zi boshqa xususiyat berilgan ixtiyoriy bog'liqlikni o'z ichiga olgan bo'lsa, kiritilishi kerak. Misol uchun, quyidagi misolda, serde xususiyatini yoqish "serde" bog'liqligini, shuningdek "rgb" bog'liqligi uchun "serde" xususiyatini faollashtiradi, lekin faqat "rgb" bog'liqligi boshqa joyda yoqilgan bo'lsa: [bog'liqliklar] serde = {versiya = " 1.0.133", ixtiyoriy = rost } rgb = {versiya = "0.8.25", ixtiyoriy = rost } [xususiyatlar] serde = ["dep:serde", "rgb?/serde"]

  • Oxirgi versiyada o'chirib qo'yilgan qo'shimcha kompilyatsiyani qo'llab-quvvatlash qaytarildi. Xususiyatning o'chirilishiga sabab bo'lgan kompilyator xatosi hal qilindi.
  • Tezkor taymerlarni monotonik vaqt kafolati bilan ta'minlash bilan bog'liq ba'zi muammolar hal qilindi, bu tizimning uyqu rejimida o'tkazgan vaqtini hisobga oladi. Ilgari, taymerni ishlatish uchun imkon qadar OS API ishlatilar edi, bu vaqt monotonligini buzadigan muammoli vaziyatlarni, masalan, apparat muammolari, virtualizatsiyadan foydalanish yoki operatsion tizimdagi xatolarni hisobga olmadi.
  • APIning yangi qismi barqaror toifaga ko'chirildi, shu jumladan xususiyatlarning usullari va amalga oshirilishi barqarorlashtirildi:
    • Arc::new_cyclic
    • Rc::new_cyclic
    • tilim::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • MaybeUnit::assume_init_drop
    • MaybeUnit::assume_init_read
    • i8 :: abs_diff
    • i16 :: abs_diff
    • i32 :: abs_diff
    • i64 :: abs_diff
    • i128 :: abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • foydalaning::abs_diff
    • io::ErrorKind uchun displey
    • ExitCode uchun
    • uchun emas! ("hech qachon" deb yozing)
    • _Op_Assign<$t>
    • arch::is_aarch64_feature_aniqlandi!
  • Qo'llab-quvvatlashning uchinchi darajasi mips64-openwrt-linux-musl* va armv7-unknown-linux-uclibceabi (softfloat) platformalari uchun amalga oshirildi. Uchinchi daraja asosiy qo'llab-quvvatlashni o'z ichiga oladi, lekin avtomatlashtirilgan testlarsiz, rasmiy tuzilmalarni nashr etmasdan yoki kodni qurish mumkinligini tekshirmasdan.
  • Kompilyator LLVM 14 dan foydalanishga o'tkazildi.

Bundan tashqari, quyidagilarni ta'kidlashingiz mumkin:

  • Rustc kompilyatorini rustc_codegen_gcc backend yordamida yuklash uchun qoʻshimcha qoʻllab-quvvatlash, bu sizga GCC loyihasidagi libgccjit kutubxonasidan rustc-da kod generatori sifatida foydalanish imkonini beradi, bu rustc-ga GCCda mavjud arxitektura va optimallashtirishlarni qoʻllab-quvvatlash imkonini beradi. Kompilyatorni reklama qilish rustc kompilyatorining o'zini yaratish uchun rustc-da GCC-ga asoslangan kod generatoridan foydalanish qobiliyatini anglatadi. Amaliy tomondan, bu xususiyat rustc-da ilgari qo'llab-quvvatlanmagan arxitekturalar uchun zang dasturlarini yaratishga imkon beradi.
  • Uutils coreutils 0.0.13 asboblar to'plamining chiqarilishi mavjud bo'lib, uning doirasida Rust tilida qayta yozilgan GNU Coreutils to'plamining analogi ishlab chiqilmoqda. Coreutils sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln va ls kabi yuzdan ortiq yordamchi dasturlar bilan birga keladi. Loyihaning maqsadi Windows, Redox va Fuchsia platformalarida ishlashga qodir bo'lgan Coreutils-ning kross-platforma muqobil ilovasini yaratish, shuningdek, GPL copyleft litsenziyasi o'rniga ruxsat beruvchi MIT litsenziyasi ostida tarqatishdir.

    Yangi versiyada ko'plab yordamchi dasturlarning amalga oshirilishi yaxshilandi, jumladan cp, dd, df, split va tr utilitalarining GNU loyihasidagi hamkasblari bilan muvofiqligi sezilarli darajada yaxshilandi. Onlayn hujjatlar taqdim etiladi. Clap parser buyruq qatori argumentlarini tahlil qilish uchun ishlatiladi, bu "--help" bayrog'i uchun chiqishni yaxshiladi va uzun buyruqlar qisqartmalarini qo'llab-quvvatladi (masalan, "ls -color" o'rniga "ls -col" ni belgilashingiz mumkin ”).

Manba: opennet.ru

a Izoh qo'shish