Rust'a Tam Giriş: Örneklerle Pratik Başlangıç ​​Rehberi

Son Güncelleme: 18/06/2025
Yazar: isaac
    ,
  • Rust, güvenliği, performansı ve etkili bellek kontrolüyle öne çıkıyor.
  • Yaygın hatalardan kaçınmanın anahtarı sahiplik ve değişebilirliktir.
  • Ekosistemde Cargo gibi araçlar ve pratik kaynaklardan oluşan bir topluluk yer alıyor.
  • Rust, basit scriptlerden sağlam çapraz platform sistemlerine kadar her şeyi oluşturmanıza olanak tanır.

Rust diline örneklerle giriş

Performans, güvenlik ve kusursuz bellek yönetimini bir arada arayanlar için Rust'ı keşfetmek oldukça maceralı olabilir., kullanım kolaylığından ödün vermeden. Bu yazıda, Rust'ın büyüleyici dünyasına dalacağız, temellerini, başlıca güçlü ve zayıf yönlerini ortaya çıkaracağız ve ilk günden itibaren en iyi şekilde faydalanabilmeniz için pratik örnekler göstereceğiz.

İlk bakışta C veya C++ gibi diğer sistem dillerine benzese de Rust, modern programlama yaklaşımı sayesinde güçlü bir giriş yapıyor. katılım ve güvenlikHem yeni başlayanlar hem de bellek hataları veya yarış koşullarıyla ilgili baş ağrılarından kaçınmak isteyen deneyimli geliştiriciler için idealdir.

Rust nedir ve neden bu kadar popülerlik kazanıyor?

pas bir dili programación sistemlerin temel amacı, arasında bir denge sunmaktır güvenlik, hız ve katılım. Diğer benzer dillerde bulunan yaygın hataları ortadan kaldırma öncülüyle doğducan sıkıcı gibi Boş işaretçiler, bellek sızıntıları ve yarış koşulları sıklıkla aynı anda ortaya çıkan ortamlarda ortaya çıkar.

Birçok kişi bunu C ve C++'ın doğal halefi olarak görüyor, ancak modern bir söz dizimi, canlı bir ekosistem ve radikal bir odaklanma ile güvenilirlik yazılımınMozilla, Dropbox, Cloudflare, Canonical ve daha birçok şirket tarafından yüksek performanslı sistemler ve uygulama projeleri için kullanılmaktadır.

Bunlar ana Pas diferansiyel değerleri:

  • Çöp toplama olmadan bellek yönetimi: Sahiplik sistemi ve sıkı ödünç alma kuralları sayesinde, müdahaleci bir çöp toplayıcıya ihtiyaç duyulmadan birçok yaygın bellek sorunu önlenir.
  • Güvenli ve verimli eşzamanlılık: Derleyici yarış koşullarının oluşmamasını sağlayarak çoklu görevin daha kolay yapılmasını sağlar.
  • Hızı C/C++ ile karşılaştırılabilir: Bellek ayırma yoluyla derlenip kontrol edildiğinde hızlı ve verimli ikili dosyalar elde edilir.
  • Sağlam ve statik tip sistemi: Derleme zamanında birçok hatayı tespit ederek projelerin bakımını ve geliştirilmesini kolaylaştırır.

Rust açık kaynaklıdır ve her seviyeye uygun eğitim materyalleri, kitaplar, forumlar ve konuşmalar gibi bol miktarda kaynağın bulunduğu oldukça aktif bir topluluğa sahiptir.

Geliştirme ortamının kurulumu ve yapılandırılması

Rust'a başlamak çok basittir. Dilin ve temel araçlarının kurulumu için önerilen yöntem şudur: RustupBu yükleyici, Rust'ın en son kararlı sürümünü indirmenize olanak tanır. Rustc (derleyici) ve Kargo (paket yöneticisi ve proje derlemesi).

GNU/Linux veya macOS sistemlerinde, sadece aşağıdaki komutu çalıştırın terminal:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | ş

En Windows rustup-init.exe çalıştırılabilir dosyasını resmi web sitesinden indirip kurulum sihirbazını takip edebilirsiniz.

Kurulumun başarılı olduğunu doğrulamak için şunu çalıştırın:

rustc --sürüm

Bu, Rust derleyicisinin yüklü sürümünü gösterecektir. Herhangi bir sorunla karşılaşırsanız, özellikle macOS'ta, Xcode geliştirme araçlarının şu şekilde yüklü olduğundan emin olabilirsiniz:

xcode-select - install

