Rust programlama dili 1.64 sürümü

Mozilla projesi tarafından kurulan ancak şu anda kar amacı gütmeyen bağımsız bir kuruluş olan Rust Foundation'ın himayesinde geliştirilen Rust 1.64 genel amaçlı programlama dilinin sürümü yayınlandı. Dil, bellek güvenliğine odaklanır ve bir çöp toplayıcı ve çalışma zamanı kullanımından kaçınırken yüksek iş paralelliği elde etmenin yollarını sağlar (çalışma zamanı, standart kitaplığın temel başlatma ve bakımına indirgenir).

Rust'ın bellek işleme yöntemleri, geliştiriciyi işaretçileri işlerken hatalardan korur ve serbest bırakıldıktan sonra bir bellek alanına erişme, boş işaretçilerin başvurusunu kaldırma, arabellek taşmaları vb. gibi düşük seviyeli bellek manipülasyonundan kaynaklanan sorunlara karşı koruma sağlar. Kitaplıkları dağıtmak, derlemeler sağlamak ve bağımlılıkları yönetmek için proje Kargo paketi yöneticisini geliştirir. Crates.io deposu kitaplıkları barındırmak için desteklenir.

Rust'ta bellek güvenliği, derleme zamanında referans kontrolü, nesne sahipliğinin izlenmesi, nesne ömürlerinin (kapsamların) izlenmesi ve kod yürütme sırasında bellek erişiminin doğruluğunun değerlendirilmesi yoluyla sağlanır. Rust ayrıca tamsayı taşmalarına karşı koruma sağlar, kullanımdan önce değişken değerlerinin zorunlu olarak başlatılmasını gerektirir, standart kitaplıkta hataları daha iyi işler, değişmez referanslar ve değişkenler kavramını varsayılan olarak uygular, mantıksal hataları en aza indirmek için güçlü statik yazım sunar.

