Rust programlama dili 1.42 sürümü

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

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:

  • Katma dilimlerin (dinamik diziler, dilim) eşleşen parçalarına yönelik şablon desteği. Önceden tam eşleşmelere izin veriliyordu, ancak artık dizinin geri kalan öğelerini kapsamak için ".." işaretli yapıları kullanmak mümkün. Örneğin:

    fn foo(words: &[&str]) {
    uyuşan kelimeler {

    // dizinin başlangıç ​​elemanlarını kontrol eder ve yok sayar
    onları takip eden unsurlar
    ["Merhaba", "Dünya", "!", ..] => println!("Merhaba Dünya!"),

    // ilk iki öğe olan "Foo" ve "Bar"ı kontrol eder, gerisi önemli değildir
    ["Foo", "Bar", ..] => println!("Baz"),

    // her şeyi göz ardı edin, ancak son öğe "!" olmalıdır.
    [.., “!”] => println!(“!!!”),

    // başlangıç ​​dilimine "z" olması gereken son eleman dışındaki her şeyi dahil ediyoruz
    [başlat @ .., "z"] => println!("şununla başlar: {:?}", başlat),

    // son dilime “a” olması gereken ilk eleman dışındaki her şeyi koyuyoruz.
    ["a", end @ ..] => println!("şununla biter: {:?}", end),

    dinlenme => println!("{:?}", dinlenme),
    }
    }

  • Giriş olarak bir ifadeyi ve modeli alan ve kalıp ifadeyle eşleşirse "doğru" değerini döndüren yeni bir "eşleşiyor!" makrosu eklendi. Şablon “|” işlemlerini kullanabilir ve eğer".

    self.partial_cmp(other) { ile eşleş
    Bazıları(Daha Az) => doğru,
    _ => yanlış,
    }

    eşleşir!(self.partial_cmp(other), Some(Less))

    foo = 'f' olsun;
    iddia!(eşleşir!(foo, 'A'..='Z' | 'a'..='z'));

    let bar = Bazı(4);
    iddia!(eşleşir!(bar, Some(x) if x > 2));

  • Yanlış kullanıldığında görüntülenen panik mesajları
    Seçenek ve Sonuç türleri, artık libcore'da çağrıyı uygulayan koda bağlantılar yerine sorunlu çağrıyı yapan koda bağlantı içeren satır numaralarını görüntülüyor. Örneğin, değişiklik Option::None üzerinden sarmayı açma ve beklemeye yönelik çağrıları etkiler veya Sonuç türünde unwrap_err, wait, wait_err ve benzer yöntemler kullanılırken çöker.

  • Kargo paket yöneticisi, prosedürel makrolara sahip paketler için "proc_macro chest"in "extern" bloğuna otomatik olarak değiştirilmesini sağlar. Bu değişiklik, kodda "extern chest proc_macro;" belirtilmesine gerek kalmadan "use" yönergesinin prosedürel makrolara uygulanmasına olanak tanır. Örneğin, program "use proc_macro::TokenStream;" satırını kullanıyorsa, bu durumda "extern chest proc_macro;" ondan kaldırılırsa kod artık çalışmaya devam edecektir.
  • Standart kütüphanenin yetenekleri genişletildi. iter'da::Boş katma Herhangi bir T değeri için Gönderim ve Senkronizasyon desteği.
    Arama Pimi::{map_unchecked, map_unchecked_mut} teslim edilmiş "Boyutlu" uygulama için bir tür değeri döndürme zorunluluğundan.
    io'da::İmleç uygulandı Kısmi Denklem ve Denklem. “Const” niteliği, sabitler yerine herhangi bir bağlamda kullanım olasılığını belirler, uygulamalı Layout::new yöntemi için.

  • API'nin yeni bir kısmı, stabilize edilmiş CondVar::wait_while, CondVar::wait_timeout_while dahil olmak üzere kararlı kategoriye aktarıldı.
    Hata AyıklamaMap::anahtar, Hata AyıklamaMap::değer,
    Elle Bırak::al,
    ptr::slice_from_raw_parts_mut ve ptr::slice_from_raw_parts.

  • Error::description yöntemi kullanımdan kaldırıldı.
  • armv7a-none-eabi ve riscv64gc-unknown-linux-gnu platformları için ikinci düzey destek sağlandı. riscv64gc-unknown-linux-gnu platformu için standart kütüphane desteği sağlandı.
    Apple 32 bit platformları rütbesi düşürüldü temel desteği ima eden üçüncü seviyeye kadar destek, ancak otomatik testler ve resmi yapıların yayınlanması olmadan. Destekteki düşüş, Apple'ın artık 32 bit platformları desteklememesinden kaynaklanıyor.

Kaynak: opennet.ru

Yorum ekle