Mozilla loyihasi tomonidan asos solingan, lekin hozirda mustaqil notijorat Rust Foundation homiyligida ishlab chiqilgan Rust 1.98 dasturlash tili chiqarildi. Til xotira xavfsizligiga e'tibor qaratadi va vazifalarni bajarishning yuqori parallelligiga erishish uchun vositalarni taqdim etadi, shu bilan birga axlat yig'uvchi va ish vaqtidan foydalanmasdan (ish vaqti standart kutubxonani asosiy ishga tushirish va texnik xizmat ko'rsatishga qisqartiriladi).
Rustning xotirani boshqarish usullari ko'rsatkichlarni boshqarishdagi xatolarni bartaraf etish va past darajadagi xotirani boshqarishdan kelib chiqadigan muammolardan, masalan, xotira bo'shatilgandan keyin unga kirish, nol ko'rsatkichlarga havolalarni bekor qilish, buferning ortiqcha yuklanishi va boshqalardan himoya qilish uchun mo'ljallangan. Loyiha kutubxonalarni tarqatish, tuzishni osonlashtirish va qaramliklarni boshqarish uchun Cargo paket menejerini ishlab chiqmoqda. crates.io ombori kutubxonalarni joylashtirish uchun saqlanadi.
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:
- f32 va f64 suzuvchi nuqtali turlari uchun qo'shish, ayirish, ko'paytirish, bo'lish va qoldiq uchun algebraik usullar qo'llaniladi, bu esa C/C++ kompilyatorlaridagi "-ffast-math" opsiyasiga o'xshash optimallashtirishlarni amalga oshiradi. Bu usullar sikl vektorizatsiyasi kabi optimallashtirishlar uchun zarur bo'lganda amallar tartibini o'zgartirish imkonini beradi. Masalan, oddiy qo'shish yordamida "a + b + c + d" ni hisoblashda kompilyator har doim hisoblashni bir xil tartibda bajaradi: "((a + b) + c) + d", lekin algebraic_add usuli yordamida u ifodani "(a + b) + (c + d)" deb guruhlashi va SIMD ko'rsatmalaridan foydalanib parallel ravishda "(a + b)" va "(c + d)" ni bajarishi mumkin. Algebraik usullardan foydalanishning narxi hisoblash natijalarining noaniqligi bo'lib, ular xato chegarasi ichida o'zgarishi mumkin.
- Barcha ibtidoiy butun son turlarida raqamlarni satrlarga aylantirish uchun o'rnatilgan "format_into" usuli mavjud, bu usul itoa paketi o'rniga ishlatilishi mumkin. NumBuffer buferi parametr sifatida uzatiladi. , uning hajmi ishlatilgan turdagi istalgan qiymatni o'nlik kasr shaklida yozish uchun yetarli bo'lishi kafolatlangan. Chiqish natijasi formatlangan &str satri bo'lib, uning ishlash muddati buferga bog'langan.
- ManuallyDrop jabduqlari va Box aqlli ko'rsatkichi o'rtasidagi o'zaro ta'sir endi aniqlanmagan xatti-harakatlarga olib kelmaydi.
- APIning yangi qismi barqaror toifaga ko'chirildi, shu jumladan xususiyatlarning usullari va amalga oshirilishi barqarorlashtirildi:
- str::substr_range
- [T]::subslice_range
- core::fmt::NumBuffer
- <{integer}>::format_into
- std::process::CommandArgs uchun yuborish/sinxronlashtirish
- {fN}::algebraic_add
- {fN}::algebraik_sub
- {fN}::algebraic_mul
- {fN}::algebraic_div
- {fN}::algebraic_rem
- NonZero<{integer}>::from_str_radix
- Satr::from_utf16le
- Satr::from_utf16le_lossy
- Satr::from_utf16be
- Satr::from_utf16be_lossy
- [T]::strip_circumfix
- str::strip_circumfix
- Atom ::from_mut
- Atom ::get_mut_slice
- Atom ::mut_slice dan
- std::range::legacy
- thumbv7a-none-eabi, thumbv7a-none-eabihf, thumbv7r-none-eabi, thumbv7r-none-eabihf va thumbv8r-none-eabihf maqsadli platformalari ikkinchi darajali qo'llab-quvvatlashga o'tkazildi, bu esa yig'ish kafolatini o'z ichiga oladi, ammo sinov to'plamidan o'tish kafolatlarini bermaydi.
- Hozirda 3-darajali qo'llab-quvvatlashga ega bo'lgan powerpc64-unknown-linux-gnuelfv2 va aarch64-unknown-linux-pauthtest platformalari uchun qo'llab-quvvatlash qo'shildi. 3-darajali asosiy qo'llab-quvvatlashni o'z ichiga oladi, ammo avtomatlashtirilgan sinovlar, rasmiy yig'ilish versiyalari yoki yig'ilishni tekshirishni o'z ichiga olmaydi.
Bundan tashqari, so'nggi 90 kun ichida 53 million martadan ortiq yuklab olingan va 403 ta paket tomonidan qaramlik sifatida foydalanilgan mashhur crate arrayref paketi buzib kirildi. Hujumchilar crates.io omboriga zararli kodni o'z ichiga olgan yangi paketlarni joylashtirdilar: proc-macro1, proc-macro-en, aovine, arone, aronenao va tinymember. Keyinchalik, arrayref 0.3.10, internment 0.8.7 va append-only-vec 0.1.9 ning yangi versiyalari omborga nashr etildi, ularning har biri zararli proc-macro1 paketini qaramlik sifatida qo'shdi. arrayref paketining zararli versiyasi 20-avgust kuni soat 10:15 da (MSK) joylashtirildi va soat 11:41 gacha faol bo'lib qoldi, shundan so'ng u crates.io administratorlari tomonidan olib tashlandi.
arrayref ning texnik xizmat ko'rsatuvchisi bilan vaziyatni oydinlashtirish uchun hali bog'lanmagan, ammo ularning ma'lumotlari tajovuzkorlar tomonidan qo'lga olingan deb taxmin qilinmoqda. proc-macro1 paketida build skriptida zararli o'zgarish mavjud bo'lib, tashqi katalogdan bajariladigan faylni yukladi. serverYuklab olingan fayl Unix tizimlarida /tmp/rust-setup sifatida saqlandi va Windows — %TEMP%\rust-setup.ps1 yoki %TEMP%\rust-setup-launch.vbs.
Manba: opennet.ru
