Rust programlama dili 1.47 sürümü

yayınlanan sistem programlama dilinin 1.47 sürümü RustMozilla projesi tarafından kuruldu. Dil, bellek güvenliğine odaklanır, otomatik bellek yönetimi sağlar ve kullanmadan yüksek görev paralelliği elde etmek için bir araç sağlar. Çöp toplayıcı и runtime (çalışma zamanı, standart kütüphanenin temel başlatılmasına ve bakımına indirgenir).

Rust'un otomatik bellek yönetimi, işaretçileri değiştirirken oluşan hataları ortadan kaldırır ve serbest bırakıldıktan sonra bir bellek bölgesine erişim, boş işaretçi referansları, arabellek taşmaları vb. 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. Kitaplıkları barındırmak için bir depo desteklenir sandıklar.io.

Ana yenilikler:

  • Türler için uygulanan destek diziler herhangi beden. Daha önce, tüm tamsayı değerleri için genel işlevlerin tanımlanamaması nedeniyle, standart kitaplık yalnızca boyutu 32 öğeye kadar olan diziler için yerleşik özellik desteği sağlıyordu (her boyut için özellikler statik olarak tanımlanıyordu). Sabit jeneriklerin ("const jenerikler") işlevselliğinin yaratılması sayesinde, herhangi bir dizi boyutu için genel fonksiyonları tanımlamak mümkün hale geldi, ancak derleyicide uygulanmış olmalarına rağmen bunlar henüz kararlı dil özelliklerine dahil edilmemiştir ve Şimdi dahil olmuş her boyuttaki dizi özellikleri için standart kitaplıkta.

    Örneğin, Rust 1.47'deki aşağıdaki yapı bir dizinin içeriğini yazdıracaktır, ancak önceden bir hatayla sonuçlanıyordu:

    fn ana() {
    xs = [0; 34];

    println!("{:?}", xs);
    }

  • Daha kısa izlerin çıktısı (geri izleme), acil durumlarda çıktı sağlandı. Çoğu durumda ilgi çekici olmayan ancak çıktıyı karıştıran ve dikkati sorunun ana nedenlerinden uzaklaştıran öğeler izlemenin dışında bırakılır. Tam izleme döndürmek için "RUST_BACKTRACE=full" ortam değişkenini kullanabilirsiniz. Örneğin kod için

    fn ana() {
    panik!();
    }

    Daha önce izlemenin çıktısı 23 aşamada veriliyordu, ancak şimdi bu aşamaya düşürülecek
    Özü hemen kavramanızı sağlayan 3 adım:

    'main' iş parçacığı 'açık panik' nedeniyle panikledi, src/main.rs:2:5
    yığın geri izleme:
    0: std::panikleme::begin_panic
    /rustc/d…d75a/library/std/src/panicking.rs:497 adresinde
    1: oyun alanı::ana
    ./src/main.rs:2 adresinde
    2: core::ops::function::FnOnce::call_once
    /rustc/d…d75a/library/core/src/ops/function.rs:227 adresinde

  • Rusc derleyicisi kullanılarak oluşturulacak şekilde güncellendi LLVM 11 (Pas использует LLVM için arka uç olarak kod üretimi). Aynı zamanda, sürüm 8'e kadar olan eski LLVM'lerle derleme yeteneği korunur, ancak varsayılan olarak ( pas-lang/llvm-projesi) artık LLVM 11 kullanıyor. LLVM 11'in önümüzdeki günlerde piyasaya sürülmesi bekleniyor.
  • Windows platformunda, Rusc derleyicisi, "-C control-flow-guard" bayrağı kullanılarak etkinleştirilen kontrol akışı bütünlüğü kontrollerinin (Control Flow Guard) etkinleştirilmesine yönelik destek sağlar. Diğer platformlarda bu bayrak şimdilik göz ardı ediliyor.
  • API'lerin yeni bir kısmı, stabilize olanlar da dahil olmak üzere stabil kategoriye aktarıldı
    Kimlik::new_raw,
    Aralık::is_empty,
    RangeInclusive::is_empty,
    Sonuç::as_deref,
    Sonuç::as_deref_mut,
    Vec::sızıntı,
    pointer::offset_from,
    f32::TAU ve
    f64::TAU.

  • Yöntemlerde sabitler yerine herhangi bir bağlamda kullanılma olasılığını belirleyen “const” niteliği kullanılır:
    • sıfır dışındaki tüm tamsayılar için yeni;
    • tüm tamsayılar için Checked_add, Checked_sub, Checked_mul, Checked_neg, Checked_shl, Checked_shr, saturating_add, saturating_sub ve saturating_mul;
    • char ve u8 türleri için is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace ve is_ascii_control.
  • FreeBSD için dahil FreeBSD 11.4'ten araç seti (FreeBSD 10, LLVM 11'i desteklemez).

Kaynak: opennet.ru

Yorum ekle