Rust 1.75 ve unikernel Hermit 0.6.7 programlama dilinin piyasaya sürülmesi

Mozilla projesi tarafından kurulan ancak şu anda kar amacı gütmeyen bağımsız bir kuruluş olan Rust Foundation'ın himayesinde geliştirilen Rust 1.75 genel amaçlı programlama dilinin sürümü yayınlandı. Dil, bellek güvenliğine odaklanır ve bir çöp toplayıcı ve çalışma zamanı kullanımından kaçınırken yüksek iş paralelliği elde etmenin yollarını sağlar (çalışma zamanı, standart kitaplığın temel başlatma ve bakımına indirgenir).

Rust'ın bellek işleme yöntemleri, geliştiriciyi işaretçileri işlerken hatalardan korur ve serbest bırakıldıktan sonra bir bellek alanına erişme, boş işaretçilerin başvurusunu kaldırma, arabellek taşmaları vb. gibi düşük seviyeli bellek manipülasyonundan kaynaklanan sorunlara karşı koruma sağlar. Kitaplıkları dağıtmak, derlemeler sağlamak ve bağımlılıkları yönetmek için proje Kargo paketi yöneticisini geliştirir. Crates.io deposu kitaplıkları barındırmak için desteklenir.

Rust'ta bellek güvenliği, derleme zamanında referans kontrolü, nesne sahipliğinin izlenmesi, nesne ömürlerinin (kapsamların) izlenmesi ve kod yürütme sırasında bellek erişiminin doğruluğunun değerlendirilmesi yoluyla sağlanır. Rust ayrıca tamsayı taşmalarına karşı koruma sağlar, kullanımdan önce değişken değerlerinin zorunlu olarak başlatılmasını gerektirir, standart kitaplıkta hataları daha iyi işler, değişmez referanslar ve değişkenler kavramını varsayılan olarak uygular, mantıksal hataları en aza indirmek için güçlü statik yazım sunar.