Ayrıca orada IDE'ler için uzantılar VS Code, IntelliJ IDEA, Emacs ve Nano gibi en popülerleri, Rust kodunu düzenlemeyi, otomatik tamamlamayı ve hata ayıklamayı kolaylaştırır.

  Hata 0x0000000a (Ölümün Mavi Ekranı). 6 Çözüm

Temel araçlar: rustup, rustc ve Cargo

Ortam hazır olduğunda, ana unsurları bilmek uygundur. Rust'ta varsayılan olarak dahil edilen araçlar:

  • paslanma: Farklı Rust sürümlerini ve güncelleme kanallarını (stabil, beta, gecelik) yönetir. Sürümler arasında kolayca kurulum, güncelleme veya geçiş yapmanıza olanak tanır.
  • paslı: Rust derleyicisidir. Kaynak kodunu (.rs) yürütülebilir ikili dosyalara dönüştürür. Doğrudan veya Cargo aracılığıyla çağrılabilir.
  • Kargo: Rust ekosisteminin kalbidir, proje yapılarını, bağımlılıkları (sandıklar), testleri, belgeleri ve daha fazlasını yönetir. İlk günden itibaren en iyi arkadaşınız olacak.

Yeni bir proje oluşturmak için tipik komut şudur:

kargo yeni my_project

Bu, manifestoyu da içeren standart bir dizin ve dosya yapısı oluşturur. kargo.toml ve bir ana kaynak dosyası src/main.rsSadece sonuncusunu kodunuzla düzenlemeniz gerekiyor.

Projeyi derlemek ve çalıştırmak için şunu kullanın:

cargo build # Projeyi derle (hedef/debug/ dizinindeki ikili dosya) cargo run # Ortaya çıkan ikili dosyayı derle ve çalıştır

Rust kod yürütme örneği

Rust programının sözdizimsel temelleri ve yapısı

La Rust'ta bir programın temel yapısı Basittir ve diğer derlenmiş dillerle çalışmış olanlara tanıdık gelecektir. Klasik "Hello World"ün nasıl görüneceğine bakalım:

fn main() { println!("Merhaba dünya!"); }

