Alesta WEB

Kısa cevap: Rust 1.99.0 1 Ekim 2026'da yayımlandı. En önemli yenilik, Rust'ta artık C ABI'si ile değişken sayıda argüman alan (variadic) fonksiyon tanımlanabilmesi: unsafe extern "C" fn sum(mut args: ...). Bunun yanında ham işaretçilerden boyut ve hizalama okuyan size_of_val_raw, align_of_val_raw ve Layout::for_value_raw kararlı hale geldi; Vec::into_parts, Box::into_non_null, VecDeque::retain_back ve std::fs::set_times dahil 17 API eklendi. Güncellemek için rustup update stable yeterli (Rust 1.99 release notes, C variadic functions).
Rust 1.99'da neler var? (What's new in Rust 1.99)
Rust altı haftalık sürüm döngüsünü sürdürüyor ve 1.99, 20 Ağustos'ta çıkan 1.98'in ardından gelen sürüm. Büyük bir dil değişikliği yok; ama C ile birlikte çalışan kod yazanlar, kendi bellek ayırıcısını yazanlar ve düşük seviyeli kütüphane geliştiriciler için uzun süredir beklenen parçalar tamamlandı. Kısaca:
- C ve C-unwind ABI'siyle variadic fonksiyon tanımlama kararlı.
- Ham işaretçiler için boyut/hizalama sorgulama fonksiyonlarının güvenlik kuralları netleşti ve kararlı oldu.
Box::leakve benzeri fonksiyonlar için belgelerde kullanım önerisi değişti.- 17 yeni kararlı API.
Bir sonraki sürüm Rust 1.100.0 olacak ve 12 Kasım 2026'da çıkması bekleniyor. Üç basamaklı sürüm numarasına geçiş, araçların sürüm karşılaştırmasını doğru yapıp yapmadığını test etmek için de iyi bir fırsat.

