Kirish: Rust Dasturlash Tili
Eslatma: Ushbu kitob rasmiy “The Rust Programming Language” (Steve Klabnik, Carol Nichols va Rust jamoasi) kitobining O‘zbekiston Rust hamjamiyati (Rust Uzbekistan / rust-uz) tomonidan tayyorlangan ochiq manbali o‘zbekcha tarjimasidir.
Rust dasturlash tiliga xush kelibsiz! Rust — bu har bir kishiga ishonchli va yuqori unumdorlikka ega dasturiy ta’minot yaratish imkonini beruvchi tizimli dasturlash tilidir.
Rust Kimlar Uchun?
Rust ko‘plab sabablarga ko‘ra har xil turdagi ishlab chiquvchilar uchun ideal vositadir.
Talabalar va Yangi Muhandislar
Rust — bu kompyuter muhandisligi, operatsion tizimlar va apparat darajasidagi tushunchalarni (xotirani boshqarish, CPU keshlar, ko‘p oqimlilik) o‘rganish uchun ajoyib tildir. Rust yordamida siz C yoki C++ dagi kabi “Segmentation Fault” yoki xotira sizib ketishi (memory leak) xatolarisiz xavfsiz past darajali kod yozishni o‘rganasiz.
Tizim Dasturchilari (Systems Developers)
Agar siz operatsion tizim yadrolari, fayl tizimlari, o‘yin dvigatellari yoki yuqori yuklamali tarmoq serverlarini qursangiz, Rust sizga Garbage Collector (GC) siz C/C++ tezligini va shu bilan birga xotira xavfsizligini beradi.
Veb va Backend Dasturchilari
Rust Tokio, Axum va Actix-web kabi asinxron freymvorklar orqali soniyasiga yuz minglab so‘rovlarni (RPS) minimal RAM va CPU sarflagan holda qayta ishlash imkonini beradi.
Ushbu Kitobdan Qanday Foydalanish Kerak?
Bu kitob amaliy yondashuvga asoslangan. Siz shunchaki matnni o‘qib qolmasdan, har bir bobdagi kodlarni o‘z kompyuteringizda (terminalda) yozib, sinab borishingiz tavsiya etiladi.
Agar sizda biror savol yoki taklif bo‘lsa:
- 🌐 Hamjamiyat: groups.ferris.uz
- 🦀 GitHub: github.com/rust-uz/book
Keling, Rust olamiga sayohatimizni boshlaymiz!
1-Bob: Ishni Boshlash (Getting Started)
Rust olamiga sayohatingizni boshlaymiz! Bu bobda biz:
- Linux, macOS yoki Windows operatsion tizimlarida Rust muhitini o‘rnatishni,
- Dunyodagi har bir dasturchi yozadigan an’anaviy “Salom, Dunyo!” dasturini Rust da noldan yozish va kompilyatsiya qilishni,
- Rust ning rasmiy paket menejeri va loyiha yig‘uvchisi — Cargo vositasidan to‘g‘ri foydalanishni o‘rganamiz.
Rust dasturlash tilining eng katta kuchi — uning asboblari (tooling) mukammalligida. Ishni boshlashdan oldin kompyuteringizda terminal (komandalar qatori) bilan ishlash bo‘yicha minimal tajriba yetarli.
Keling, avvalo Rust ni kompyuteringizga o‘rnatishdan boshlaymiz!
O‘rnatish (Installation)
Rust bilan ishlashning birinchi qadami — uni kompyuteringizga o‘rnatishdir. Biz Rust dasturchilari jamoasi tomonidan taqdim etilgan rasmiy o‘rnatuvchi — rustup vositasidan foydalanamiz.
Linux va macOS Tizimlarida O‘rnatish
Agar siz Linux (masalan, Arch Linux, Ubuntu, Debian) yoki macOS tizimidan foydalanayotgan bo‘lsangiz, terminalni oching va quyidagi buyruqni kiriting:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Ushbu skript avtomatik ravishda operatsion tizimingizni aniqlaydi, so‘nggi barqaror (stable) Rust kompilyatori (rustc), standart kutubxona va cargo menejerini yuklab oladi.
Ekrandagi ko‘rsatmalarga amal qilib, 1 (default installation) variantini tanlang. O‘rnatish tugagach, o‘zgarishlar kuchga kirishi uchun terminalingizni qayta ishga tushiring yoki quyidagini bajaring:
source "$HOME/.cargo/env"
C Kompilyatorini O‘rnatish (Linker talabi)
Rust dasturlarini yig‘ish (link qilish) uchun tizimda C kompilyatori bo‘lishi lozim:
- Arch Linux:
sudo pacman -S base-devel - Ubuntu / Debian:
sudo apt update && sudo apt install build-essential - macOS:
xcode-select --install
Windows Tizimida O‘rnatish
Windows foydalanuvchilari https://www.rust-lang.org/tools/install sahifasiga kirib, rustup-init.exe dasturini yuklab olishlari va ishga tushirishlari lozim.
O‘rnatish jarayonida Visual Studio C++ Build Tools talab qilinishi mumkin.
O‘rnatishni Tekshirish
Rust to‘g‘ri o‘rnatilganligini bilish uchun terminalda quyidagi buyruqni kiriting:
rustc --version
Agar siz quyidagiga o‘xshash javobni ko‘rsangiz, demak hammasi muvaffaqiyatli yakunlandi:
rustc 1.85.0 (4d91de4e4 2026-02-17)
Rust ni doimiy so‘nggi versiyaga yangilab turish uchun esa oddiygina quyidagi buyruq kifoya:
rustup update
Salom, Dunyo! (Hello, World!)
Endi birinchi dasturingizni yozish vaqti keldi. Dasturlash tillarini o‘rganishda terminalga “Salom, Dunyo!” matnini chiqarish an’anaga aylangan.
Loyiha Jildini Yaratish
Terminalda yangi jild oching va uning ichiga kiring:
mkdir ~/projects/salom_dunyo
cd ~/projects/salom_dunyo
Dastur Kodini Yozish
O‘zingiz yoqtirgan matn muharriri (VS Code, Neovim, Helix yoki Nano) yordamida main.rs nomli fayl yarating. Rust manba kodlari har doim .rs kengaytmasi bilan tugaydi.
main.rs fayliga quyidagi kodni yozing:
fn main() {
println!("Salom, Dunyo!");
}
Faylni saqlang va terminalga qayting.
Dasturni Kompilyatsiya Qilish va Ishga Tushirish
Rust — bu oldindan kompilyatsiya qilinadigan (ahead-of-time compiled) til. Bu degani siz dasturingizni kompilyatsiya qilib binar (executable) faylga aylantirasiz va ushbu faylni Rust o‘rnatilmagan boshqa kompyuterlarda ham bemalol ishga tushirishingiz mumkin!
Faylni kompilyatsiya qilish uchun:
rustc main.rs
Agar barcha qoidalar to‘g‘ri bajarilgan bo‘lsa, rustc jim ishlaydi va jildingizda yangi binar fayl paydo bo‘ladi (Linux/macOS da main, Windows da main.exe).
Endi dasturni ishga tushiring:
./main
Terminalingizda quyidagi yozuv chiqadi:
Salom, Dunyo!
Kod Anatomiyasi: Qatorlar Tahlili
Keling, yozgan kodimizni batafsil ko‘rib chiqaylik:
fn main() {:fnkalit so‘zi Rust da yangi funksiya e’lon qilishni bildiradi.mainfunksiyasi — har qanday Rust dasturining kirish nuqtasi (entrypoint) hisoblanadi. Dastur doimo aynan shu yerdan boshlanadi.- Funksiya tanasi jingalak qavslar
{ ... }ichida yoziladi.
println!("Salom, Dunyo!");:- Ushbu qator ekranga matn chiqaradi.
- Diqqat qiling:
println!oxirida undov belgisi (!) bor. Bu shunchaki oddiy funksiya emas, balki Rust Makrosi (Macro) ekanligini anglatadi. Rust da makroslar va oddiy funksiyalar boshqacha ishlaydi (buni 19-bobda batafsil ko‘ramiz). - Har bir ifoda oxiriga nuqta-vergul (
;) qo‘yiladi.
Salom, Cargo! (Hello, Cargo!)
Kichik dasturlar uchun rustc main.rs yetarli, lekin haqiqiy loyihalarda yuzlab fayllar, tashqi kutubxonalar (dependencies) va testlar bo‘ladi. Rust bularning barchasini boshqarish uchun o‘zining rasmiy qurish tizimi va paket menejeri — Cargo ni taqdim etadi.
Cargo nimalarga qodir?
- Loyihalar yaratish va strukturasini boshqarish;
- Kodni kompilyatsiya qilish (
cargo build); - Dasturni darhol ishga tushirish (
cargo run); - Kodda xatolar yo‘qligini tezkor tekshirish (
cargo check); - Tashqi kutubxonalarni avtomatik yuklab olish;
- Testlarni ishga tushirish (
cargo test).
Cargo Yordamida Yangi Loyiha Ochish
Terminalingizda yangi loyiha yaratish uchun quyidagi buyruqni bering:
cargo new salom_cargo
cd salom_cargo
Keling, Cargo bizga qanday fayllarni yaratib berganini ko‘ramiz:
salom_cargo
├── Cargo.toml
└── src
└── main.rs
Cargo avtomatik tarzda:
Cargo.tomlkonfiguratsiya faylini yaratdi. TOML (Tom’s Obvious Minimal Language) formati loyiha haqidagi metadata va uning bog‘liqliklarini saqlaydi.src/jildini va uning ichida boshlang‘ichmain.rsfaylini yaratdi.- Yangi Git repozitoriyasini boshladi (
.gitva.gitignore).
Cargo.toml Fayli Ichida Nimalar Bor?
Keling, Cargo.toml faylini ko‘rib chiqaylik:
[package]
name = "salom_cargo"
version = "0.1.0"
edition = "2021"
[dependencies]
[package]bo‘limi paket nomi, versiyasi va Rust nashri (edition) ni belgilaydi.[dependencies]bo‘limida esa loyihangiz foydalanadigan barcha tashqi kutubxonalar ro‘yxati (crates.io dan) yoziladi.
Loyihani Yig‘ish va Ishga Tushirish
Cargo bilan loyihani yig‘ish juda oson:
cargo build
Bu buyruq kodni kompilyatsiya qiladi va target/debug/salom_cargo manziliga dastur faylini joylashtiradi.
Agar siz kodni ham yig‘ib, ham bir vaqtda ishga tushirmoqchi bo‘lsangiz, shunchaki quyidagini yozasiz:
cargo run
Ekranda:
Compiling salom_cargo v0.1.0 (/home/user/salom_cargo)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.42s
Running `target/debug/salom_cargo`
Hello, world!
Kodni Tezkor Tekshirish (cargo check)
Katta loyihalarda har safar binar fayl yasamasdan, faqat sintaksis va tiplar to‘g‘riligini tekshirish uchun:
cargo check
Bu cargo build dan bir necha barobar tez ishlaydi va kompyuter resurslarini tejaydi.
Release Rejimida Yig‘ish
Loyihangiz tayyor bo‘lib, uni ishlab chiqarish (production) muhitiga chiqarish vaqti kelganda, maksimal optimizatsiyalash uchun quyidagi bayroqdan foydalanasiz:
cargo build --release
Bu buyruq barcha CPU optimizatsiyalarini yoqadi, kodni tekshirishlarni tezlashtiradi va binar hajmini kichraytiradi (target/release/salom_cargo).
Tabriklaymiz! Siz Rust va Cargo asoslarini to‘liq o‘zlashtirdingiz.
2. Taxmin Qilish O‘yini Dasturlash
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
3. Dasturlashning Umumiy Tushunchalari
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
O‘zgaruvchilar va O‘zgaruvchanlik (mut)
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
Ma’lumotlar Turlari (Data Types)
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
Funksiyalar Qanday Ishlaydi
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
Izohlar (Comments)
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
Boshqaruv Oqimi (Control Flow)
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
4-Bob: Egalik Tizimini Tushunish (Understanding Ownership)
Egalik (Ownership) — bu Rust tilining eng o‘ziga xos va inqilobiy xususiyati bo‘lib, u dasturchiga Garbage Collector (axlat yig‘uvchi)siz xotira xavfsizligini ta’minlash imkonini beradi.
Xotira Boshqaruvi Tarixi
Dasturlash tillarida xotira (RAM) bilan ishlashning asosan ikkita usuli bor edi:
- Garbage Collector (GC): Go, Java, Python, JavaScript kabi tillarda dastur orqa fonda xotirani doimiy kuzatib boradi va kerak bo‘lmagan joylarni tozalaydi. Kamchiligi: kutilmagan to‘xtashlar (stop-the-world pauses) va katta resurs sarfi.
- Qo‘lda boshqarish (Manual Allocation): C va C++ kabi tillarda dasturchi
malloc/freeorqali xotirani o‘zi ajratadi va o‘zi bo‘shatadi. Kamchiligi: insoniy xatolar (Dangling Pointers, Double Free, Buffer Overflows, Use-After-Free) natijasida kiberxavfsizlik teshiklarining 70% dan ortig‘i aynan shu sababli kelib chiqadi.
Rust Yechimi: Egalik Qoidalari (Ownership Rules)
Rust uchinchi va mutlaqo yangi yo‘lni tanladi: Xotira kompilyatsiya vaqtida qat’iy qoidalar to‘plami asosida boshqariladi!
Kompilyator barcha qoidalarni dastur yig‘ilayotganda tekshiradi. Agar qoidalardan biri buzilsa, dastur hatto kompilyatsiya ham bo‘lmaydi!
Egalikning 3 ta Asosiy Qoidasi:
- Rust da har bir qiymatning o‘z Egasi (Owner) bo‘ladi.
- Bir vaqtning o‘zida faqat bitta Ega bo‘lishi mumkin.
- Qachonki Ega o‘z ko‘rinish sohasidan (scope) chiqib ketsa, qiymat avtomatik ravishda xotiradan o‘chiriladi (
dropqilinadi).
O‘zgaruvchilar Doirasi (Scope)
Ko‘rinish sohasi (scope) — bu dastur ichida o‘zgaruvchi amal qiladigan oraliqdir.
#![allow(unused)]
fn main() {
{ // s bu yerda hali mavjud emas
let s = "salom"; // s shu qatordan boshlab mavjud va faol
// s bilan amallar bajaramiz
} // Bu blok tugadi! s ning umri tugadi va u xotiradan tozalandi
}
Keyingi darslarda biz Heap va Stack xotira turlari, Move semantikasi hamda Borrowing (Qarz olish) qanday ishlashini ko‘rib chiqamiz.
Egalik Nima? (What is Ownership?)
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
Qarz Olish va Havolalar (References & Borrowing)
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
Kesmalar Turi (The Slice Type)
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
5. Strukturalar yordamida Bog‘liq Ma’lumotlarni Tuzish
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
6. Sanamlar va Andaza Moslash (Enums & Pattern Matching)
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
7. Paketlar, Crate-lar va Modullar Tizimi
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
8. Umumiy Kolleksiyalar (Vectors, Strings, HashMaps)
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
9. Xatolar Bilan Ishlash (Error Handling)
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
10. Umumiy Tiplar, Xislatlar (Traits) va Yashash Muddati (Lifetimes)
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
11. Avtomatlashtirilgan Testlar Yozish
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
12. I/O Loyiha: Komandalar Qatori Dasturi (minigrep)
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
13. Funksional Xususiyatlar: Klojurlar va Iteratorlar
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
14. Cargo va Crates.io ga Chuqurroq
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
15. Aqlli Ko‘rsatkichlar (Smart Pointers)
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
16. Qo‘rqmas Paralellik (Fearless Concurrency)
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
17. Rust da OOP Xususiyatlari
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
18. Pattern va Matching
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
19. Ilg‘or Xususiyatlar: Unsafe, FFI va Makroslar
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
20. Yakuniy Loyiha: Ko‘p Oqimli Veb Server Qurish
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
Ilova A: Kalit So‘zlar
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
Ilova B: Operatorlar va Belgilar
Ushbu bob hozirda tarjima qilinmoqda. Hissa qo’shish uchun GitHub: rust-uz/book omboriga tashrif buyuring.
Ilova C: O‘zbekcha-Inglizcha Rust Atamalar Lug‘ati (Glossary)
Ushbu lug‘at O‘zbekiston Rust hamjamiyati tomonidan Rust dasturlash tili bo‘yicha ilmiy va amaliy adabiyotlarda chalkashliklarning oldini olish hamda yagona standartni ta’minlash maqsadida tasdiqlangan.
| Inglizcha Termin | O‘zbekcha Standart | Ta’rifi va Misol |
|---|---|---|
| Ownership | Egalik tizimi / Egalik huquqi | Rust da xotira xavfsizligini ta’minlovchi resurs boshqaruvi qoidalari. |
| Borrowing | Qarz olish | O‘zgaruvchining egalik huquqini bermasdan, unga havola (& yoki &mut) orqali vaqtincha murojaat qilish. |
| Reference | Havola | Boshqa bir o‘zgaruvchining xotiradagi manziliga ko‘rsatuvchi xavfsiz mexanizm. |
| Lifetime | Yashash muddati | Kompilyator (borrow checker) tomonidan havola qancha vaqt davomida yaroqli ekanligini kafolatlovchi parametr ('a). |
| Trait | Xislat (Trait) | Muayyan tip amalga oshirishi (implement qilishi) kerak bo‘lgan metodlar to‘plami (interfeys). |
| Pattern Matching | Andaza moslash | Ma’lumotlar strukturasini shartlar asosida tekshirish va ajratib olish (match). |
| Slice | Kesma | To‘plamning (masalan, massiv yoki String) ma’lum bir qismiga uzluksiz havola (&[T], &str). |
| Smart Pointer | Aqlli ko‘rsatkich | Oddiy xotira manzilidan tashqari qo‘shimcha funksionallik va avtomatik tozalashga ega tip (Box, Rc, Arc). |
| Zero-cost Abstraction | Nol-xarajatli abstraksiya | Yuqori darajadagi sintaktik qulaylik, lekin dastur ishlash tezligiga (runtime) hech qanday salbiy ta’sir ko‘rsatmaydi. |
| Concurrency | Paralellik / Ko‘p oqimlilik | Dasturda bir vaqtning o‘zida bir nechta vazifalarni xavfsiz bajarish. |
| Data Race | Ma’lumotlar poygasi | Ikki yoki undan ortiq oqim bir vaqtda xotiraning bitta nuqtasiga murojaat qilib, ulardan biri yozmoqchi bo‘lgandagi xatolik. Rust da bu kompilyatsiya vaqtida 100% oldi olinadi. |
| Immutable | O‘zgarmas | Qiymati yaratilgandan so‘ng o‘zgartirilishi mumkin bo‘lmagan o‘zgaruvchi (default Rust holati). |
| Mutable | O‘zgaruvchan | Qiymati keyinchalik o‘zgartirilishi mumkin bo‘lgan o‘zgaruvchi (mut). |