ana işlev fn ana() giriş noktasıdır. Sembol ! trans yazdır bunun bir makro olduğunu gösterir (Rust'ın özel bir özelliği) kodunu oluşturun). Noktalı virgül ; Talimatları tamamla.

Kaynak kodu genellikle uzantılı dosyalarda bulunur .rs ve sözdizimi diğer sistem dillerini anımsatıyor.

Değişkenler, sabitler ve değişebilirlik

Rust'ta tüm değişkenler varsayılan olarak değiştirilemezYani, bir değer atandığında, aksi açıkça belirtilmediği sürece değiştirilemez. Bu, birçok hatayı önler ve kodu daha öngörülebilir hale getirir.

Bir değişkeni bildirmek için şunu kullanırsınız: izin:

x = 10 olsun; // x = 20; // Bu başarısız olur çünkü x değişmezdir

Bir değişkenin değiştirilebilmesi gerekiyorsa, bunu şu şekilde belirtin: mut:

let mut x = 10; x = 20; // Artık yasal

W sabitleri ile tanımlanır const ve büyük harfleri kural gereği isim olarak kullanan açık bir türü olmalıdır:

sabit MAKSİMUM_BOYUT: i32 = 100;

Bu, daha sağlam ve sürdürülebilir kodlara sahip olmanıza yardımcı olur.

Veri türleri: skaler ve bileşik

Pas bir çok çeşitli ilkel tipler, hem skaler hem de bileşik. Başlıcalarını gözden geçirelim:

  • İmzalı tam sayılar: i8, i16, i32, i64, i128, size
  • İşaretsiz tam sayılar: u8, u16, u32, u64, u128, kullan
  • Kayan nokta: f32, f64 (ondalıklar için varsayılan değer f64'tür)
  • karakterler: char (tam Unicode'u destekler)
  • Boolean'lar: bool (doğru veya yanlış)
  • Birim türü: () (diğer dillerdeki void'e benzer)

Mevcut koleksiyonlarımız için demetler y diziler:

  • Demetler: Farklı türdeki değerleri gruplamanıza ve bunlara konuma göre erişmenize olanak tanırlar:
let tuple = (1, "metin", doğru); let first = tuple.0; // 1
  • Diziler: Aynı türdeki birden fazla değeri birlikte gruplanmış şekilde depolarlar. Boyut belirtilmelidir:
diziyi şu şekilde bırakalım: [i32; 3] = [10, 20, 30];

Diziler sabit bir boyuta sahiptir ve bitişik bellekte yer kaplar, bu da performansı artırır.

Bellek yönetimi: yığın ve yığın

Rust, aralarında net bir ayrım yapar yığın ve yığın belleğiVarsayılan olarak, bilinen, sabit boyuttaki veriler yığında saklanırken, dinamik boyut gerektiren veriler (vektörler gibi) yığında saklanır.

  Archon, yapay zeka için bir işletim sistemi olarak işlev görüyor.

C gibi diğer dillerle karşılaştırıldığında en büyük fark, Rust'ın bir mülkiyet sistemi (özellik), belleği elle yönetme ihtiyacını ortadan kaldırır, ancak çöp toplayıcısı olmadan.

Temel yığın ve heap örneği:

x = 5 olsun; // x yığında saklanır v = vec![1, 2, 3] olsun; // v (başvuru ve meta veri) yığında, veri yığında

Mülkiyet, Borçlanma ve Yaşam Boyu Sistemi

Rust'ta bellek yönetiminin kalbi şudur: mülkiyet sistemiHer değerin tek bir sahibi vardır; kapsam dışına çıktığında, bellek otomatik olarak serbest bırakılır. Bir örneğe bakalım:

let s1 = String::from("hello"); let s2 = s1; // println!("{}", s1); // Hata: s1 artık geçerli değil, sahiplik s2'ye aktarıldı

Her iki değişkenin de geçerli olmasını istiyorsak, bir derin kopya:

let s1 = String::from("hello"); let s2 = s1.clone(); // Şimdi ikisi de bağımsızdır

Bir fonksiyon parametre olarak bir değer aldığında, varsayılan olarak sahipliği üstlenir:

fn take_ownership(s: String) { println!("{}", s); } let my_string = String::from("owner"); take_ownership(my_string); // println!("{}", my_string); // Hata, sahiplik devredildi

Bunu önlemek için kullanılırlar referanslar (&), değere geçici erişime izin verir:

fn read_reference(s: &Dize) { println!("{}", s); }

Değeri değiştirmek istiyorsak, değiştirilebilir referanslar kullanmalıyız (&mut), ve aynı anda yalnızca bir tane değiştirilebilir referans olabileceği veya birden fazla değişmez referans olabileceği kuralına uyun.

Rust'taki makrolar ve işlevler

Rust, işlevleri açık ve kolay bir şekilde tanımlamanıza olanak tanır. Anahtar sözcük fn tanımı başlatır. Bir fonksiyon bir değer döndürürse, ifadeyi (noktalı virgül olmadan) basitçe sona yerleştirin:

fn toplamı(a: i32, b: i32) -> i32 { a + b }

Rust'taki özel bir özellik ise makrolar, özdeşleşmiş !. Örneğin, yazdır! konsola yazdırmak için. Derleme zamanında kod oluşturulmasına izin verirler ve özellikle tekrarlayan görevlerin otomatikleştirilmesi için faydalıdırlar.

Yapılar (structs) ve numaralandırmalar (enums)

W yapılar Rust'ta özel veri tipleri oluşturmanıza izin verir:

struct Konum { x: i32, y: i32, } nokta = Konum { x: 10, y: 20 };

Yapılar oluşturulabilir tuple yapıları (isimsiz alanlar) veya adlandırılmış alanlara sahip yapılarEk olarak, ekleyerek birahane Alanlara gelince, bunlar mevcut modülün dışında herkese açık hale getirilir.

Jardines de Viveros numaralar İlişkili verilerle birlikte, birden fazla varyanttan biri olabilen bir türü tanımlamanıza olanak tanırlar:

enum Action { Jump, Move { x: i32, y: i32 }, Say(Dize), } let jump = Action::Jump; let mov = Action::Move { x: 5, y: 10 }; let speak = Action::Say(Dize::from("Merhaba!"));

Seçenek numaralandırması ve isteğe bağlı değerlerin güvenli bir şekilde işlenmesi

Rust'ta null mevcut değilBunun yerine, enum Seçeneği bir değerin mevcut olup olmadığını ifade etmek için (Bir miktar(değer)) veya yok (Hayır):

sayı = Some(42); hiçbir şey olmasın: Seçenek = Hiçbiri;

Option ile çalışmak için değeri şu yöntemlerle açmanız gerekir: paketi aç() (dikkatli olun, Hiçbiri üzerinde başarısız olabilir) veya unwrap_or(varsayılan_değer)Daha da iyisi kullanmaktır kalıp eşleme tüm durumları kapsayacak şekilde:

eşleşme sayısı { Some(n) => println!("Değer {}", n), None => println!("Değer yok"), }

Desen Eşleştirme ve Akış Kontrolü

El kalıp eşleme Rust'ın mücevherlerinden biri olup, operatör ile farklı olasılıkları güvenli ve net bir şekilde yönetmenizi sağlar. maç:

enum Saldırı { Yumruk, Kılıç, Mızrak, Büyü, } let saldırı = Saldırı::Kılıç; let hasar = maç saldırısı { Saldırı::Yumruk => 5, Saldırı::Kılıç => 12, Saldırı::Mızrak => 8, Saldırı::Büyü => 20, };

Ayrıca daha hafif bir sözdizimi de var eğer bırakılsa, yalnızca belirli bir durum ilgi çekici olduğunda yararlıdır:

eğer let Some(değer) = option { println!("Mevcut değer: {}", değer); }

Yöntemler, ilişkili işlevler ve kapanışlar

Anahtar kelimeyi kullanarak ima Yapılara ve enumlara yöntemler ve ilişkili işlevler ekleyebilirsiniz. Örneğin:

struct Nokta { x: i64, y: i64, } Noktayı uygula { fn yeni(x: i64, y: i64) -> Kendi { Kendi { x, y } } fn &mut kendi, diğer: Noktaya_taşı() { kendi.x = diğer.x; kendi.y = diğer.y; } }

W kapanışları veya anonim işlevler, ortam değişkenlerini yakalamanıza olanak tanır. Bunlar ile tanımlanır |parametreler|:

faktör = 10 olsun; faktör başına = |x: i32| x * faktör olsun; sonuç = faktör başına(5); // 50

Rust'ta otomatik test

Rust, bir sistemle donatılmıştır entegre test. Üretim kodunun yanında test fonksiyonları oluşturmanıza olanak tanır:

fn add(a: i32, b: i32) -> i32 { a + b } #[cfg(test)] mod tests { use super::*; #[test] fn basic_sum() { assert_eq!(sum(2, 3), 5); } }

Çalıştırmak için şunu yazmanız yeterlidir:

kargo testi

Bu, tüm testleri çalıştıracak ve sonuçları konsolda görüntüleyerek, hataları üretime ulaşmadan önce tespit etmenizi sağlayacaktır.

  Bitlife'da dil adım adım nasıl değiştirilir?

Rust'ı öğrenmek için kaynaklar ve etkileşimli örnekler

Rust'ı uygulamalı olarak öğrenmek istiyorsanız, çok sayıda resmi ve topluluk kaynağı mevcuttur:

  • Rust Programlama Dili: resmi, ücretsiz ve güncel kitap, adım adım rehber Temelden tamamlanmış projelere kadar.
  • Etkileşimli kod örnekleri: Comprehensive Rust gibi platformlar, tarayıcının kendisinde örnekler üzerinde denemeler yapmanıza ve düzenleme yapmanıza olanak tanır; bu da derleyicinin ötesinde hiçbir şey yüklemeden öğrenmeyi kolaylaştırır.
  • Pratik alıştırmalar: Günümüzdeki eğitimlerin çoğu, konsol projelerinden küçük web uygulamaları ve otomasyon scriptleri oluşturmaya kadar yaparak öğrenmeye odaklanıyor.
  • Forumlar ve topluluklar: Rust topluluğu oldukça aktiftir ve soruların yanıtlanmasına, kod incelemelerine, buluşmalar ve konferanslar gibi etkinliklere ayrılmış alanları vardır.

Etkileşimli örnekler genellikle şu tür kod bloklarını içerir:

fn main() { println!("Beni düzenle!"); }

Korkusuzca test etmek, kodu değiştirmek ve sonuçları anında görmek için bu etkileşimli ortamlardan yararlanmaya değer.

Mevcut ekosistemde Rust: entegrasyon ve kullanım örnekleri

Rust sadece konsol uygulamaları için değildir. Giderek daha fazla şirket ve birey, gömülü sistemler, diğer dillerle entegrasyonlar (örneğin Neon veya Node.js aracılığıyla) için Rust'ı benimsiyor. Python PyO3 ile), arka uç web geliştirme (Rocket veya Actix gibi çerçevelerle) ve hatta OS tamamlayınız.

Mozilla ve Dropbox gibi önde gelen şirketler ve kuruluşlar, özellikle güvenilirliği, çalışma zamanı hata önleme özelliği ve olağanüstü performansı nedeniyle kritik görev projeleri için Rust'ı tercih ediyor.

Birden fazla mimari ve platform için derleme yeteneği, Cargo tarafından yönetilen bağımlılık sistemi ve kıskanılacak belgelerle birlikte Rust, her türlü geliştirme için çok yönlü bir seçenek haline geliyor.