Məzmuna keç
Educora
Başlanğıc14 dəq1 / 10

Rust nədir? İlk proqram və Cargo

Rust dilinin nə üçün yaradıldığını, zibil yığıcı olmadan yaddaşı necə təhlükəsiz saxladığını öyrən, onu rustup ilə quraşdır və Cargo ilə ilk layihəni işə sal.

Özünü yoxla
Bu dərsdə öyrənəcəksən
  • Rust-ın yaranma tarixini və harada istifadə olunduğunu izah etmək
  • Yaddaşın idarə olunmasının üç yanaşmasını müqayisə etmək: əl ilə, zibil yığıcı və sahiblik
  • Rust-ı rustup ilə quraşdırmaq və cargo new, cargo run, cargo build əmrlərindən istifadə etmək
  • println! makrosu ilə mətn və dəyişənləri ekrana çıxarmaq

Təsəvvür et ki, C++ qədər sürətli işləyən, amma yaddaşla bağlı səhv etməyə imkan verməyən bir dil var: səhvi proqram çökməzdən əvvəl kompilyatorun özü tapır. Microsoft və Google mühəndisləri bildirib ki, onların məhsullarındakı ciddi təhlükəsizlik boşluqlarının təxminən 70%-i məhz yaddaş xətalarından yaranır. Rust bu problemi həll etmək üçün yaradılıb və bu gün ən çox sevilən proqramlaşdırma dillərindən biridir.

Qısaca Rust haqqında

Rust sistem proqramlaşdırma dilidir: kod birbaşa maşın koduna kompilyasiya olunur, virtual maşın və ya interpretator lazım olmur. Onun üç əsas vədi var: sürət (C və C++ səviyyəsində), yaddaş təhlükəsizliyi (asılı qalmış göstəricilər, yaddaşın iki dəfə azad edilməsi və verilənlər yarışı kompilyasiya zamanı tutulur) və məhsuldarlıq (Cargo aləti, aydın xəta mesajları və güclü tip sistemi).

  1. 2006
    Şəxsi layihə kimi başlanğıc

    Mozilla əməkdaşı Graydon Hoare Rust üzərində öz şəxsi layihəsi kimi işləməyə başlayır.

  2. 2009
    Mozilla-nın dəstəyi

    Mozilla layihəni rəsmi olaraq maliyyələşdirməyə başlayır və onu brauzer texnologiyaları üçün inkişaf etdirir.

  3. 2015
    Rust 1.0

    May ayında ilk stabil versiya çıxır. O vaxtdan bəri hər 6 həftədən bir yeni versiya buraxılır.

  4. 2021
    Rust Foundation

    AWS, Google, Huawei, Microsoft və Mozilla dilin inkişafını dəstəkləyən müstəqil fondu yaradır.

  5. 2022
    Linux nüvəsində

    Linux 6.1 versiyasına Rust dilində drayver yazmaq üçün ilkin dəstək əlavə olunur.

Rust harada istifadə olunur?

  • Əməliyyat sistemləri — Linux nüvəsinin drayverləri, Windows-un bəzi komponentləri və Android-in yeni hissələri.
  • Brauzerlər — Firefox-un bir sıra hissələri, məsələn, CSS üslublarını hesablayan Stylo mühərriki.
  • WebAssembly — Rust kodu WebAssembly-yə kompilyasiya olunur və brauzerdə demək olar ki, maşın kodu sürətilə işləyir.
  • Komanda sətri alətləri — ripgrep, fd, bat kimi sürətli alətlər; VS Code redaktorunda axtarışı məhz ripgrep edir.
  • Serverlər və bulud — AWS-in Firecracker virtual maşınları, Cloudflare və Discord-un yüksək yüklü xidmətləri.

Zibil yığıcı olmadan yaddaş təhlükəsizliyi

Hər proqram işləyərkən yaddaş ayırır və sonra onu geri qaytarmalıdır. C və C++ dillərində bunu proqramçı əl ilə edir, səhv etsə, proqram çökür və ya təhlükəsizlik boşluğu yaranır. Java, Python və Go-da zibil yığıcı (garbage collector) istifadə olunmayan yaddaşı arxa planda təmizləyir, amma bunun üçün əlavə yaddaş və vaxt sərf olunur. Rust üçüncü yolu seçib: sahiblik qaydaları. Kompilyator hər dəyərin kimə məxsus olduğunu izləyir və yaddaşı lazım olan anda özü azad edir.

YanaşmaDillərÜstünlüyüÇatışmazlığı
Əl ilə idarəC, C++maksimal sürət və nəzarətsızmalar, asılı qalmış göstəricilər
Zibil yığıcıJava, C#, Python, Gorahat və təhlükəsizfasilələr, əlavə yaddaş
Sahiblik və borc yoxlayıcısıRusthəm sürət, həm təhlükəsizlikbaşlanğıcda öyrənmək çətindir

