Rust, performans, güvenlik ve eşzamanlılık için tasarlanmış modern bir sistem programlama dilidir. Kullanıcılara güçlü dil özellikleri sunarken, null işaretçi dereferansları ve veri yarışları gibi yaygın programlama hatalarını ortadan kaldırmayı hedefler. Rust, geliştiricilerin performanstan ödün vermeden yüksek seviyeli kod yazmalarını sağlayan sıfır maliyetli soyutlamalara vurgu yapar. Donanımın düşük seviyeli kontrolü ve bellek yönetiminin gerekli olduğu sistem programlama, web assembly ve yüksek performanslı uygulama oluşturma gibi görevler için özellikle uygundur.
Rust, 2006 yılında Graydon Hoare tarafından Mozilla Araştırma'da tasarlandı. Dilin ilk amacı, güvenli eşzamanlı yazılım geliştirme zorluklarını ele almak ve mevcut sistem programlama dillerine daha güvenilir bir alternatif yaratmaktı. 2010 yılında Rust'ın ilk kamuya açık versiyonu yayımlandı ve bellek güvenliği ve eşzamanlılık konusundaki yenilikçi yaklaşımıyla hızla dikkat çekti.
Rust, performansa odaklı tasarımı için C++'dan ve değişmezlik ile güçlü soyutlamalara vurgu yapan fonksiyonel programlama dillerinden ilham alır. Tasarımı ayrıca Haskell gibi dillerden de ilke yansıtmaktadır, özellikle sağlam tür sistemi ve desen eşleştirme yetenekleri açısından.
Rust, kuruluşundan bu yana geniş çapta tanınan bir dil haline geldi ve güçlü bir geliştirici topluluğu ile büyüyen bir kütüphane ekosistemine sahip. Dil, Mozilla tarafından resmi olarak desteklenmekte ve web geliştirme, gömülü sistemler ve oyun geliştirme gibi çeşitli alanlarda ilgi görmektedir. 2015 yılında Rust 1.0'ın yayımlanması, stabilitesini ve üretim kullanımı için hazır olduğunu pekiştiren önemli bir dönüm noktası oldu. 2021'de kurulan Rust Vakfı, dilin sürekli gelişimini ve yönetimini desteklemektedir.
Rust'ın benzersiz sahiplik modeli, geliştiricilerin bellek yönetimini çöp toplayıcı olmadan gerçekleştirmesine olanak tanır. Rust'taki her değişkenin tek bir sahibi vardır ve sahiplik, referanslar aracılığıyla aktarılabilir veya "ödünç alınabilir". Bu özellik, katı ödünç alma kurallarını uygulayarak bellek güvenliğini sağlamaya yardımcı olur.
fn main() {
let s1 = String::from("Merhaba");
let s2 = &s1; // s1'i ödünç alma
println!("{}", s2);
}
Rust'taki desen eşleştirme, geliştiricilerin veri türlerini parçalayarak karmaşık kontrol akışını sorunsuz bir şekilde yönetmelerine olanak tanır. match
ifadesi, değer desenlerine dayalı mantık dallandırmak için güçlü bir yol sunar.
fn main() {
let number = 4;
match number {
1 => println!("Bir"),
2 => println!("İki"),
_ => println!("Diğer"),
}
}
Rust, tür çıkarımını kullanarak derleyicinin değişken türlerini otomatik olarak çıkarmasına olanak tanır, bu da kodu basitleştirir ve okunabilirliği artırır.
fn main() {
let x = 5; // Derleyici x'in i32 türünde olduğunu çıkarır
}
Traitler, diğer dillerdeki arayüzlere benzer ve çok biçimliliğe olanak tanır. Türlerin uygulayabileceği paylaşılan davranışları tanımlar.
trait Speak {
fn speak(&self);
}
struct Dog;
impl Speak for Dog {
fn speak(&self) {
println!("Hav!");
}
}
Rust'ın Option
ve Result
türleri, sağlam hata yönetimi ve null güvenli programlama paradigması sunarak geliştiricilerin yokluk veya hata olasılığını açıkça ifade etmelerine olanak tanır.
fn divide(x: f64, y: f64) -> Option<f64> {
if y == 0.0 {
None
} else {
Some(x / y)
}
}
Rust, sahiplik sistemi aracılığıyla korkusuz eşzamanlılığı destekler ve birden fazla iş parçacığının veri üzerinde veri yarışları riski olmadan çalışmasına olanak tanır.
use std::thread;
fn main() {
let handle = thread::spawn(|| {
println!("Bir iş parçacığından merhaba!");
});
handle.join().unwrap();
}
Rust'ın makro sistemi, kod üretimine olanak tanır ve kod tabanında yeniden kullanılabilir özel sözdizimsel yapılar yazmayı mümkün kılar.
macro_rules! say_hello {
() => {
println!("Merhaba!");
};
}
fn main() {
say_hello!();
}
Rust'taki closure'lar, çevrelerinden değişkenleri yakalayabilen anonim fonksiyonlardır ve bu da onları fonksiyonel programlama paradigmaları için esnek hale getirir.
fn main() {
let add = |a, b| a + b;
println!("{}", add(5, 7));
}
Rust, kodu organize etmek ve görünürlüğü kontrol etmek için bir modül sistemi kullanır. Kütüphaneler, paylaşılabilir ve yeniden kullanılabilir Rust kodu paketleridir.
mod my_module {
pub fn hello() {
println!("my_module'den merhaba!");
}
}
fn main() {
my_module::hello();
}
Rust, yerleşik dokümantasyon özelliklerine sahiptir ve Rustdoc aracı, kaynak kodundaki yorumlardan otomatik olarak dokümantasyon oluşturur.
/// Bu fonksiyon iki sayıyı toplar.
///
/// # Örnekler
///
/// ```
/// let result = add(2, 3);
/// assert_eq!(result, 5);
/// ```
fn add(a: i32, b: i32) -> i32 {
a + b
}
Rust, bağımlılık yönetimi, kütüphanelerin ve uygulamaların inşası ve yayımlanmasını kolaylaştıran paket yöneticisi Cargo dahil olmak üzere zengin bir geliştirici araçları setine sahiptir. Rust standart kütüphanesi, çeşitli görevler için bol miktarda çalışma zamanı desteği sağlar.
Rust geliştirmeyi destekleyen birkaç IDE ve editör bulunmaktadır:
Yeni bir Rust projesi oluşturmak için geliştiriciler aşağıdaki komutu kullanabilir:
cargo new my_project
Bu komut, temel bir Rust proje yapısını içeren yeni bir dizin oluşturur. Projeyi derlemek için, proje dizinine gidip şu komutu çalıştırın:
cargo build
Rust, performans ve güvenlik özellikleri nedeniyle çeşitli alanlarda kullanılmaktadır. Ana uygulama alanları şunlardır:
Rust, performans ve güvenliğe olan vurgusu nedeniyle diğer sistem programlama dilleriyle sıkça karşılaştırılmaktadır. İşte bazı karşılaştırmalar:
Rust kodunu diğer dillere çevirmek, benzersiz sahiplik modeli ve gelişmiş özellikleri nedeniyle zorlayıcı olabilir. Ancak, bazı araçlar kaynak-kaynağa çevirileri kolaylaştırmaktadır, örneğin: