Rust 1.75 və unikernel Hermit 0.6.7 proqramlaşdırma dilinin buraxılışı

Mozilla layihəsi tərəfindən əsası qoyulmuş, lakin indi Rust Foundation müstəqil qeyri-kommersiya təşkilatının himayəsi altında hazırlanmış Rust 1.75 ümumi məqsədli proqramlaşdırma dilinin buraxılışı dərc edilmişdir. Bu dil yaddaşın təhlükəsizliyinə diqqət yetirir və zibil toplayıcıdan və işləmə müddətindən istifadə etmədən yüksək iş paralelliyinə nail olmaq üçün vasitələr təqdim edir (iş vaxtı standart kitabxananın əsas işə salınması və saxlanmasına qədər azaldılır).

Rust-un yaddaşla işləmə üsulları tərtibatçını göstəricilərlə manipulyasiya edərkən xətalardan xilas edir və yaddaşın aşağı səviyyəli işləməsi nəticəsində yaranan problemlərdən qoruyur, məsələn, yaddaş sahəsi boşaldıqdan sonra ona daxil olmaq, sıfır göstəricilərə istinad etmək, bufer aşmaq və s. Kitabxanaları yaymaq, qurmaları təmin etmək və asılılıqları idarə etmək üçün layihə Yük paketi meneceri hazırlayır. Crates.io deposu kitabxanaların yerləşdirilməsi üçün dəstəklənir.

Yaddaşın təhlükəsizliyi Rust-da kompilyasiya zamanı istinad yoxlaması, obyekt sahibliyinin izlənməsi, obyektin istifadə müddətinin (əhatə dairələrinin) izlənməsi və kodun icrası zamanı yaddaşa girişin düzgünlüyünün qiymətləndirilməsi vasitəsilə təmin edilir. Rust həmçinin tam ədədlərin daşmasına qarşı qorunma təmin edir, istifadə etməzdən əvvəl dəyişən dəyərlərin məcburi işə salınmasını tələb edir, standart kitabxanada səhvləri daha yaxşı idarə edir, dəyişməz istinadlar və dəyişənlər konsepsiyasını standart olaraq tətbiq edir, məntiqi səhvləri minimuma endirmək üçün güclü statik yazma təklif edir.

Əsas yeniliklər:

  • Şəxsi xüsusiyyətlərdə “async fn” və “->impl Trait” notasiyasından istifadə etmək imkanı əlavə edildi. Məsələn, “->impl Trait” istifadə edərək, iteratoru qaytaran xüsusiyyət metodu yaza bilərsiniz: trait Container { fn items(&self) -> impl Iterator; } impl MyContainer üçün Konteyner { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    Siz həmçinin "async fn" istifadə edərək əlamətlər yarada bilərsiniz: trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // genişlənəcək: // fn fetch(&self, url: Url) -> impl Future; }

  • Göstəricilərə nisbətən bayt ofsetlərinin hesablanması üçün API əlavə edildi. Çılpaq göstəricilərlə işləyərkən (“*const T” və “*mut T”) göstəriciyə ofset əlavə etmək üçün əməliyyatlar tələb oluna bilər. Əvvəllər bunun üçün “size_of::()” ölçüsünə uyğun baytların sayını əlavə etməklə “::add(1)” kimi konstruksiyadan istifadə etmək mümkün idi. Yeni API bu əməliyyatı sadələşdirir və ilk növbədə növləri "*const u8" və ya "*mut u8"-ə köçürmədən bayt ofsetləri ilə manipulyasiya etməyə imkan verir.
    • göstərici::byte_add
    • göstərici::bayt_offset
    • göstərici::byte_offset_from
    • göstərici::byte_sub
    • göstərici::wrapping_byte_add
    • göstərici::wrapping_byte_offset
    • göstərici::wrapping_byte_sub
  • Rustc kompilyatorunun performansını artırmaq üçün davam etdirilən işlər. Post-link mərhələsində işləyən və əvvəlcədən hazırlanmış icra profilindən məlumat istifadə edən BOLT optimallaşdırıcısı əlavə edildi. BOLT-dan istifadə prosessor keşindən daha səmərəli istifadə üçün librustc_driver.so kitabxana kodunun tərtibatını dəyişdirməklə kompilyatorun icrasını təxminən 2% sürətləndirməyə imkan verir.

    LLVM-də optimallaşdırma keyfiyyətini yaxşılaşdırmaq üçün rustc kompilyatorunun "-Ccodegen-units=1" seçimi ilə qurulması daxildir. Həyata keçirilən sınaqlar “-Ccodegen-units=1” quruluşu vəziyyətində performansın təxminən 1.5% artdığını göstərir. Əlavə edilmiş optimallaşdırmalar defolt olaraq yalnız x86_64-naməlum-linux-gnu platforması üçün aktiv edilir.

    Daha əvvəl qeyd olunan optimallaşdırmalar Google tərəfindən Rust-da yazılmış Android platforması komponentlərinin qurulması müddətini azaltmaq üçün sınaqdan keçirilmişdir. Android-i qurarkən “-C codegen-units=1”-dən istifadə bizə alətlər dəstinin ölçüsünü 5.5% azaltmağa və performansını 1.8% artırmağa imkan verdi, halbuki alət dəstinin özünün qurulması müddəti demək olar ki, iki dəfə artdı.

    Bağlantı vaxtı zibil yığımının (“--gc-sections”) aktivləşdirilməsi performans artımını 1.9%-ə qədər, keçid vaxtının optimallaşdırılmasını (LTO) 7.7%-ə qədər və profil əsaslı optimallaşdırmaları (PGO) 19.8%-ə qədər təmin etdi. Finalda, BOLT yardım proqramından istifadə edərək optimallaşdırmalar tətbiq olundu, bu, qurma sürətini 24.7% -ə çatdırmağa imkan verdi, lakin alətlər dəstinin ölçüsü 10.9% artdı.

    Rust 1.75 və unikernel Hermit 0.6.7 proqramlaşdırma dilinin buraxılışı

  • API-nin yeni hissəsi stabillər kateqoriyasına köçürüldü, o cümlədən xüsusiyyətlərin üsulları və tətbiqləri stabilləşdirildi:
    • Atom*::from_ptr
    • FileTimes
    • FileTimesExt
    • Fayl::set_modified
    • Fayl::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Seçim::kimi_dilim
    • Seçim::as_mut_slice
    • göstərici::byte_add
    • göstərici::bayt_offset
    • göstərici::byte_offset_from
    • göstərici::byte_sub
    • göstərici::wrapping_byte_add
    • göstərici::wrapping_byte_offset
    • göstərici::wrapping_byte_sub
  • Onun sabitlər əvəzinə istənilən kontekstdə istifadə imkanını təyin edən "const" atributundan funksiyalarda istifadə olunur:
    • Ipv6Addr::to_ipv4_mapped
    • MaybeUnit::assume_init_read
    • BəlkəUnit :: sıfırlanmışdır
    • mem::diskriminant
    • mem::sıfırlanıb
  • Üçüncü dəstək səviyyəsi csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd və mipsel-naməlum-netbsd platformaları üçün həyata keçirilib. Üçüncü səviyyə əsas dəstəyi əhatə edir, lakin avtomatlaşdırılmış sınaq, rəsmi quruluşların dərc edilməsi və ya kodun tikilib-qurula bilməyəcəyini yoxlamaq olmadan.

Əlavə olaraq, Rust dilində yazılmış xüsusi nüvəni (unikernel) inkişaf etdirən Hermit layihəsinin yeni versiyasını qeyd edə bilərik, hipervizor və ya əlavə təbəqələr olmadan çılpaq aparat üzərində işləyə bilən müstəqil proqramlar yaratmaq üçün alətlər təqdim edir. və əməliyyat sistemi olmadan. Tətbiq qurulduqda, OS nüvəsinə və sistem kitabxanalarına bağlanmadan bütün lazımi funksionallığı müstəqil şəkildə həyata keçirən kitabxana ilə statik olaraq əlaqələndirilir. Layihə kodu Apache 2.0 və MIT lisenziyaları altında paylanır. Assembly Rust, Go, Fortran, C və C++ dillərində yazılmış proqramların müstəqil icrası üçün dəstəklənir. Layihə həmçinin QEMU və KVM istifadə edərək Hermit-i işə salmağa imkan verən öz yükləyicisini inkişaf etdirir.

Mənbə: opennet.ru

Добавить комментарий