Rust dilinin yerleşik paket yöneticisi ve yapılandırma sistemi cargo'dur ve rustup aracılığıyla yüklenen bu aracın temel kullanımında aşağıdaki komutlar oldukça işlevseldir.
- Yeni bir proje oluşturmak için:
cargo new
- Projeyi derlemek için:
cargo build
- Projeyi çalıştırmak için:
cargo run
- Proje bağımlılıklarını güncellemek için:
cargo update
- Projeyi test etmek için:
cargo test
- Proje belgelerini rustdoc aracılığıyla oluşturmak için:
cargo doc
- Proje derlenmeden önce oluşabilecek hataları gözlemleyebilmek için:
cargo check
Ayrıca, Rust'un resmi sandıklarının yayınlandığı crates.io alanında projelerin sandık/paket olarak yayınlanması için kullanılan Cargo komutları da bulunmaktadır.
💡 Bir sandığın crates.io üzerinde yayınlanabilmesi için bir API jetonu alınması gereklidir. Jeton, siteye kaydolunduktan sonra Hesap Ayarları sekmesinde görünecektir. İlerleyen bölümlerde Kod Organizasyonu başlığı altında bu konu hakkında daha fazla tartışma olanağı bulacağız.
- API jetonuyla crates.io'ya giriş:
cargo login
- Yerel sandığı crates.io'ya yüklenebilir hale getirmek için:
cargo package
- Sandığı crates.io'ya yüklemek için:
cargo publish
komutlarını kullanabilirisniz.
Rust programlama dilinde crates.io aracılığıyla paylaşılan her paket Crate
adını alır. Crate' nin Türkçe karşılığı "tahtadan yapılmış kasa" anlamına geldiğinden, dilimizde "sandık" olarak karşılık bulacaktır. Bir sandık ya çalıştırılabilir dosya ya da kütüphane üretebilir. Başka bir deyişle, bir sandık binary biçiminde veya bir kütüphane şeklinde yayımlanabilir.
Yeni bir Rust projesi başlatmak için cargo new proje_adı --bin
komutu kullanılır. --bin
parametresi isteğe bağlı olarak kullanıldığından her iki durumda da oluşturulan proje çalıştırılabilir bir dosya olacaktır. Ancak projenin --lib
parametresi ile başlatılması projenin bir kütüphane olarak oluşturulması için yeterlidir. Aksi belirtilmediği sürece yeni bir proje başlatıldığında, proje adıyla çalıştırılabilir dosya oluşturulur. Bu davranış rustc --crate-type
veya cargo --bin
parametresi kullanılarak değiştirilebilmektedir.
cargo new proje_adi --bin
komutlarıyla başlatılan çalıştırılabilir paket yapılandırmasının proje dizini aşağıdaki gibi görünecektir.
├── Cargo.toml
└── src
└── main.rs
cargo new proje_adi --lib
komutuyla oluşturulan kütüphane paketinin dizin yapısı ise aşağıdakine benzeyecektir.
├── Cargo.toml
└── src
└── lib.rs
- Cargo.toml (Büyük C harfiyle başlar), Cargo'nun projenizi derlemesi için gereken tüm meta verileri içeren yapılandırma dosyasıdır.
- src klasörü kaynak kodun saklandığı dizindir.
- Her sandığın üstü kapalı bir sandık kökü yani giriş noktası vardır. Çalıştırılabilir ikili sandıklar için bu giriş noktası main.rs olurken kütüphane sandıkları için bu sandık kökü lib.rs'dir.
💡 Bir ikili sandığı cargo build
veya cargo run
komutlarıyla oluşturduğunuzda çalıştırılabilir dosya target/debug/
klasöründe saklanır. Ancak sandığı cargo build --release
komutuyla oluşturusanız saklanacak dizin yolu target/release/
şeklinde olacaktır.
💡 Oluşturduğunuz sandıkları, cargo.toml dosyasında yer alan bağımlılıklarıyla birlikte, Rust ekosisteminde üretilen sandıkların bir arada tutulduğu crates.io adlı Rust resmi sitesi üzerinde dilediğiniz an diğer kullanıcılar ile paylaşabilirsiniz.
Bir projenin dizin yapısı ise genel olarak aşağıdaki şekle benzeyecektir. Paket düzeni hakkında Cargo dökümanlarında daha fazla açıklama bulabilirsiniz
├── Cargo.lock
├── Cargo.toml
├── benches
│ └── large-input.rs
├── examples
│ └── simple.rs
├── src
│ ├── bin
│ │ └── another_executable.rs
│ ├── lib.rs
│ └── main.rs
└── tests
└── some-integration-tests.rs
Oluşturulan her projenin
- Kaynak kodları
src
dizininde tutulur. - Varsayılan kütüphane klasörü
src/lib.rs
' dir. - Varsayılan çalıştırılabilir dosyası
src/main.rs
' dir. - Diğer çalıştırılabilir dosyalar
src/bin/*rs
şeklinde konumlandırılır. - Birim testler gibi entegrasyon testleri, test dizininde bulundurulur.
- Proje içindeki örnekler ise
examples
dizinine konur. - Karşılaştırmalar
benches
adlı dizininde yer alır.