Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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:

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:

  1. fn main() {:
    • fn kalit so‘zi Rust da yangi funksiya e’lon qilishni bildiradi.
    • main funksiyasi — har qanday Rust dasturining kirish nuqtasi (entrypoint) hisoblanadi. Dastur doimo aynan shu yerdan boshlanadi.
    • Funksiya tanasi jingalak qavslar { ... } ichida yoziladi.
  2. 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:

  1. Cargo.toml konfiguratsiya faylini yaratdi. TOML (Tom’s Obvious Minimal Language) formati loyiha haqidagi metadata va uning bog‘liqliklarini saqlaydi.
  2. src/ jildini va uning ichida boshlang‘ich main.rs faylini yaratdi.
  3. Yangi Git repozitoriyasini boshladi (.git va .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:

  1. 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.
  2. Qo‘lda boshqarish (Manual Allocation): C va C++ kabi tillarda dasturchi malloc/free orqali 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:

  1. Rust da har bir qiymatning o‘z Egasi (Owner) bo‘ladi.
  2. Bir vaqtning o‘zida faqat bitta Ega bo‘lishi mumkin.
  3. Qachonki Ega o‘z ko‘rinish sohasidan (scope) chiqib ketsa, qiymat avtomatik ravishda xotiradan o‘chiriladi (drop qilinadi).

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 TerminO‘zbekcha StandartTa’rifi va Misol
OwnershipEgalik tizimi / Egalik huquqiRust da xotira xavfsizligini ta’minlovchi resurs boshqaruvi qoidalari.
BorrowingQarz olishO‘zgaruvchining egalik huquqini bermasdan, unga havola (& yoki &mut) orqali vaqtincha murojaat qilish.
ReferenceHavolaBoshqa bir o‘zgaruvchining xotiradagi manziliga ko‘rsatuvchi xavfsiz mexanizm.
LifetimeYashash muddatiKompilyator (borrow checker) tomonidan havola qancha vaqt davomida yaroqli ekanligini kafolatlovchi parametr ('a).
TraitXislat (Trait)Muayyan tip amalga oshirishi (implement qilishi) kerak bo‘lgan metodlar to‘plami (interfeys).
Pattern MatchingAndaza moslashMa’lumotlar strukturasini shartlar asosida tekshirish va ajratib olish (match).
SliceKesmaTo‘plamning (masalan, massiv yoki String) ma’lum bir qismiga uzluksiz havola (&[T], &str).
Smart PointerAqlli ko‘rsatkichOddiy xotira manzilidan tashqari qo‘shimcha funksionallik va avtomatik tozalashga ega tip (Box, Rc, Arc).
Zero-cost AbstractionNol-xarajatli abstraksiyaYuqori darajadagi sintaktik qulaylik, lekin dastur ishlash tezligiga (runtime) hech qanday salbiy ta’sir ko‘rsatmaydi.
ConcurrencyParalellik / Ko‘p oqimlilikDasturda bir vaqtning o‘zida bir nechta vazifalarni xavfsiz bajarish.
Data RaceMa’lumotlar poygasiIkki 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.
ImmutableO‘zgarmasQiymati yaratilgandan so‘ng o‘zgartirilishi mumkin bo‘lmagan o‘zgaruvchi (default Rust holati).
MutableO‘zgaruvchanQiymati keyinchalik o‘zgartirilishi mumkin bo‘lgan o‘zgaruvchi (mut).