Rust programlama dili 1.38 sürümü

yayınlanan sistem programlama dili sürümü Pas 1.38Mozilla projesi tarafından kuruldu. Dil, bellek güvenliğine odaklanır, otomatik bellek yönetimi sağlar ve çöp toplayıcı veya çalışma zamanı kullanmadan yüksek görev paralelliği elde etmek için bir araç sağlar.

Rust'un otomatik bellek yönetimi, geliştiriciyi işaretçi manipülasyonundan kurtarır ve boş bellek erişimleri, boş işaretçi referansları, arabellek taşmaları ve benzeri gibi düşük seviyeli bellek manipülasyonundan kaynaklanan sorunlara karşı koruma sağlar. Kütüphanelerin dağıtılması, montajın sağlanması ve bağımlılıkların projeye göre yönetilmesi için bir paket yöneticisi geliştirilmektedir. Kargo, program için gereken kütüphanelere tek tıklamayla ulaşmanızı sağlar. Kitaplıkları barındırmak için bir depo desteklenir sandıklar.io.

Ana yenilikler:

  • Bağımlı bir kasa paketinin oluşturulmasının, bağımlılık meta verileri kullanılabilir hale gelir gelmez, derlemenin tamamlanmasını beklemeden başladığı ardışık düzen derleme modu (boru hattı) eklendi. Bir paketi derlerken bağımlılıkların tamamen bir araya getirilmesine gerek yoktur; yalnızca türlerin, bağımlılıkların ve dışa aktarılan öğelerin listesini içeren meta verileri tanımlamak yeterlidir. Meta veriler derleme sürecinin erken aşamalarında kullanıma sunulur, böylece bağlantılı paketler artık çok daha erken derlenebilir. Tekli paketler oluştururken önerilen mod performansı etkilemez, ancak derleme dallanmış bağımlılıklara sahip paketleri kapsıyorsa genel derleme süresi %10-20 oranında azaltılabilir;
  • Fonksiyonların hatalı kullanımının tespit edilmesini sağlar std::mem::başlatılmamış и std::mem::sıfırlandı. Örneğin, std::mem::uninitialized hızlı bir şekilde diziler oluşturmak için uygundur, ancak derleyiciyi yanıltıcıdır çünkü başlatılmış gibi görünür, ancak gerçekte değer başlatılmamış olarak kalır. mem::uninitialized işlevi zaten kullanımdan kaldırılmış olarak işaretlendi ve bunun yerine bir ara tür kullanılması önerilir. Belki Birim. Mem::zeroed'a gelince, bu işlev sıfır değeri kabul edemeyen türlerde sorunlara neden olabilir.

    Yeni sürüm, tanımlanmamış davranışı tanımlamaya yardımcı olmak için derleyiciye mem::uninitialized veya mem::zeroed ile ilgili bazı sorunları tespit eden bir tüy bırakma kontrolü ekler. Örneğin, boş değerleri kabul edemeyen işaretçi nesnelerini temsil eden mem::uninitialized veya mem::zeroed türlerini &T ve Box‹T› ile kullanmaya çalıştığınızda artık bir hata alıyorsunuz;

  • "#[kullanımdan kaldırıldı]" özelliği, sandık paketlerinin eski olarak işaretlenmesine ve gelecekte silinmek üzere programlanmasına olanak sağlayacak şekilde genişletildi. Rust 1.38'den itibaren bu özellik makrolar için de kullanılabilir;
  • Alt modüllerde “#[global_allocator]” özelliğini kullanma yeteneği eklendi;
  • Eklenen işlev std::any::type_name, hata ayıklama amacıyla yararlı olabilecek türün adını bulmanızı sağlar. Örneğin, programın yürütülmesi sırasında işlevin hangi tür için çağrıldığını öğrenebilirsiniz:

    fn gen_value‹T: Varsayılan>() -› T {
    println!("{} örneğinin başlatılması", std::any::type_name::‹T›());
    Varsayılan::varsayılan()
    }

    fn ana() {
    let _: i32 = gen_değeri(); # "i32" yazdırılacak
    let _: Dize = gen_değeri(); # "alloc::string::String" yazdıracak
    }

  • Standart kütüphanenin genişletilmiş fonksiyonları:
    • dilim::{concat, connect, join} artık &T;'ye ek olarak &[T] değerini de alabilir.
    • "*const T" ve "*mut T" artık marker::Unpin'i uyguluyor;
    • "Arc‹[T]›" ve "Rc‹[T]›" artık FromIterator‹T›'yi uyguluyor;
    • iter::{StepBy, Peekable, Take} artık DoubleEndedIterator'ı uyguluyor.
    • ascii::EscapeDefault Klonlama ve Görüntülemeyi uygular.
  • Stabilize edilmiş yöntemler de dahil olmak üzere API'lerin yeni bir kısmı stabil kategorisine aktarıldı
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Süre::as_secs_f{32|64},
    • Süre::div_duration_f{32|64},
    • Süre::div_f{32|64},
    • Süre::from_secs_f{32|64},
    • Süre::mul_f{32|64},
    • kalanla bölme işlemleri
      tüm tamsayı ilkelleri için div_euclid ve rem_euclid;

  • Kargo paketi yöneticisinde farklı özelliklerin etkinleştirilmesi için “--features” seçeneğinin birden çok kez belirtilmesine yönelik destek eklendi;
  • Derleyici üçüncüyü sağlar seviye hedef platformlar için destek aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc hedefleri, armv7-unknown-linux -gnueabi, armv7-bilinmeyen-linux-musleabi, altıgen-bilinmeyen-linux-musl ve riscv32i-bilinmeyen-yok-elf. Üçüncü düzey temel desteği içerir, ancak otomatik testler ve resmi yapıların yayınlanması yoktur.

Kaynak: opennet.ru

Yorum ekle