Rust Logo

آموزش جامع زبان Rust

یادگیری زبانی که به خاطر سرعت، امنیت و همزمانی معروفه!

Rust چیه و چرا اینقدر خفنه؟

سریع، امن، و مدرن!

Rust یه زبان برنامه‌نویسی سیستمیه که تمرکزش روی سه چیزه: سرعت، امنیت حافظه و همزمانی (Concurrency). فکر کن یه ماشین‌سواری خیلی سریع داری که هیچوقت تصادف نمی‌کنه! Rust بهت اجازه می‌ده کدهایی بنویسی که به اندازه C++ سریع باشن، ولی بدون ترس از خطاهای حافظه مثل null pointer یا data race. این کار رو با یه سیستم منحصر به فرد به اسم مالکیت (Ownership) انجام می‌ده که تو این دوره کامل یادش می‌گیریم.

نقشه راه یادگیری (۱۲ درس)

۱

مقدمات و نصب

با Rust آشنا می‌شیم، نصبش می‌کنیم و اولین برنامه‌مون رو می‌نویسیم.

۲

متغیرها و توابع

یادگیری مفاهیم پایه مثل متغیرها، انواع داده و تعریف توابع.

۳

کنترل جریان

با if/else و انواع حلقه‌ها (loop, while, for) آشنا می‌شیم.

۴

مالکیت (Ownership)

مهم‌ترین و منحصر به فردترین مفهوم Rust رو یاد می‌گیریم.

۵

Structs و Enums

یاد می‌گیریم چطور ساختارهای داده سفارشی خودمون رو بسازیم.

۶

Pattern Matching

قدرت کلمه کلیدی `match` رو برای تصمیم‌گیری‌های پیچیده کشف می‌کنیم.

۷

کالکشن‌ها

کار با لیست‌ها (Vector)، رشته‌ها (String) و دیکشنری‌ها (HashMap).

۸

مدیریت خطا

روش امن و استاندارد Rust برای مدیریت خطاها با `Result` و `Option`.

۹

مفاهیم پیشرفته

آشنایی با Generics, Traits و Lifetimes برای نوشتن کدهای انعطاف‌پذیر.

۱۰

تست‌نویسی

چگونه برای کدهامون تست بنویسیم تا از درستی عملکردشون مطمئن بشیم.

۱۱

Cargo و Crates

آشنایی با مدیر بسته و سیستم ساخت Rust و استفاده از کتابخانه‌های دیگران.

۱۲

پروژه: اپ خط فرمان

با تمام چیزهایی که یاد گرفتیم، یک ابزار خط فرمان کاربردی می‌سازیم.

نمونه‌ای از قدرت Rust: همزمانی امن!

این کد ۱۰ تا "نخ" (thread) موازی ایجاد می‌کنه که همزمان یه شمارنده رو زیاد می‌کنن. در زبان‌های دیگه، این کار می‌تونه باعث خطا بشه، ولی Rust به لطف سیستم مالکیت، در زمان کامپایل جلوی این خطاها رو می‌گیره و تضمین می‌کنه که کد شما امنه!

main.rs
use std::thread;
use std::sync::{Mutex, Arc};

fn main() {
    // Arc: شمارنده هوشمند برای اشتراک‌گذاری بین نخ‌ها
    // Mutex: قفلی برای جلوگیری از دسترسی همزمان و تخریب داده
    let counter = Arc::new(Mutex::new(0));
    let mut handles = vec![];

    for _ in 0..10 {
        let counter = Arc::clone(&counter);
        let handle = thread::spawn(move || {
            let mut num = counter.lock().unwrap();
            *num += 1;
        });
        handles.push(handle);
    }

    // منتظر می‌مونیم تا همه نخ‌ها کارشون تموم بشه
    for handle in handles {
        handle.join().unwrap();
    }

    // نتیجه همیشه و به صورت امن ۱۰ خواهد بود
    println!("Result: {}", *counter.lock().unwrap());
}