Rust programlama dili 1.34 sürümü

Mozilla projesinin geliştirdiği sistem programlama dili Rust 1.34 yayınlandı. 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. Kitaplıkları dağıtmak, montajı sağlamak ve bağımlılıkları yönetmek için proje, program için gereken kitaplıklara tek tıklamayla ulaşmanızı sağlayan Kargo paket yöneticisini geliştiriyor. Crates.io deposu, kitaplıkları barındırmak için desteklenir.

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 bir kayıt eklemek için
    “[kayıtlar]” bölümünde yeni bir “my-registry” seçeneği sunuldu ve “[bağımlılıklar]” bölümünde Cargo.toml'deki bağımlılıklarda harici kayıttan bahsetmek için bir “other-crate” seçeneği eklendi. 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. doctest'lerde, belgelerdeki örnek kodu testler 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, isteğe bağlı belirteç kümelerinin kullanılması mümkündür ("#[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;
  • TryFrom ve TryInto özellikleri stabilize edilerek hata işlemeli tür dönüştürmelerine olanak sağlandı. Ö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), şeffaf bir şekilde kullanılmasına izin vermek için Yanılmaz bir hata türü eklenmiştir.
    "From"un mevcut tüm uygulamaları için TryFrom;

  • Fork() çağrısından sonra çatallanan bir alt süreç bağlamında yürütülen exec işleminden önce bir işleyicinin yürütülmesine izin veren CommandExt::before_exec işlevi kullanımdan kaldırıldı. 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 CommandExt::pre_exec işlevinin kullanılması önerilir.

  • Boyutları 8 ila 64 bit arasında değişen imzalı ve işaretsiz atomik tamsayı türlerinin (örneğin, AtomicU8) yanı sıra imzalı NonZeroI[8|16|32|54|128] türleri.
  • 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" oluşturma seçeneğini belirleyerek optimizasyonları bağlantı aşamasında etkinleştirme yeteneği eklendi (rustc, Rust kodunu LLVM bit kodunda derler, bu da LTO optimizasyonlarının uygulanmasına olanak tanır).

Kaynak: opennet.ru

Yorum ekle