Ana yenilikler:

  • Özel özelliklerde “async fn” ve “->impl Trait” gösterimini kullanma yeteneği eklendi. Örneğin, “->impl Trait” kullanarak bir yineleyici döndüren bir özellik yöntemi yazabilirsiniz: feature Container { fn items(&self) -> impl Iterator; } MyContainer için impl Konteyner { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    Ayrıca "async fn" kullanarak da özellikler oluşturabilirsiniz: feature HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // şu şekilde genişletilecektir: // fn fetch(&self, url: Url) -> impl Future; }

  • İşaretçilere göre bayt uzaklıklarını hesaplamak için API eklendi. Çıplak işaretçilerle (“*const T” ve “*mut T”) çalışırken işaretçiye bir uzaklık eklemek için işlemler gerekebilir. Daha önce bunun için "::add(1)" gibi bir yapı kullanmak ve "size_of::()" boyutuna karşılık gelen bayt sayısını eklemek mümkündü. Yeni API, bu işlemi basitleştirir ve türleri önce "*const u8" veya "*mut u8"e çevirmeden bayt uzaklıklarını değiştirmeyi mümkün kılar.
    • işaretçi::byte_add
    • işaretçi::byte_offset
    • işaretçi::byte_offset_from
    • işaretçi::byte_sub
    • işaretçi::wrapping_byte_add
    • pointer::wrapping_byte_offset
    • işaretçi::wrapping_byte_sub
  • Rusc derleyicisinin performansını artırmak için çalışmalara devam edildi. Bağlantı sonrası aşamada çalışan ve önceden hazırlanmış bir yürütme profilinden gelen bilgileri kullanan BOLT iyileştirici eklendi. BOLT'u kullanmak, işlemci önbelleğinin daha verimli kullanımı için librustc_driver.so kitaplık kodunun düzenini değiştirerek derleyici yürütmesini yaklaşık %2 oranında hızlandırmanıza olanak tanır.

    LLVM'de optimizasyonun kalitesini artırmak için "-Ccodegen-units=1" seçeneğiyle Rusc derleyicisinin oluşturulması dahil edildi. Yapılan testler “-Ccodegen-units=1” yapısı durumunda performansta yaklaşık %1.5 oranında artış olduğunu göstermektedir. Eklenen optimizasyonlar varsayılan olarak yalnızca x86_64-unknown-linux-gnu platformu için etkindir.

    Daha önce bahsedilen optimizasyonlar, Rust'ta yazılan Android platformu bileşenlerinin oluşturulma süresini azaltmak için Google tarafından test edildi. Android'i derlerken "-C codegen-units=1" kullanmak, araç setinin boyutunu %5.5 oranında azaltmamıza ve performansını %1.8 artırmamıza olanak tanırken, araç setinin oluşturulma süresi de neredeyse iki katına çıktı.

    Bağlantı süresi çöp toplamanın ("--gc-sections") etkinleştirilmesi, performans artışını %1.9'a, bağlantı süresi optimizasyonunu (LTO) %7.7'ye ve profil tabanlı optimizasyonları (PGO) %19.8'e kadar etkinleştirdi. Finalde, BOLT yardımcı programı kullanılarak optimizasyonlar uygulandı, bu da oluşturma hızını %24.7'ye çıkarmayı mümkün kıldı, ancak araç kitinin boyutu %10.9 arttı.

    Rust 1.75 ve unikernel Hermit 0.6.7 programlama dilinin piyasaya sürülmesi

  • API'nin yeni bir bölümü kararlı kategorisine taşındı ve özelliklerin yöntemleri ve uygulamaları kararlı hale getirildi:
    • Atomik*::from_ptr
    • Dosya Zamanları
    • DosyaTimesExt
    • Dosya::set_modified
    • Dosya::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Seçenek::as_slice
    • Seçenek::as_mut_slice
    • işaretçi::byte_add
    • işaretçi::byte_offset
    • işaretçi::byte_offset_from
    • işaretçi::byte_sub
    • işaretçi::wrapping_byte_add
    • pointer::wrapping_byte_offset
    • işaretçi::wrapping_byte_sub
  • Sabitler yerine herhangi bir bağlamda kullanılma olasılığını belirleyen "const" niteliği işlevlerde kullanılır:
    • Ipv6Addr::to_ipv4_mapped
    • MaybeUninit::assume_init_read
    • MaybeUninit::sıfırlandı
    • mem::ayrımcı
    • hafıza::sıfırlandı
  • Üçüncü düzey destek csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd ve mipsel-unknown-netbsd platformları için uygulandı. Üçüncü düzey temel desteği içerir ancak otomatik testler, resmi yapıların yayınlanması veya kodun oluşturulup oluşturulamayacağının kontrol edilmesi söz konusu değildir.

Ek olarak, Hermit projesinin Rust dilinde yazılmış özel bir çekirdek (unikernel) geliştiren, ek katmanlar olmadan bir hiper yönetici veya çıplak donanım üzerinde çalışabilen bağımsız uygulamalar oluşturmaya yönelik araçlar sağlayan yeni bir versiyonunu not edebiliriz. ve işletim sistemi olmadan. Uygulama oluşturulduğunda, işletim sistemi çekirdeğine ve sistem kitaplıklarına bağlı kalmadan, gerekli tüm işlevleri bağımsız olarak uygulayan bir kitaplığa statik olarak bağlanır. Proje kodu Apache 2.0 ve MIT lisansları altında dağıtılmaktadır. Rust, Go, Fortran, C ve C++ ile yazılmış uygulamaların bağımsız olarak yürütülmesi için derleme desteklenir. Proje aynı zamanda Hermit'i QEMU ve KVM kullanarak başlatmanıza olanak tanıyan kendi önyükleyicisini de geliştiriyor.

Kaynak: opennet.ru

Yorum ekle