C ABI ile variadic fonksiyon tanımlama (C variadic functions)
Rust uzun zamandır printf gibi değişken sayıda argüman alan C fonksiyonlarını çağırabiliyordu. Ama bu tür bir fonksiyonu Rust içinde tanımlamak kararlı sürümde mümkün değildi. Bu eksik, C kütüphanelerinin geri çağırma (callback) bekleyen arayüzlerini Rust ile yazmayı ya da mevcut bir C kütüphanesini parça parça Rust'a taşımayı zorlaştırıyordu.
1.99 ile bu kapandı. Sürüm duyurusundaki örnek:
/// GÜVENLİK: en az 2 adet i32 argümanla çağrılmalı.
unsafe extern "C" fn sum(mut args: ...) -> i32 {
// GÜVENLİK: çağıran tarafından garanti ediliyor.
let a = unsafe { args.next_arg::<i32>() };
let b = unsafe { args.next_arg::<i32>() };
a + b
}
fn foo() -> i32 {
unsafe { sum(0i32, 2i32) }
}Burada ... parametresinin tipi core::ffi::VaList ve C'deki va_list ile ABI uyumlu. Argümanlar next_arg::<T>() ile sırayla okunuyor; hangi tiplerin okunabileceğini VaArgSafe trait'i belirliyor. Okuma işlemi doğal olarak unsafe: kaç argüman geldiğini ve tiplerini derleyici bilemez, bu sözleşme çağırana ait.
Aynı sürümde C dışındaki ABI'lerle variadic naked fonksiyonlar da kararlı oldu. Bunlar gövdesini tamamen satır içi assembly ile yazmanız gereken, işletim sistemi çekirdeği veya gömülü sistem gibi alanlarda kullanılan fonksiyonlar.
Ham işaretçilerden boyut ve hizalama (size_of_val_raw)
mem::size_of_val bir referansın gösterdiği değerin boyutunu verir. Ama referans oluşturmak, değerin geçerli ve hizalı olduğunu varsayar. Henüz başlatılmamış bellekle ya da dilim ([T]) veya trait nesnesi (dyn Trait) gibi boyutu çalışma anında belli olan tiplerle çalışırken bu varsayım sorun çıkarıyordu.
1.99'da ham işaretçi alan sürümlerin güvenlik koşulları netleştirildi ve şu üç fonksiyon kararlı hale geldi:
core::mem::size_of_val_rawcore::mem::align_of_val_rawcore::alloc::Layout::for_value_raw
Bu fonksiyonlar özellikle özel bellek ayırıcıları, akıllı işaretçi kütüphaneleri ve Rc/Arc benzeri yapıları kendisi yazanlar için önemli. Önceden gece (nightly) derleyiciye ya da kırılgan geçici çözümlere ihtiyaç duyan kod artık kararlı Rust ile yazılabiliyor.
Box::leak için yeni yönlendirme
Box::leak bir kutuyu bilerek "sızdırır" ve 'static ömürlü bir referans döndürür. Bazı projeler bu referansı daha sonra geri çevirip belleği serbest bırakıyordu. 1.99'da dil anlamında bir değişiklik yok, ama belgeler artık bu kalıbı önermiyor: belleği sonradan geri alacaksanız Box::into_raw ya da yeni kararlı olan Box::into_non_null kullanılmalı. Aynı öneri standart kütüphanedeki diğer leak fonksiyonları için de geçerli. Kod tabanınızda leak sonrası from_raw çağrısı varsa gözden geçirmek iyi olur.
Kararlı hale gelen API'ler (Stabilized APIs)
| API | Ne işe yarar? |
|---|---|
Vec::into_parts / Vec::from_parts | Vektörü işaretçi, uzunluk ve kapasite olarak ayırır ve geri birleştirir; FFI ve özel ayırıcılar için |
Box::into_non_null / Box::from_non_null | Kutuyu NonNull<T> olarak alıp geri verir |
VecDeque::retain_back | Kuyruğu sondan filtreler |
String::from_utf8_lossy_owned | Bayt vektörünü kopyalamadan, geçersiz baytları değiştirerek String'e çevirir |
FromUtf8Error::into_utf8_lossy | Başarısız dönüşümden kayıplı ama kullanılabilir metin üretir |
std::fs::set_times / set_times_nofollow | Dosyanın erişim/değiştirme zamanını yol üzerinden ayarlar (sembolik bağı izlemeden de) |
IntoIterator for Box<[T; N]> | Kutudaki diziyi doğrudan for ile gezme |
FusedIterator for StepBy<I> | step_by yineleyicisi bittikten sonra hep None döndürür |
core::ffi::VaList | Variadic argüman listesi tipi |
Web tarafında en pratik olanı muhtemelen String::from_utf8_lossy_owned: dışarıdan gelen, kodlaması bozuk olabilecek veriyi (form girdisi, eski veritabanı kayıtları, dosya adları) ekstra kopya olmadan metne çevirmeyi kolaylaştırıyor.
Güncelleme ve dikkat edilecekler
rustup update stable
rustc --version # rustc 1.99.0- Variadic tanımları
unsafeolarak düşünün. C tarafından yanlış sayıda argümanla çağrılan bir fonksiyon tanımsız davranışa yol açar. Fonksiyonun belgesine sözleşmeyi yazın. - CI'da sürüm karşılaştırmasını test edin. 1.100 çıktığında "1.99 > 1.100" gibi metin karşılaştırması yapan betikler yanlış sonuç verir.
rust-versionalanı ve MSRV kontrolleri sayısal karşılaştırma yapmalı. - Clippy ve Cargo değişiklik günlüklerine bakın. Sürüm duyurusu ayrıntılı değişiklikleri ayrı sayfalara bırakıyor.
Alesta WEB olarak web projelerimizde Rust ile yazılmış araçları (paketleyiciler, biçimlendiriciler, Python paket yöneticisi uv) günlük olarak kullanıyoruz; dilin her sürümü bu araçların hızına ve güvenilirliğine doğrudan yansıyor. Diğer dil güncellemeleri için Zig 0.17 ve Go 1.27 yazılarımıza bakabilirsiniz.
Sık sorulan sorular
Rust 1.99 ne zaman çıktı?
1 Ekim 2026'da. Bir sonraki sürüm 1.100.0, 12 Kasım 2026'da bekleniyor.
Rust'ta printf gibi fonksiyon yazabilir miyim?
Evet. 1.99'dan itibaren unsafe extern "C" fn ad(mut args: ...) ile C ABI'sinde variadic fonksiyon tanımlayabilir, argümanları args.next_arg::<T>() ile okuyabilirsiniz.
Bu sürümde kırıcı değişiklik var mı?
Sürüm duyurusunda dil semantiğini bozan bir değişiklik yok. Box::leak için yalnızca belge önerisi değişti.
Rust nasıl güncellenir?
rustup update stable komutuyla. rustup kurulu değilse rust-lang.org üzerinden kurulum betiğini kullanın.
Kaç yeni API kararlı oldu?
17. Aralarında Vec::into_parts, Box::into_non_null, VecDeque::retain_back ve std::fs::set_times var.
Kaynaklar (References)
İlgili yazılar: Rust 1.85 ve 2024 Edition · uv paket yöneticisi · Web yazılım hizmetlerimiz
Kapak fotoğrafı: Rob Wingate / Unsplash

