Rust programlama dili 1.34 sürümü

gerçekleşti sistem programlama dili sürümü Pas 1.34Mozilla projesi tarafından geliştirildi. 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:

  • Kargo paketi yöneticisi, Crates.io genel kayıt defteriyle bir arada bulunabilecek alternatif paket kayıtlarıyla çalışmak için araçlar ekledi. Örneğin, özel uygulama geliştiricileri artık Cargo.toml'de bağımlılıkları listelerken kullanılabilecek kendi özel kayıtlarını kullanabilir ve ürünleri için Crates.io'ya benzer bir sürüm oluşturma modeli uygulayabilir ve bağımlılıkları her iki kasaya da yönlendirebilir. io ve kendi kayıt defterinize.

    .cargo/config dosyasına harici kayıtlar eklemek için ($HOME'da veya paket dizininde bulunur)
    öngörülen “[kayıtlar]” bölümü ve harici bir kayıt defteri kullanmak için Cargo.toml'deki her bağımlılığın açıklamasında “kayıt defteri” seçeneği belirmiştir. Ek bir kayıt defterine bağlanmak için kimlik doğrulama belirtecini ~/.cargo/credentials dosyasına yerleştirmeniz ve komutu çalıştırmanız yeterlidir.
    "cargo giriş --registry=my-registry" ve bir paket yayınlamak için -
    "kargo yayınlama -kayıt=kayıt defterim";

  • “?” operatörünü kullanmak için tam destek eklendi. testlerde doktestler, belgelerdeki örnek kodu test olarak kullanmanıza olanak tanır. Daha önce operatör
    "?" test yürütme sırasındaki hataları yalnızca "fn main()" işlevi veya "#[test]" işlevleri varlığında işlemek için kullanılabilir;

  • Prosedürel makrolar kullanılarak tanımlanan özel niteliklerde sağlanan isteğe bağlı belirteç kümelerini kullanma yeteneği (“#[attr($tokens)]”, “#[attr[$tokens]] ve #[attr{$tokens}]”). Önceden, öğeler yalnızca dize değişmezleri kullanılarak bir ağaç/özyinelemeli formda belirtilebiliyordu, örneğin “#[foo(bar, baz(quux, foo = “bar”))]”, ancak artık numaralandırmalar (' #[range(0. .10)]') ve “#[bound(T: MyTrait)]” gibi yapılar;
  • Stabilize edilmiş türler (özellik) Deneyen: и Deneyin, hata işlemeyle tür dönüşümlerine izin verir. Örneğin, tam sayı türlerine sahip from_be_bytes gibi yöntemler girdi olarak dizileri kullanır, ancak veriler genellikle bir Dilim türünde gelir ve diziler ile dilimler arasında dönüştürme işleminin manuel olarak yapılması sorunludur. Yeni özelliklerin yardımıyla, belirtilen işlem .try_into() çağrısı aracılığıyla anında gerçekleştirilebilir; örneğin, "let num = u32::from_be_bytes(slice.try_into()?)". Her zaman başarılı olan dönüşümler için (örneğin, u8 türünden u32'ye) bir hata türü eklenmiştir yanılmazşeffaf kullanıma izin veren
    "From"un mevcut tüm uygulamaları için TryFrom;

  • İşlev kullanımdan kaldırıldı CommandExt::before_execBu, fork() çağrısından sonra çatallanan bir alt süreç bağlamında yürütülen exec komutunu çalıştırmadan önce bir işleyicinin yürütülmesine izin verdi. Bu tür koşullar altında, dosya tanımlayıcıları ve eşlenen bellek alanları gibi ana sürecin bazı kaynakları kopyalanabilir ve bu da kitaplıkların tanımsız davranışına ve hatalı çalışmasına yol açabilir.
    Before_exec yerine güvenli olmayan bir işlevin kullanılması önerilir CommandExt::pre_exec.

  • Boyutları 8 ila 64 bit arasında değişen, kararlılaştırılmış imzalı ve imzasız atomik tamsayı türleri (örneğin, AtomikU8) ve imzalı türlerin yanı sıra Sıfır OlmayanI[8|16|32|64|128].
  • Any::type_id, Error::type_id, dilim::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ​​dahil olmak üzere API'nin yeni bir bölümü kararlı kategoriye taşındı. ] ve SystemTime yöntemleri stabilize edildi ::checked_[add|sub]. iter::from_fn ve iter::successors işlevleri stabilize edildi;
  • Tüm tamsayı türleri için check_pow, saturating_pow, sarma_pow ve overflowing_pow yöntemleri uygulanır;
  • “-C linker-plugin-lto” derleme seçeneğini belirterek, bağlantı aşamasında optimizasyonları etkinleştirme yeteneği eklendi.

Kaynak: opennet.ru

Yorum ekle