Ben @aib’in bunu demek istediğini sanmıyorum. Bu yaşadığınız daha çok dile alışık olmamanızdan kaynaklı olabilir. Ben bu kodu birkaç dakikada yazabiliyorum, ki ben de çok Rust kodu yazdığımı söyleyemem:
struct Fibonacci {
previous: u128,
current: u128,
}
impl Fibonacci {
fn new() -> Self {
Self {
previous: 0,
current: 1,
}
}
}
impl Iterator for Fibonacci {
type Item = u128;
fn next(&mut self) -> Option<Self::Item> {
let result = self.previous;
self.previous = self.current;
self.current = result + self.previous;
Some(result)
}
}
fn main() {
let mut fib = Fibonacci::new();
let num39: f64 = fib.nth(39 - 1).unwrap() as _;
let num40: f64 = fib.next().unwrap() as _;
println!("{}", num40 / num39);
}
Bunun bir örneğini görmek isteyenler buraya bakabilir. Bu da compiler explorer linki.
Bağımsız programların hafızaları hiçbir modern işletim sisteminde kesişmez. Eğer başka bir programa ait hafıza adresine erişmeye çalışırsanız segfault alırsınız.
Undefined behaviour’un başka uygulamaların hafızasını etkilemek ile hiçbir alakası yok.
Eğer bir array’ın veya vector’un kendisine ait olmayan adresini indekslemeye çalışırsanız Python’da olduğu gibi Rust’ta da çalışma anında bir hata alırsınız. Bu hatalara Rust’ta panic
deniliyor ve uygulamanın durmasını gerektirecek kadar önemli hatalar gerçekleştiğinde panic
oluşuyor.
Safe Rust’ta mümkün değil. unsafe
kullanılırsa mümkün.
Undefined behaviour. Henüz hiçbir değer atamadığınız bir hafıza adresini (uninitialized memory) okumaya çalışıyorsunuz.
Malloc’un böyle bir garantisi yok, hatta hafızanın uninitialized olacağını söylüyor:
The malloc() function allocates size bytes and returns a pointer
to the allocated memory. The memory is not initialized.
Uninitialized memory ile alakalı bu yazıyı tavsiye ederim:
İşletim sistemi bunu yapsa bile sadece hafızayı bizim process’imize ilk verdiğinde yapar. Ondan sonrasında malloc
aynı hafızayı fazlasına ihtiyaç duymadığı sürece kullanmaya devam edecek. Kesinlikle malloc
’un her zaman 0 dolu bir hafıza döndürmesi gibi bir durum yok.
Kod yazarken hata yapabiliriz, yapıyoruz. Bu yüzden out of bounds olup olmadığını program kontrol ediyor. En azından geliştirme aşamasında bu kontrolü yapmak lazım. Yoksa hata yapsanız bile farkına varamayabilirsiniz.