Rust ekibi, Rust'ın yeni sürümü olan 1.83.0'ı duyurmaktan mutluluk duyar. Rust, herkesin güvenilir ve verimli yazılımlar oluşturmasını sağlayan bir programlama dilidir.
Yeni Sabit (const) Özellikleri
Bu sürüm, sabit bağlamlarda çalışan kodların yapabileceği birçok büyük genişletmeyi içeriyor. Bu, derleyicinin derleme zamanında değerlendirmek zorunda olduğu tüm kodları ifade eder: sabit (const) ve statik (static) öğelerin başlangıç değerleri, dizi uzunlukları, enum ayrıştırıcı değerleri, sabit genel argümanlar ve bu tür bağlamlardan çağrılabilen işlevler (const fn).
Statiklere Referanslar
Şimdiye kadar, sabit bağlamlar (bir statik öğenin başlatıcı ifadesi hariç) statik öğelere referans verilmiyordu. Bu kısıtlama artık kaldırıldı:
Kod:
static S: i32 = 25;
const C: &i32 = &S;
Ancak, değiştirilebilir (mutable) veya içsel olarak değiştirilebilir (interior mutable) bir statiğin değerini okumak, sabit bağlamlarda hâlâ izin verililmiyor. Ayrıca, bir sabitin son değeri, herhangi bir değiştirilebilir veya içsel olarak değiştirilebilir statiğe referans veremez:
Kod:
static mut S: i32 = 0;
const C1: i32 = unsafe { S };
// hata: sabit, değiştirilebilir global belleğe erişiyor
const C2: &i32 = unsafe { &S };
// hata: `const` içinde değiştirilebilir belleğe referans bulundu
Bu sınırlamalar sabitlerin hala “sabit” olmasını sağlar: değerlendirildikleri değer ve bir kalıp olarak anlamları (referansları dereferencing içerebilir), tüm program yürütmesi boyunca aynı olacaktır.
Bununla birlikte, bir sabitin değişebilir veya iç değişebilir bir statik değeri işaret eden ham bir işaretçiye değerlendirilmesine izin veriliyor:
Kod:
static mut S: i32 = 64;
const C: *mut i32 = &raw mut S;
Değiştirilebilir Referanslar ve İşaretçiler
Artık değiştirilebilir referanslar, sabit bağlamlarda kullanılabilir:
Kod:
const fn inc(x: &mut i32) {
*x += 1;
}
const C: i32 = {
let mut c = 41;
inc(&mut c);
c
};
Değiştirilebilir ham işaretçiler ve içsel değiştirilebilirlik de destekleniyor:
Kod:
use std::cell::UnsafeCell;
const C: i32 = {
let c = UnsafeCell::new(41);
unsafe { *c.get() += 1 };
c.into_inner()
};
Ancak, değiştirilebilir referanslar ve işaretçiler yalnızca bir sabitin hesaplanması içinde kullanılabilir, sabitin nihai değerinin bir parçası olamazlar:
Kod:
const C: &mut i32 = &mut 4;
// hata[E0764]: değiştirilebilir referanslara sabitlerin son değerinde izin verilmez
Daha fazlası...