Ana yenilikler:

  • Derleyicideki, Cargo paket yöneticisindeki ve libstd standart kütüphanesindeki Linux ortamı gereksinimleri artırıldı - Glibc için minimum gereksinimler sürüm 2.11'den 2.17'ye ve Linux çekirdeği sürüm 2.6.32'den 3.2'ye yükseltildi. Kısıtlamalar aynı zamanda libstd ile oluşturulan Rust çalıştırılabilir uygulamaları için de geçerlidir. RHEL 7, SLES 12-SP5, Debian 8 ve Ubuntu 14.04 dağıtım kitleri yeni gereksinimleri karşılıyor. RHEL 6, SLES 11-SP4, Debian 7 ve Ubuntu 12.04 desteği durdurulacaktır. Daha eski bir Linux çekirdeğine sahip ortamlarda Rust tarafından oluşturulmuş yürütülebilir dosyaları kullanan kullanıcıların, sistemlerini yükseltmeleri, derleyicinin eski sürümlerinde kalmaları veya uyumluluğu korumak için katmanlarla kendi libstd çatallarını korumaları teşvik edilir.

    Eski Linux sistemlerine yönelik desteğin sona erdirilmesinin nedenleri arasında, eski ortamlarla uyumluluğun sürdürülmesine yönelik kaynakların sınırlı olması yer almaktadır. Eski Glibc desteği, LLVM ve çapraz derleme yardımcı programlarındaki artan sürüm gereksinimleri karşısında, sürekli bir entegrasyon sisteminde kontrol yaparken eski araçların kullanılmasını gerektirir. Çekirdek sürümü gereksinimlerindeki artış, eski çekirdeklerle uyumluluğu sağlamak için katmanları korumaya gerek kalmadan libstd'de yeni sistem çağrılarını kullanma yeteneğinden kaynaklanmaktadır.

  • IntoIterator'a benzeyen ancak IntoIterator'dan "for ... in ..." döngüleri yerine ".await" kullanılmasıyla farklılık gösteren IntoFuture özelliği stabilize edilmiştir. IntoFuture ile birleştirildiğinde, ".await" anahtar sözcüğü yalnızca bir Gelecek özelliği değil, aynı zamanda bir Geleceğe dönüştürülebilecek diğer türleri de bekleyebilir.
  • Pas analiz aracı, Rust sürümleriyle birlikte sağlanan yardımcı program koleksiyonuna dahildir. Yardımcı program aynı zamanda paslanma kullanılarak kurulum için de mevcuttur (paslanma bileşeni pas analizörü ekler).
  • Cargo paket yöneticisi, Rust sürümleri ve depo URL'leri gibi paketler arasında ortak alan değerlerinin kopyalanmasını ortadan kaldırmak için çalışma alanı devralmasını içerir. Ayrıca birden fazla hedef platformun aynı anda oluşturulmasına yönelik destek de eklendi (artık “--target” seçeneğinde birden fazla parametre belirtebilirsiniz).
  • API'nin yeni bir bölümü kararlı kategorisine taşındı ve özelliklerin yöntemleri ve uygulamaları kararlı hale getirildi:
    • gelecek::Geleceğe Doğru
    • sayı::NonZero*::checked_mul
    • sayı::NonZero*::checked_pow
    • sayı::NonZero*::saturating_mul
    • sayı::NonZero*::saturating_pow
    • sayı::NonZeroI*::abs
    • num::NonZeroI*::checked_abs
    • num::NonZeroI*::overflowing_abs
    • num::NonZeroI*::saturating_abs
    • num::NonZeroI*::unsigned_abs
    • num::NonZeroI*::wrapping_abs
    • num::NonZeroU*::checked_add
    • num::NonZeroU*::checked_next_power_of_two
    • num::NonZeroU*::saturating_add
    • os::unix::process::CommandExt::process_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • Daha önce std::ffi modülünde stabilize edilen C uyumlu türler çekirdeğe ve alloc kitaplığına eklenmiştir:
    • çekirdek::ffi::CStr
    • core::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • Daha önce std::os::raw modülünde stabilize edilen C türleri, core::ffi ve std::ffi modüllerine eklenmiştir (örneğin, uint ve ulong C türleri için c_uint ve c_ulong türleri önerilmiştir):
    • ffi::c_char
    • ffi::c_double
    • ffi::c_float
    • ffi::c_int
    • ffi::c_long
    • ffi::c_longlong
    • ffi::c_schar
    • ffi::c_short
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ushort
  • Düşük seviyeli işleyiciler, Anket mekanizmasıyla kullanım için stabil hale getirildi (gelecekte Çekme ve Sabitleme gibi düşük seviyeli yapıların kullanımını gerektirmeyen basitleştirilmiş bir API sağlanması planlanıyor):

    • gelecek::anket_fn
    • görev::hazır!
  • Slice::from_raw_parts işlevinde sabitler yerine herhangi bir bağlamda kullanılma olasılığını belirleyen “const” niteliği kullanılır.
  • Verilerin daha kompakt bir şekilde saklanabilmesi için Ipv4Addr, Ipv6Addr, SocketAddrV4 ve SocketAddrV6 yapılarının bellek düzeni değiştirildi. Yapıların düşük düzeyde manipülasyonu için std::mem::transmute kullanan tek kasa paketlerinde uyumluluk sorunu olabilir.
  • Windows platformu için pas derleyicisinin yapısı, kod derleme performansını %10-20 oranında artırmayı mümkün kılan PGO optimizasyonlarını (profil kılavuzlu optimizasyon) kullanır.
  • Derleyici, belirli yapılardaki kullanılmayan alanlarla ilgili yeni bir uyarı uyguladı.

Ek olarak, gccrs projesi (GCC Rust) tarafından hazırlanan ve GCC'ye dahil edilmesi onaylanan, Rust dil derleyicisinin alternatif bir uygulamasının geliştirilmesine ilişkin durum raporunu da not edebilirsiniz. Ön uç entegre edildikten sonra, LLVM geliştirmeleri kullanılarak oluşturulan Rust derleyicisini yüklemeye gerek kalmadan Rust dilindeki programları derlemek için standart GCC araçları kullanılabilir. Geliştirme yolunda gittiği sürece ve öngörülemeyen sorunlar olmadığı sürece Rust ön ucu, gelecek yılın Mayıs ayında yapılması planlanan GCC 13 sürümüne entegre edilecek. Rust'un GCC 13 uygulaması beta durumunda olacak ve henüz varsayılan olarak etkinleştirilmemiştir.

Kaynak: opennet.ru

Yorum ekle