rustup ilə quraşdırma

  1. 1
    Quraşdırıcını yüklə

    Windows-da rustup.rs saytından rustup-init.exe faylını yüklə və işə sal. macOS və Linux-da terminalda aşağıdakı curl əmrini icra et.

  2. 2
    Windows-da C++ alətləri

    Windows-da Rust-a Microsoft-un Visual Studio C++ Build Tools paketi lazımdır. Quraşdırıcı onu özü təklif edir — standart seçimləri qəbul et.

  3. 3
    Quraşdırmanı yoxla

    Yeni terminal aç və rustc --version və cargo --version yaz. Hər ikisi versiya nömrəsini göstərməlidir.

  4. 4
    Vaxtaşırı yenilə

    rustup update əmri Rust-ı ən son stabil versiyaya yeniləyir.

Terminal
# macOS / Linux
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# any OS: check the tools
rustc --version
cargo --version
rustup bir dəfəyə kompilyatoru (rustc), Cargo-nu, rustfmt formatlayıcısını, clippy analizatorunu və standart kitabxananın sənədlərini quraşdırır.

Cargo ilə ilk layihə

Cargo Rust-ın rəsmi qurma alətidir və paket meneceridir: layihə yaradır, kodu kompilyasiya edir, proqramı işə salır, testləri icra edir və kitabxanaları yükləyir. Yeni layihəni cargo new əmri yaradır:

Terminal
cargo new hello
cd hello
cargo run
Text
hello/
├── Cargo.toml
├── .gitignore
└── src/
    └── main.rs
Cargo.toml layihənin adını, versiyasını və asılılıqlarını saxlayır, kod isə src/main.rs faylındadır. Cargo həm də git deposu yaradır.
Text
[package]
name = "hello"
version = "0.1.0"
edition = "2024"

[dependencies]
edition dilin buraxılışıdır (2015, 2018, 2021, 2024). Yeni layihələr ən sonuncunu alır; bu kursdakı kod həm 2021, həm də 2024 buraxılışında işləyir.
Rust
fn main() {
    println!("Hello, world!");
}
Gözlənilən nəticə
Hello, world!
  • fn main() — proqramın giriş nöqtəsi; icra məhz buradan başlayır.
  • println! funksiya deyil, makrosdur — Rust-da makroslar adın sonundakı ! işarəsi ilə tanınır.
  • Mətn ikiqat dırnaqlarda yazılır, təlimat isə ; ilə bitir. Girinti üçün 4 boşluq istifadə olunur.
Text
$ cargo run
   Compiling hello v0.1.0 (/home/aysel/hello)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.61s
     Running `target/debug/hello`
Hello, world!
cargo run əvvəlcə kodu kompilyasiya edir (target/debug qovluğuna), sonra proqramı işə salır. Vaxt hər kompüterdə fərqli olacaq.

Dəyişənləri çap etmək

println! mətnindəki {} yer tutucusudur: onun yerinə vergüldən sonra verilən qiymət qoyulur. Dəyişənin adını birbaşa mötərizənin içinə də yazmaq olar: {name}. Dəyişən let açar sözü ilə yaradılır — bu barədə növbəti dərsdə ətraflı danışacağıq.

Rust
fn main() {
    let name = "Aysel";
    let year = 2015;
    println!("Hello, {name}!");
    println!("Rust 1.0 was released in {}.", year);
    println!("{} + {} = {}", 2, 3, 2 + 3);
}
Gözlənilən nəticə
Hello, Aysel!
Rust 1.0 was released in 2015.
2 + 3 = 5
ƏmrNə edir
cargo new nameyeni layihə yaradır
cargo runkompilyasiya edib işə salır
cargo buildtarget/debug qovluğuna qurur
cargo build --releaseoptimallaşdırılmış versiyanı target/release-ə qurur
cargo checkfayl yaratmadan yalnız xətaları yoxlayır — ən sürətlisi
cargo fmtkodu rəsmi üsluba salır
cargo clippykodu analiz edib məsləhətlər verir
Kompilyasiya olunmur
fn main() {
    let name = 'Aysel';
    println("Hello, {name}!");
}
Düzgün
fn main() {
    let name = "Aysel";
    println!("Hello, {name}!");
}
Solda iki xəta var. Tək dırnaqlar yalnız bir simvol (char) üçündür, mətn isə ikiqat dırnaqda yazılır. println sonunda ! olmadan çağırılanda kompilyator E0423 xətasını verir və println! yazmağı məsləhət görür.

Əsas fikirlər

  • Rust sürəti, yaddaş təhlükəsizliyini və məhsuldarlığı birləşdirən kompilyasiya olunan sistem dilidir.
  • Rust-da zibil yığıcı yoxdur: yaddaşı sahiblik qaydaları idarə edir, kompilyator onları yoxlayır.
  • rustup Rust-ı quraşdırır və yeniləyir; Cargo layihə yaradır, qurur, işə salır və kitabxanaları yükləyir.
  • println! makrosdur; {} və ya {name} yer tutucuları qiymətləri mətnə yerləşdirir.
  • Sürət lazım olanda cargo build --release ilə optimallaşdırılmış versiya qur.

Özünü yoxla

10 sual. Hər düzgün cavab XP qazandırır.

1 / 10
Rust-ın inkişafını 2009-cu ildə rəsmi olaraq hansı təşkilat dəstəkləməyə başladı?