Mozilla projesi tarafından geliştirilen ancak şu anda bağımsız, kâr amacı gütmeyen Rust Vakfı himayesinde geliştirilen Rust 1.99 programlama dili yayınlandı. Dil, bellek güvenliğine odaklanıyor ve çöp toplayıcı ve çalışma zamanı kullanmadan (çalışma zamanı, standart kütüphanenin temel başlatılması ve bakımıyla sınırlıdır) görev yürütmede yüksek paralellik elde etmek için araçlar sunuyor.
Rust'ın bellek yönetimi yöntemleri, işaretçi manipülasyonundaki hataları ortadan kaldırmak ve serbest bırakıldıktan sonra belleğe erişme, boş işaretçilere erişme, arabellek taşmaları vb. gibi düşük seviyeli bellek yönetiminden kaynaklanan sorunlara karşı koruma sağlamak üzere tasarlanmıştır. Proje, kütüphaneleri dağıtmak, derlemeleri kolaylaştırmak ve bağımlılıkları yönetmek için Cargo paket yöneticisini geliştirmektedir. Kütüphaneleri barındırmak için crates.io deposu kullanılmaktadır.
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:
- Rust artık C projelerinden çağrılmak üzere dışa aktarılan değişken sayıda argüman alan fonksiyonlar (C ABI) oluşturmanıza olanak tanıyor. Bu tür fonksiyonlardaki parametre listesinin son öğesi, Rust'ta C'deki va_list'e benzer şekilde çalışan özel bir tür olan VaList kullanılarak ele alınan "..." yapısı olabilir. unsafe extern "C" fn sum(mut args: ...) -> i32 { let a = unsafe { args.next_arg:: () }; let b = unsafe { args.next_arg:: () }; a + b } fn foo() -> i32 { unsafe { sum(0i32, 2i32) } }
- Layout::for_value_raw, mem::size_of_val_raw ve mem::align_of_val_raw fonksiyonları, dilimler gibi dinamik olarak boyutlandırılmış türler kullanılırken bile, veri referansları oluşturmaya gerek kalmadan ham işaretçilerin güvenli bir şekilde boyutlandırılması ve hizalanmasına olanak sağlamak için kararlı hale getirilmiştir.
- Belgelerde artık, Box::leak (gidiş-dönüş sızıntı giderme) çağrısı yoluyla süresiz ömürle (&'static) statik olarak referans verilen belleğin serbest bırakılmasından kaçınılması önerilmektedir; çünkü bu işlem, gelecekteki derleyici optimizasyonları ve takılabilir bellek tahsis mekanizmalarıyla uyumsuzluk nedeniyle potansiyel olarak sorunlara yol açabilir. Geçici sahiplik transferleri için statik bir referans oluşturmak yerine, örneğin Box::into_non_null çağrısı yoluyla ham işaretçiler kullanılması önerilir.
- API'nin yeni bir bölümü kararlı kategorisine taşındı ve özelliklerin yöntemleri ve uygulamaları kararlı hale getirildi:
- Box<[T; N]> için IntoIterator
- &Box<[T; N]> için IntoIterator
- &mut Box<[T; N]> için IntoIterator
- VecDeque::retain_back
- çekirdek::ffi::VaList
- Kutu::boş_olmayan_birime_dönüştür
- Kutu::boş olmayandan
- Vec::into_parts
- Vec::from_parts
- çekirdek::bellek::değer_boyutu
- core::mem::align_of_val_raw
- core::alloc::Layout::for_value_raw
- Dize::from_utf8_lossy_owned
- string::FromUtf8Error::into_utf8_lossy
- StepBy için FusedIterator
- std::fs::set_times
- std::fs::set_times_nofollow
- Cargo paket yöneticisi artık "dev" profiline benzer yeni bir yerleşik "debug" profiline sahip (gelecekte hata ayıklama ve geliştirme özelliklerinin ayrılması planlanıyor). CI'da derleme yapılırken artımlı derleme varsayılan olarak devre dışı bırakılmıştır.
- riscv64-unknown-linux-musl hedef platformu, derleme garantisi sağlayan ancak test paketinin geçme garantisi vermeyen 2. seviyeyi destekleyecek şekilde değiştirildi.
Ayrıca, Rust ile ilgili yakın zamanda duyurulan projeleri ve etkinlikleri de vurgulamak isteriz:
- Microsoft, Rust'ı Birinci Kademe (Tier 1) dil olarak yükseltti ve şirket içindeki tüm geliştirme aşamalarında tam destek sağlayacak. Daha önce Birinci Kademe desteği C++, C# ve TypeScript için sağlanıyordu. Rust, halihazırda 100'den fazla Microsoft deposunda kullanılıyor. Diğer şeylerin yanı sıra, Rust bileşenleri Microsoft 365 ve Copilot gibi ürünlerde zaten kullanılıyor ve MSVC derleyicisi için rustc derleyicisine dayalı özel bir Rust arka ucu olan rustc_codegen_utc geliştirildi.
Microsoft, Rust'ı kullanmanın temel amacının güvenlik açısından kritik kodları güçlendirmek olduğunu belirtiyor. Microsoft Azure CTO'suna göre, tüm güvenlik açıklarının yaklaşık %70'i Rust'tan kaynaklanıyor. Windows Bu sorunlar, Rust kullanılarak önlenebilecek bellek yönetimi sorunlarından kaynaklanmaktadır.
- Google bunu çekirdekten kaldırdı. Linux C dilinde yazılmış eski Binder IPC uygulaması, Rust dilinde yeniden yazılmış yeni bir Binder IPC sürücüsü lehine kullanımdan kaldırılmıştır. 15 yıllık varlığı boyunca eski sürücünün önemli teknik borç ve çok sayıda komplikasyon biriktirdiği, bunun da hata tespitini, bakımı ve yeni özelliklerin eklenmesini engellediği belirtilmektedir. Rust dilindeki Binder IPC sürücüsü ana sürücü olarak belirlenmiş olup artık deneysel bir geliştirme olarak sunulmamaktadır.
- Tor araç setinin Rust uygulaması olan Arti 2.7.0 yayınlandı. Arti'nin kod tabanı, C uygulamasının yerini tamamen alabilecek bir seviyeye ulaştığında, Tor geliştiricileri Arti'yi birincil Tor uygulaması haline getirmeyi ve C uygulamasının bakımını kademeli olarak sonlandırmayı planlıyor. Yeni sürüm, röleler için işlevsellik geliştirmesini de içeriyor. sunucular Belge ayrıştırma, dizin sunucusu yansıtma desteği ve DNS trafiği işleme ile ilgili Dizin Yetkilisi (DA) işlevselliği eklendi. Yapılandırma değişiklikleri ve kontrolleri için bir RPC uygulaması eklendi. Birkaç güvenlik açığı giderildi; onion servis yöneticilerinin sistemlerini acilen güncellemeleri önerilir.
Kaynak: opennet.ru
