Rust 1.61 dasturlash tilining relizi

Mozilla loyihasi tomonidan asos solingan, ammo hozirda Rust Foundation mustaqil notijorat tashkiloti homiyligida ishlab chiqilgan Rust 1.61 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:

  • O'zingizning qaytish kodlaringizni asosiy funksiyadan belgilashingiz mumkin. Dastlab, Rustning asosiy funktsiyasi faqat "()" (birlik) turini qaytarishi mumkin edi, bu har doim muvaffaqiyatli chiqish holatini ko'rsatadi, agar ishlab chiquvchi "jarayon:: chiqish (kod)" funktsiyasini aniq chaqirmasa. Rust 1.26 da, asosiy funktsiyadagi beqaror tugatish xususiyatidan foydalanib, C dasturlaridagi EXIT_SUCCESS va EXIT_FAILURE kodlariga mos keladigan "Ok" va "Err" qiymatlarini qaytarish mumkin edi. Rust 1.61 da Tugatish xususiyati barqarorlashtirildi va alohida qaytish kodini ifodalash uchun alohida ExitCode turi taklif qilindi, u platformaga xos qaytish turlarini oldindan belgilangan SUCCESS va FAILURE konstantalarini hamda From usulini taqdim etadi. o'zboshimchalik bilan qaytish kodini qaytarish uchun. std::process::ExitCode dan foydalaning; fn main() -> ExitCode { if !check_foo() { ExitCode::from(8); } ExitCode :: MUVAFFAQIYAT }
  • β€œconst fn” iborasi yordamida aniqlangan funksiyalarning qoΚ»shimcha imkoniyatlari barqarorlashtirildi, ularni nafaqat oddiy funksiyalar deb atash mumkin, balki konstantalar oΚ»rniga istalgan kontekstda ham foydalanish mumkin. Bu funksiyalar ishlash vaqtida emas, kompilyatsiya vaqtida hisoblab chiqiladi, shuning uchun ular faqat konstantalardan o'qish imkoniyati kabi ma'lum cheklovlarga bo'ysunadi. Yangi versiyada funktsiya ko'rsatkichlari bilan asosiy operatsiyalarga const funktsiyalari ichida ruxsat beriladi (ko'rsatgichlarni yaratish, o'tkazish va uzatishga ruxsat beriladi, lekin funktsiyani ko'rsatgich orqali chaqirish mumkin emas); T kabi const funksiyalarning umumiy parametrlari uchun belgi chegaralari: Kopiya; dinamik ravishda yuboriladigan xususiyatlar (dyn Trait); impl Funktsiya argumentlari va qaytish qiymatlari uchun xususiyat turlari.
  • Stdin, Stdout va Stderr-ni std::io da oqim boshqaradi, endi qulflanganda statik xizmat muddati (β€œstatik”) boβ€˜lib, β€œlet out = std::io::stdout().lock();” kabi konstruksiyalarga ruxsat beradi. tutqichni olish va bitta ifodada qulfni o'rnatish bilan.
  • APIning yangi qismi barqaror toifaga ko'chirildi, shu jumladan xususiyatlarning usullari va amalga oshirilishi barqarorlashtirildi:
    • Pin ::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Kursor uchun yozish
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ExitCode
    • std :: jarayon :: Tugatish
    • std::thread::JoinHandle::is_finished
  • Konstantalar o'rniga uni istalgan kontekstda ishlatish imkoniyatini belgilovchi "const" atributi funksiyalarda qo'llaniladi:
    • ::offset va ::offset
    • ::wrapping_offset va ::wrapping_offset
    • ::add va ::add
    • ::sub va ::sub
    • ::wrapping_add va ::wrapping_add
    • ::wrapping_sub va ::wrapping_sub
    • ::as_mut_ptr
    • ::as_ptr_range
    • ::as_mut_ptr_range

Bundan tashqari, siz "Rust: Critical Retrospective" maqolasini, proshivkada ishlatiladigan Xous mikroyadroli operatsion tizimini ishlab chiqish jarayonida 100 ming qator kodni yozgandan so'ng Rust tilining taassurotlari haqida qisqacha ma'lumotga ega bo'lishingiz mumkin. Kamchiliklarga tushunish qiyin bo'lgan sintaksis, tilning to'liq emasligi va doimiy rivojlanishi, takrorlanadigan tuzilmalarning etishmasligi, Crates.io-ga bog'liqlik ishonchi bilan bog'liq odatiy muammolar va xavfsiz kod yozish uchun ma'lum bir intizomga rioya qilish zarurati kiradi. Kutilganlardan oshib ketgan xususiyatlar qatoriga kodni qayta ishlash va tezkor prototiplash vaqtida qo'shilgan "buzg'unchilik" larni qayta ishlash vositalari kiradi.

Manba: opennet.ru

a Izoh qo'shish