Mozilla loyihasi tomonidan asos solingan, ammo hozirda Rust Foundation mustaqil notijorat tashkiloti homiyligida ishlab chiqilgan Rust 1.78 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:
- Kompilyator tomonidan ishlab chiqarilgan xato xabarlariga ta'sir qilish vositasini ta'minlovchi yangi "#[diagnostik]" atribut nom maydoni taklif qilindi. Yangi bo'shliqda birinchi bo'lib "#[diagnostic::on_unimlemented]" atributi bo'lib, u tur uchun amalga oshirilmagan xususiyatdan foydalanish kerak bo'lgan vaziyatda yuborilgan xato xabarlarini sozlash uchun ishlatilishi mumkin. #[diagnostic::on_unimlemented( message = "Mening xabarim `ImportantTrait<{A}>` uchun `{Self}` uchun amalga oshirilmagan", label = "Mening yorlig'im", eslatma = "Eslatma 1", eslatma = "Eslatma 2" )] xususiyat ImportantTrait {} fn use_my_trait(_: impl ImportantTrait) ) {} fn main() { use_my_trait(String::new()); } xato[E32]: `ImportantTrait uchun mening xabarim ` `String` —> src/main.rs:0277:32 uchun amalga oshirilmagan | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^ Mening yorlig'im | | | bu chaqiruv tomonidan kiritilgan chegara tomonidan talab | = yordam: belgi `ImportantTrait ` `String` uchun amalga oshirilmagan = eslatma: Eslatma 18 = Eslatma: Eslatma 12
- Xavfli funksiyalarga nisbatan qoʻllaniladigan oldindan tasdiqlash tekshiruvlari endi kod yaratilgunga qadar qoldirilishi mumkin, bu esa ushbu tekshiruvlarni standart kutubxonani “#[cfg(debug_assertions)]” rejimida qurish zaruratisiz amalga oshirish imkonini beradi. Tekshiruvlarni ishga tushirish uchun kodingizning sinov yoki disk raskadrovka tuzilmalari uchun disk raskadrovka tasdiqlarini yoqish kifoya.
- Ko'rsatkichlar va bo'laklarning hizalanishiga ta'sir qiluvchi standart kutubxonadagi funktsiyalarning xatti-harakati endi ish vaqtida oldindan taxmin qilinadi va kiritilgan ma'lumotlarga bog'liq. Ko'rsatkichni tekislash uchun ofsetni hisoblaydigan ko'rsatgich::align_offset funksiyasi endi faqat operatsiya bajarilmasa, usize::MAX ni qaytaradi. slice::align_to va slice::align_to_mut ikkala funksiyasi bo‘laklarni tekislangan o‘rta bo‘lak va asl boshlang‘ich va yakuniy bo‘laklari bilan tasvirga aylantiradi, endi har doim eng katta o‘rta qismni qaytaradi.
- Quyidagilar barqaror toifaga o'tkazildi:
- impl &Stdin uchun o'qing
- Ba'zi std::error::Xato bilan bog'liq ilovalar uchun statik bo'lmagan (statik bo'lmagan) umrbod foydalanishga ruxsat bering.
- Impl amalga oshirish ?Sized qiymatidan foydalanishga ruxsat berilgan.
- impl From io uchun:: Xato
- Barrier::new() funksiyasi konstantalar oʻrniga istalgan kontekstda “const” atributi bilan foydalanish uchun barqarorlashtirildi.
- Maqsadli platformalar uchun x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm va i-686windows- endi kamida Windows 10 versiyasini talab qiladi.
- Qo'llab-quvvatlashning uchinchi darajasi wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf va loongarch64-noma'lum-linux-musl 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.
- Add wasm32-wasip1 maqsadli platformasini qo'llab-quvvatlashning ikkinchi darajasi amalga oshirildi. Qo'llab-quvvatlashning ikkinchi darajasi montaj kafolatini o'z ichiga oladi.
- wasm32-wasi-preview1-threads platformasi wasm32-wasip1-threads deb oʻzgartirildi.
- Kompilyator LLVM 18 dan foydalanishga o'tkazildi. X18-86 va x32-86 arxitekturalari uchun LLVM 64 dan foydalanilganda u128 va i128 turlari bilan bog'liq ABI o'zgartirildi.
- Yuk shartnomasi menejerida blokirovka fayllarining 4-versiyasi (lockfile v4) barqarorlashtirildi.
- Cargo so'nggi ma'lumotlardan foydalanish haqida ma'lumotga ega barqarorlashtirilgan global keshga ega. Kesh SQLite yordamida $CARGO_HOME/.global-keshda joylashtirilgan va indeks, sandiq fayli, kod katalogi, git clone va git checkoutdagi so‘nggi o‘zgarishlarni aks ettirish uchun avtomatik ravishda yangilanadi.
Bundan tashqari, Borgo dasturlash tili Go tiliga qaraganda ko'proq ifodali bo'lishga harakat qiladi, lekin Rust tiliga qaraganda kamroq murakkab. Borgo Go va Rustning eng yaxshi xususiyatlarini birlashtirib, har bir tilning kamchiliklarini to'ldiradi. Misol uchun, Go oddiy va tushunarli, ammo ilg'or turdagi xavfsizlik xususiyatlarini ta'minlamaydi. Rust tili xavfsiz dasturlash uchun vositalarni taqdim etadi, lekin juda murakkab. Loyiha The Simple Haskell Handbook muallifi va Quad CI uzluksiz integratsiya tizimini ishlab chiquvchi Marko Sampellegrini tomonidan ishlab chiqilmoqda.

Borgo statik yozish, Go-like turlari va Rust-ga o'xshash sintaksisdan foydalanadi. Borgo kodidagi satrlar oxirida nuqtali vergul ixtiyoriy. Borgo kodi mavjud Go paketlari bilan to'liq mos keladigan Go taqdimotida tuzilgan. Kompilyator kodi Rust-da yozilgan va ISC litsenziyasi ostida tarqatiladi. fmt enum NetworkState-dan foydalaning { Loading, Failed(int), Success(T), } struct Response { title: string, duration: int,} fn main() { let res = Response { title: “Salom dunyo”, davomiyligi: 0, } let state = NetworkState.Success(res) let msg = match state { NetworkState.Loading => “hali yuklanmoqda”, NetworkState.Failed(kod) => fmt.Sprintf(“Xatolik kodi: %d”, kod), NetworkState.Success (res) => res.title, } fmt.Println(msg) }
Manba: opennet.ru
