Rust programlama dili 1.61 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.61 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:

  • Ana fonksiyondan kendi dönüş kodlarınızı tanımlamanız mümkündür. Başlangıçta Rust'un ana işlevi yalnızca "()" (birim) türünü döndürebiliyordu; bu, geliştirici açıkça "process::exit(code)" işlevini çağırmadığı sürece her zaman başarılı bir çıkış durumunu gösteriyordu. Rust 1.26'da ana fonksiyondaki kararsız Sonlandırma özelliğini kullanarak C programlarındaki EXIT_SUCCESS ve EXIT_FAILURE kodlarına karşılık gelen “Ok” ve “Err” değerlerini döndürmek mümkündü. Rust 1.61'de, Sonlandırma özelliği kararlı hale getirildi ve hem SUCCESS hem de FAILURE önceden tanımlanmış sabitleri ve From yöntemini sağlayarak platforma özgü dönüş türlerini soyutlayan belirli bir dönüş kodunu temsil etmek için ayrı bir ExitCode türü önerildi. özel bir dönüş kodu döndürmek için. std::process::ExitCode’u kullanın; fn main() -> ÇıkışKodu { if !check_foo() { return ÇıkışKodu::from(8); } ÇıkışKodu::BAŞARI }
  • Yalnızca normal işlevler olarak değil, sabitler yerine her bağlamda kullanılabilen “const fn” ifadesi kullanılarak tanımlanan işlevlerin ek yetenekleri stabil hale getirildi. Bu işlevler çalışma zamanında değil derleme zamanında hesaplanır, dolayısıyla yalnızca sabitlerden okuma yeteneği gibi belirli kısıtlamalara tabidirler. Yeni sürümde, const fonksiyonlarının içinde fonksiyon işaretçileriyle temel işlemlere izin verilmektedir (işaretçilerin oluşturulmasına, aktarılmasına ve kullanılmasına izin verilir, ancak işaretçiyle bir işlevin çağrılmasına izin verilmez); T: Copy; gibi const fonksiyonlarının genel parametreleri için özellik sınırları; dinamik olarak dağıtılabilir özellikler (dyn Trait); impl İşlev bağımsız değişkenleri ve dönüş değerleri için özellik türleri.
  • Std::io'daki akış, artık kilitlendiğinde statik bir ömre ("'statik") sahip olan Stdin, Stdout ve Stderr'i yönetir ve "let out = std::io::stdout().lock();" gibi yapılara izin verir. bir ifadede bir tanıtıcı alma ve bir kilit ayarlama ile.
  • API'nin yeni bir bölümü kararlı kategorisine taşındı ve özelliklerin yöntemleri ve uygulamaları kararlı hale getirildi:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • İmleç için Yaz<[u8; N]>
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ÇıkışKodu
    • std::process::Sonlandırma
    • std::thread::JoinHandle::is_finished
  • Sabitler yerine herhangi bir bağlamda kullanılma olasılığını belirleyen "const" niteliği işlevlerde kullanılır:
    • <*const T>::offset ve <*mut T>::offset
    • <*const T>::wrapping_offset ve <*mut T>::wrapping_offset
    • <*const T>::add ve <*mut T>::add
    • <*const T>::sub ve <*mut T>::sub
    • <*const T>::wrapping_add ve <*mut T>::wrapping_add
    • <*const T>::wrapping_sub ve <*mut T>::wrapping_sub
    • <[T]>::as_mut_ptr
    • <[T]>::as_ptr_range
    • <[T]>::as_mut_ptr_range

Ayrıca firmware'de kullanılan Xous mikro çekirdek işletim sisteminin geliştirilmesi sırasında Rust dilinin 100 bin satır kod yazılmasından sonra edinilen izlenimlerin özetini içeren “Rust: Kritik Bir Retrospektif” yazısını da not edebilirsiniz. Dezavantajları arasında anlaşılması zor sözdizimi, dilin eksikliği ve sürekli gelişimi, tekrarlanabilir yapıların olmaması, Crates.io'ya bağımlılık güveniyle ilgili tipik sorunlar ve güvenli kod yazmak için belirli bir disiplini sürdürme ihtiyacı yer alır. Beklentileri aşan özellikler arasında kodun yeniden düzenlenmesine yönelik araçlar ve hızlı prototipleme sırasında eklenen "hack'lerin" yeniden işlenmesi yer alıyor.

Kaynak: opennet.ru

Yorum ekle