Rust 1.75 va unikernel Hermit 0.6.7 dasturlash tilining chiqarilishi

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

  • Shaxsiy belgilarda "async fn" va "->impl Trait" belgilaridan foydalanish imkoniyati qo'shildi. Masalan, “->impl Trait” yordamida siz iteratorni qaytaruvchi xususiyat usulini yozishingiz mumkin: trait Container { fn items(&self) -> impl Iterator; } impl MyContainer uchun konteyner { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    Shuningdek, "async fn" yordamida belgilar yaratishingiz mumkin: trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // kengaytiriladi: // fn fetch(&self, url: Url) -> impl Future; }

  • Ko'rsatkichlarga nisbatan bayt ofsetlarini hisoblash uchun API qo'shildi. Yalang'och ko'rsatkichlar bilan ishlaganda (“*const T” va “*mut T”) ko'rsatkichga ofset qo'shish uchun amallar talab qilinishi mumkin. Ilgari buning uchun “size_of::()” hajmiga mos baytlar sonini qo‘shib, “::add(1)” kabi konstruksiyadan foydalanish mumkin edi. Yangi API ushbu operatsiyani soddalashtiradi va avval turlarni "*const u8" yoki "*mut u8" ga o'tkazmasdan, bayt ofsetlarini manipulyatsiya qilish imkonini beradi.
    • ko'rsatgich::byte_add
    • ko'rsatgich::byte_offset
    • ko'rsatgich::byte_offset_from
    • ko'rsatgich::byte_sub
    • pointer::wrapping_byte_add
    • pointer::wrapping_byte_offset
    • pointer::wrapping_byte_sub
  • Rustc kompilyatorining ishlashini oshirish bo'yicha ishlar davom ettirildi. Bog'lanishdan keyingi bosqichda ishlaydigan va oldindan tayyorlangan ijro profilidagi ma'lumotlarni ishlatadigan BOLT optimallashtiruvchisi qo'shildi. BOLT-dan foydalanish protsessor keshidan samaraliroq foydalanish uchun librustc_driver.so kutubxonasi kodining tartibini o'zgartirish orqali kompilyatorning bajarilishini taxminan 2% ga tezlashtirish imkonini beradi.

    LLVM-da optimallashtirish sifatini yaxshilash uchun rustc kompilyatorini "-Ccodegen-units=1" opsiyasi bilan qurish kiritilgan. O'tkazilgan testlar "-Ccodegen-units = 1" qurilishida ishlashning taxminan 1.5% ga oshishini ko'rsatadi. Qo'shilgan optimallashtirishlar sukut bo'yicha faqat x86_64-noma'lum-linux-gnu platformasi uchun yoqilgan.

    Yuqorida aytib o'tilgan optimallashtirish Google tomonidan Rust-da yozilgan Android platformasi komponentlarini yaratish vaqtini qisqartirish uchun sinovdan o'tkazildi. Android-ni yaratishda “-C codegen-units=1” dan foydalanish bizga asboblar to'plamining hajmini 5.5% ga qisqartirish va unumdorligini 1.8% ga oshirish imkonini berdi, shu bilan birga asboblar to'plamining o'zini qurish vaqti deyarli ikki baravar ko'paydi.

    Aloqa vaqtida axlat yig'ish (“--gc-sections”) funksiyasini 1.9% gacha oshirdi, ulanish vaqtini optimallashtirish (LTO) 7.7% gacha va profilga asoslangan optimallashtirish (PGO) 19.8% gacha ko'tarildi. Yakuniy bosqichda BOLT yordam dasturi yordamida optimallashtirish qo'llanildi, bu esa qurilish tezligini 24.7% ga oshirishga imkon berdi, ammo asboblar to'plamining hajmi 10.9% ga oshdi.

    Rust 1.75 va unikernel Hermit 0.6.7 dasturlash tilining chiqarilishi

  • APIning yangi qismi barqaror toifaga ko'chirildi, shu jumladan xususiyatlarning usullari va amalga oshirilishi barqarorlashtirildi:
    • Atom*::from_ptr
    • FileTimes
    • FileTimesExt
    • Fayl :: set_modified
    • Fayl :: set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Variant::as_slice
    • Variant ::as_mut_slice
    • ko'rsatgich::byte_add
    • ko'rsatgich::byte_offset
    • ko'rsatgich::byte_offset_from
    • ko'rsatgich::byte_sub
    • pointer::wrapping_byte_add
    • pointer::wrapping_byte_offset
    • pointer::wrapping_byte_sub
  • Konstantalar o'rniga uni istalgan kontekstda ishlatish imkoniyatini belgilovchi "const" atributi funksiyalarda qo'llaniladi:
    • Ipv6Addr::to_ipv4_mapped
    • MaybeUnit::assume_init_read
    • BalkiUninit :: nolga teng
    • mem::diskriminant
    • mem :: nolga teng
  • Qo'llab-quvvatlashning uchinchi darajasi csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd va mipsel-noma'lum-netbsd 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.

Bundan tashqari, Hermit loyihasining yangi versiyasini qayd etishimiz mumkin, u Rust tilida yozilgan ixtisoslashtirilgan yadroni (unikernel) ishlab chiqadi, gipervisor yoki qo'shimcha qatlamlarsiz yalang'och apparat ustida ishlashi mumkin bo'lgan mustaqil ilovalarni yaratish uchun vositalarni taqdim etadi. va operatsion tizimsiz. Qurilganda, dastur OT yadrosi va tizim kutubxonalariga bog'lanmasdan, barcha kerakli funktsiyalarni mustaqil ravishda amalga oshiradigan kutubxona bilan statik ravishda bog'lanadi. Loyiha kodi Apache 2.0 va MIT litsenziyalari ostida tarqatiladi. Assambleya Rust, Go, Fortran, C va C++ tillarida yozilgan ilovalarni mustaqil bajarish uchun qo'llab-quvvatlanadi. Loyiha, shuningdek, QEMU va KVM yordamida Hermit-ni ishga tushirish imkonini beruvchi o'z yuklash moslamasini ishlab chiqmoqda.

Manba: opennet.ru

a Izoh qo'shish