راست۱۲ درس رایگان

آموزش زبان راست (Rust) از صفر با تمرین در مرورگر

در این دوره Rust را از اولین برنامه تا مالکیت، قرض‌گیری، trait و هم‌روندی یاد می‌گیرید. هر برنامه را در مرورگر می‌نویسید و همان لحظه ساخته، اجرا و بررسی می‌شود.

  • کامپایلر واقعی Rust، بدون نصب
  • فصل‌های جدا برای مالکیت، قرض‌گیری و طول‌عمر
  • درس‌های اول رایگان است
ببینید چه می‌سازید
درس
۱۵۶
فصل
۲۴
ساعت آموزش
۳۹
پایان دوره
گواهی
نمونه: کارنامهٔ کلاس با iterator
main.rsکارنامهٔ کلاس با iterator
fn main() {
    let scores = [("Sara", 18.5), ("Reza", 12.0), ("Mina", 19.75), ("Ali", 9.5), ("Nima", 15.25)];
 
    // زنجیرهٔ iterator: نه حلقهٔ دستی لازم است و نه متغیر شمارنده
    let passed: Vec<_> = scores.iter().filter(|(_, s)| *s >= 10.0).collect();
    let average = scores.iter().map(|(_, s)| s).sum::<f64>() / scores.len() as f64;
    let best = scores.iter().max_by(|a, b| a.1.total_cmp(&b.1)).unwrap();
 
    for (name, score) in &scores {
        let bar = "#".repeat((*score / 2.0) as usize);
        println!("{:<5} {:>6.2} {}", name, score, bar);
    }
    println!("passed: {} of {}", passed.len(), scores.len());
    println!("average: {:.2}", average);
    println!("best: {} ({})", best.0, best.1);
}
خروجی
Sara   18.50 #########
Reza   12.00 ######
Mina   19.75 #########
Ali     9.50 ####
Nima   15.25 #######
passed: 4 of 5
average: 15.00
best: Mina (19.75)

نمره‌های یک کلاس با زنجیره‌ای از iterator خلاصه می‌شوند: قبول‌شده‌ها، میانگین و بهترین نمره. کنار هر نام نواری به اندازهٔ نمره‌اش چاپ می‌شود. نمونه‌های دیگر

آنچه یاد می‌گیرید

در این دوره چه چیزهایی یاد می‌گیرید

دوره به ترتیب «کتاب Rust» پیش می‌رود و روی بخش‌هایی که Rust را خاص می‌کنند بیشتر می‌ماند.

  1. فصل ۱ و ۲ و ۳

    اولین برنامه‌ها و نوع‌های پایه

    با fn main و println! برنامه می‌نویسید، از ورودی می‌خوانید و با let، mut، shadowing، نوع‌های عددی و سرریز کار می‌کنید.

  2. فصل ۴ و ۵

    کنترل جریان و توابع

    برنامه را با if، loop، while و for هدایت می‌کنید و تابع‌هایی می‌نویسید که آخرین عبارتشان مقدار بازگشتی است.

  3. فصل ۶ و ۷

    مالکیت و قرض‌گیری

    قاعده‌های مالکیت، move و clone را یاد می‌گیرید، با &T و &mut T قرض می‌دهید و پیام‌های borrow checker را می‌خوانید.

  4. فصل ۸ و ۹

    struct، enum و match

    داده را با struct و impl مدل می‌کنید و با enum، match جامع، if let و الگوها هر حالت را پوشش می‌دهید.

  5. فصل ۱۰ و ۱۱

    Option، Result و خطاهای سفارشی

    نبودن مقدار را با Option و خطا را با Result و عملگر ? مدیریت می‌کنید و نوع خطای سفارشی و Box<dyn Error> می‌سازید.

  6. فصل ۱۲ و ۱۳ و ۱۴ و ۱۸

    کالکشن‌ها و رشته‌ها

    با Vec، HashMap، BTreeMap، HashSet، VecDeque و BinaryHeap کار می‌کنید و فرق String و &str و فرق بایت و کاراکتر را می‌فهمید.

  7. فصل ۱۵ و ۱۶

    trait، جنریک و طول‌عمر

    trait تعریف و پیاده می‌کنید، تابع جنریک با کران می‌نویسید، از trait object استفاده می‌کنید و طول‌عمرها را می‌فهمید.

  8. فصل ۱۷

    closure و iterator

    با closure و زنجیره‌ای از map، filter، zip و fold داده را بدون حلقهٔ دستی پردازش می‌کنید.

  9. فصل ۱۹ و ۲۰ و ۲۱

    اشاره‌گر هوشمند، ماکرو و هم‌روندی

    با Box، Rc و RefCell، ماژول‌ها و macro_rules! کار می‌کنید و با thread، کانال mpsc و Arc<Mutex> کار را موازی می‌کنید.

  10. فصل ۲۲ و ۲۳ و ۲۴

    سبک Rust و پروژه‌های پایانی

    کد را به سبک رایج Rust بازنویسی می‌کنید و ابزارهایی مثل رمز سزار، ارزیاب عبارت، پارسر JSON و یک ماشین مجازی پشته‌ای می‌سازید.

نمونه‌کدها

نمونه‌هایی از برنامه‌هایی که می‌نویسید

این پنج برنامه را برای همین صفحه نوشته‌ایم. هر کدام با همان کامپایلر درس‌ها ساخته و اجرا شده و خروجی کنارش همان چیزی است که چاپ می‌کند.

روش کار

یک درس چطور پیش می‌رود

  1. ۱

    صورت تمرین را می‌خوانید

    هر درس یک قاعده را با مثال توضیح می‌دهد و یک برنامهٔ کامل از شما می‌خواهد.

  2. ۲

    کد را می‌سازید و اجرا می‌کنید

    با دکمهٔ اجرا، کد شما با کامپایلر Rust ساخته می‌شود. اگر قاعده‌ای از مالکیت یا نوع‌ها رعایت نشده باشد، پیام کامپایلر را همان‌جا می‌بینید.

  3. ۳

    تست‌ها کارتان را می‌سنجند

    دکمهٔ بررسی، برنامه را با چند ورودی اجرا و خروجی را با جواب درست مقایسه می‌کند. اگر گیر کردید، راهنمای همان تمرین کمکتان می‌کند.

Rust یا C++‎

Rust چه فرقی با C و C++‎ دارد

Rust چه فرقی با C و C++‎ دارد
موضوعRustC و C++‎
مدیریت حافظهمالکیت و borrow checker، در زمان کامپایلدستی، یا با اشاره‌گرهای هوشمند
اشاره‌گر خالیnull ندارد؛ نبودن مقدار با Option بیان می‌شود.استفاده از اشاره‌گر null معمولاً برنامه را در اجرا از کار می‌اندازد.
خطاهاResult و عملگر ?کد بازگشتی یا استثنا
رقابت داده بین threadهاکامپایلر کد ناامن را نمی‌پذیرد.باید خودتان با دقت جلوی آن را بگیرید.
سرعت اجراکامپایل به کد ماشین، بدون جمع‌آوری زبالهکامپایل به کد ماشین، بدون جمع‌آوری زباله
شروع یادگیریقاعده‌های مالکیت در ابتدا وقت می‌گیرد.شروع ساده‌تر است، اما خطاهای حافظه دیرتر پیدا می‌شوند.

این مقایسه دربارهٔ کد امن Rust است، یعنی همهٔ کدی که در این دوره می‌نویسید.

سرفصل‌ها

سرفصل‌های دوره

۲۴ سرفصل، ۱۵۶ درس، ۱۱۰ تمرین

۱

اولین برنامه‌ها: مدلِ کامپایل/اجرا، fn main و چاپ

۶ درس
۲

متغیرها، تغییرپذیری، shadowing و خواندن از ورودی

۷ درس
  • let، let mut، shadowing و constپیش‌نمایش رایگان
  • shadowing در عملپیش‌نمایش رایگانتمرین
  • خواندن از ورودیِ استاندارد در Rustپیش‌نمایش رایگان
  • بازتابِ ورودی (echo)پیش‌نمایش رایگانتمرین
  • خواندنِ دو عدد و جمعِ آن‌هاپیش‌نمایش رایگانتمرین
  • این کد آماده است: N سپس N عددپیش‌نمایش رایگانتمرین
  • بخوان، تبدیل کن، دوبرابر و مربعتمرین
۳

اعداد، تایپ‌های پایه و فرمتِ قطعیِ اعشار

۷ درس
  • تایپ‌های عددی: i32/i64/u32/usize/f64 و تبدیل با as
  • خارج‌قسمت و باقیماندهتمرین
  • فرمتِ صریحِ اعشار: قانونِ {:.2}
  • مساحتِ دایره با فرمتِ ثابتتمرین
  • تبدیلِ صریحِ نوع و تقسیمِ اعشاریتمرین
  • ریشه و توان: متدهای f64تمرین
  • سرریزِ صحیح: checked، wrapping و saturatingتمرین
۴

کنترلِ جریان: if، loop، while و for

۷ درس
  • همه‌چیز یک عبارت است: if، loop، while، for
  • این کد آماده است: ردگیریِ یک حلقهتمرین
  • نمره به حرف با if/elseتمرین
  • FizzBuzzتمرین
  • loop با break مقدار-برگردانتمرین
  • break با برچسب در حلقه‌های تودرتوتمرین
  • جمع‌بندیِ کنترلِ جریان
۵

توابع و سبکِ عبارت‌محور

۶ درس
  • توابع، پارامترها و بازگشتِ عبارتی
  • بیشینه‌ی دو عددتمرین
  • کمینه و بیشینه با تاپلتمرین
  • این کد آماده است: تست از داخلِ mainتمرین
  • تقسیمِ امن با علامتِ خطاتمرین
  • توابعِ تابع‌گرفته و ترکیبتمرین
۶

★ مالکیت، انتقال و کلون (قلبِ Rust — بخشِ یک)

۷ درس
  • سه قاعده‌ی مالکیت، پشته/heap و Drop
  • انتقال (move) در برابر کپی (Copy)
  • انتقالِ String به یک تابعتمرین
  • clone در برابر move: استقلالِ کپی را اثبات کنتمرین
  • بازگرداندنِ مالکیت از تابعتمرین
  • این کد آماده است: انتقال در عملتمرین
  • مالکیتِ Vec هنگامِ انتقال به تابعتمرین
۷

★ قرض‌گیری، مرجع‌ها و borrow checker (قلبِ Rust — بخشِ دو)

۷ درس
  • مرجع‌ها و قرض‌گیری: &T و &mut T
  • تغییر در محل با &mut Tتمرین
  • افزودن به Vec از طریقِ &mutتمرین
  • خواندنِ خطاهای borrow checker و شهودِ NLL
  • محاسبه‌ی مجموع بدونِ گرفتنِ مالکیتتمرین
  • اِسلایس‌ها: نمای قرض‌گرفته به دادهتمرین
  • این کد آماده است: اشتراکی در برابر انحصاریتمرین
۸

استراکت‌ها و متدها (impl)

۶ درس
  • استراکت‌ها: تعریف، نمونه‌سازی و derive(Debug)
  • استراکتِ Point و فاصلهتمرین
  • متدها و توابعِ مرتبط: impl و self
  • مستطیل با متدهای مساحت و محیطتمرین
  • سازنده و اعتبارسنجیِ داخلیتمرین
  • حسابِ ساده با &mut selfتمرین
۹

enumها، الگوگذاری و matchِ جامع

۶ درس
  • enumها و matchِ جامع
  • نامِ روزِ هفته با matchتمرین
  • ماشین‌حسابِ تک‌عملگری با enumتمرین
  • الگوگذاریِ ژرف: تاپل، بازه، گارد، | و بایندِ @
  • نمره به حرف با الگوی بازه‌ایتمرین
  • if let و while let در عملتمرین
۱۰

★ Option و Result و اپراتورِ ? (مدیریتِ خطا — بخشِ یک)

۷ درس
  • Option: جایگزینِ امنِ null
  • دسترسیِ امن به عنصرِ Vecتمرین
  • بیشینه‌ی لیست با Optionتمرین
  • Result و اپراتورِ ?
  • پارسِ اعداد با ? و گزارشِ خطاتمرین
  • ترکیب‌گرهای Result: map، and_then، unwrap_orتمرین
  • این کد آماده است: ? در یک تابعِ کمکیتمرین
۱۱

خطاهای سفارشی و `Box<dyn Error>` (مدیریتِ خطا — بخشِ دو)

۶ درس
  • panic در برابر Result؛ unwrap و expect
  • تقسیم با خطای متنیتمرین
  • نوعِ خطای سفارشی با enum و پیاده‌سازیِ Display و Error
  • اعتبارسنج با نوعِ خطای سفارشیتمرین
  • یک‌کاسه‌کردنِ خطاها با Box<dyn Error>تمرین
  • زنجیره‌ی پردازش با انتشارِ خطاتمرین
۱۲

کالکشن‌ها: Vec و قطعیّتِ خروجی

۶ درس
  • Vec: ساخت، رشد، اندیس و get
  • مجموع و میانگینِ یک Vecتمرین
  • سورتِ صعودی و چاپِ فاصله‌جداتمرین
  • وارونه‌سازی و حذفِ تکراریتمرین
  • حذفِ عنصر و جابه‌جاییتمرین
  • ماتریسِ دوبعدی با Vec<Vec>تمرین
۱۳

HashMap در برابر BTreeMap و قانونِ طلاییِ قطعیّت

۶ درس
  • قانونِ طلایی: ترتیبِ HashMap تصادفی است
  • این کد آماده است: چاپِ مرتبِ یک mapتمرین
  • شمارشِ بسامدِ کلمه‌هاتمرین
  • entry API: شمارش و انباشتتمرین
  • HashSet/BTreeSet به‌عنوان مجموعهتمرین
  • چک‌لیستِ قطعیّت (نسخه‌ی کامل)
۱۴

رشته‌ها: String در برابر str&، chars و bytes

۷ درس
  • String در برابر str&، chars و bytes
  • شمارشِ بایت در برابر کاراکترتمرین
  • وارونه‌سازی بر اساسِ کاراکترتمرین
  • شمارشِ مصوت‌هاتمرین
  • پارسِ خطِ CSV و انتخابِ فیلدتمرین
  • ساختِ رشته با push_str و فرمتتمرین
  • parse و تبدیلِ عدد به رشته و برعکستمرین
۱۵

★ تِرِیت‌ها، trait objectها و جنریک‌ها (قلبِ Rust — بخشِ سه)

۷ درس
  • تِرِیت‌ها: تعریف، پیاده‌سازی و متدِ پیش‌فرض
  • تِرِیتِ Shape و پیاده‌سازی برای دایره و مستطیلتمرین
  • جنریک‌ها و کرانِ تِرِیت
  • بیشینه‌ی جنریک با کرانِ PartialOrdتمرین
  • trait objectها و ارسالِ پویا
  • مجموعه‌ی ناهمگنِ شکل‌ها با Box<dyn Shape>تمرین
  • بازنویسیِ اپراتور با تِرِیتِ Add و Displayتمرین
۱۶

★ طول‌عمرها (lifetimes)

۶ درس
  • چرا طول‌عمر؟ نحوِ <'a> و جلوگیری از dangling
  • بلندتر از دو خط (longest)تمرین
  • طول‌عمر در استراکت‌ها و متدها، و 'static
  • استراکتِ نگه‌دارنده‌ی برشتمرین
  • سه قاعده‌ی حذفِ طول‌عمر (elision)
  • این کد آماده است: طول‌عمر در عملتمرین
۱۷

closureها، iteratorها و سبکِ تابعی

۷ درس
  • closureها: Fn، FnMut، FnOnce و move
  • اعمالِ یک closure روی هر عنصرتمرین
  • iteratorها: next، آداپتورها و collect
  • مجموعِ مربعِ اعدادِ زوجتمرین
  • شماره‌گذاری با enumerateتمرین
  • خطِ پردازش با zip و foldتمرین
  • این کد آماده است: حلقه در برابر iteratorتمرین
۱۸

کالکشن‌های بیشتر: BTreeMap، VecDeque و کاربردها

۶ درس
  • انتخابِ کالکشنِ درست و VecDeque
  • شبیه‌سازیِ صف با VecDequeتمرین
  • پشته و تطبیقِ پرانتزهاتمرین
  • گروه‌بندی با BTreeMapتمرین
  • BTreeMapِ تودرتو برای کانفیگتمرین
  • BinaryHeap برای k عددِ بزرگتمرین
۱۹

اشاره‌گرهای هوشمند: Box، Rc و RefCell

۶ درس
  • Box: heap و نوع‌های بازگشتی
  • لیستِ پیوندی (cons list) با Boxتمرین
  • Rc: مالکیتِ اشتراکیِ تک‌رشته‌ای
  • شمارشِ مرجع با strong_countتمرین
  • RefCell و تغییرپذیریِ درونی
  • شمارنده‌ی اشتراکی با Rc<RefCell>تمرین
۲۰

ماژول‌ها، use و ماکروهای !macro_rules

۶ درس
  • ماژول‌ها در یک فایل: mod، pub، use و مسیرها
  • ماژولِ stats با توابعِ عمومیتمرین
  • دو ماژولِ همکار با useتمرین
  • ماکروهای اعلانی: !macro_rules
  • ماکروی !max برای چند آرگومانتمرین
  • ماکروی سازنده‌ی Vec سفارشیتمرین
۲۱

هم‌روندیِ قطعی: thread، mpsc و Arc<Mutex>

۶ درس
  • هم‌روندیِ قطعی: چرا هرگز از داخلِ thread چاپ نمی‌کنیم
  • این کد آماده است: fan-out قطعیتمرین
  • مربعِ موازی با خروجیِ مرتبتمرین
  • جمعِ موازی با کانالِ mpsc و sortتمرین
  • اشتباهاتِ رایجِ هم‌روندی (race) و چرا داور آن‌ها را رد می‌کند
  • شمارنده‌ی اشتراکی با Arc<Mutex>تمرین
۲۲

تست، idiomها و سازماندهیِ کد

۶ درس
  • آزمون‌نویسی در Rust: ‎#[test]‎ و چرا اینجا main را اجرا می‌کنیم
  • تست از داخلِ main با PASS/FAILتمرین
  • Rust اصیل (idiomatic): match، if let، ? و iterator
  • بازنویسیِ idiomatic با iteratorتمرین
  • این کد آماده است: مقایسه‌ی idiomatic و غیرidiomaticتمرین
  • بازآرایی با بازگشتِ زودهنگام و ?تمرین
۲۳

پروژه‌های واقعی I: ابزارهای متن و داده

۷ درس
  • معرفیِ پروژه‌ها: از مفهوم تا ابزارِ واقعی
  • کدگذاری و رمزگشاییِ RLEتمرین
  • رمزِ سزار و ROT13تمرین
  • اعدادِ رومی (دوطرفه)تمرین
  • شمارشِ بسامد با رتبه‌بندیتمرین
  • خلاصه‌سازِ CSV با دستتمرین
  • خلاصه‌سازِ خطوطِ لاگتمرین
۲۴

پروژه‌های واقعی II: پارسرها، مفسرها و ماشین‌های حالت

۸ درس
  • معرفیِ پروژه‌های پایانی: lexer، parser و evaluator
  • ماشین‌حسابِ RPNتمرین
  • ارزیابِ عبارتِ میان‌وندی (shunting-yard)تمرین
  • درختِ عبارتِ typed با Boxتمرین
  • ماشینِ حالتِ متناهیتمرین
  • پارسر و اعتبارسنجِ JSON با دستتمرین
  • ماشینِ مجازیِ پشته‌ای (مفسرِ بایت‌کد)تمرین
  • جمع‌بندیِ دوره و گام‌های بعدی
شروع دوره

از همین امروز شروع کنید

درس‌های اول رایگان است و برای شروع پرداختی لازم نیست. هر وقت خواستید ادامه دهید، همین دوره را بخرید یا با اشتراک پرو همهٔ دوره‌ها را باز کنید.

این دوره شامل:
  • ۱۵۶ درس تعاملی
  • ۱۱۰ تمرین عملی
  • ۳۹ ساعت محتوای آموزشی
  • اجرای کد در مرورگر، بدون نصب
  • گواهی پایان دوره
  • دسترسی مادام‌العمر

نمونه‌ها را دوباره ببینید

رایگانبرای شروع

۱۲ درس ابتدایی رایگان است. برای ادامه، اشتراک بگیرید یا دوره را بخرید.

بدون نیاز به پرداخت مبلغی برای شروع

برای چه کسی

این دوره برای چه کسی است

  • برنامه‌نویس C یا C++‎

    اگر سرعت همین زبان‌ها را با بررسی حافظه در زمان کامپایل می‌خواهید.

  • برنامه‌نویس پایتون، جاوااسکریپت یا Go

    اگر می‌خواهید بدانید حافظه واقعاً چطور مدیریت می‌شود و برنامه‌های سریع‌تری بنویسید.

  • دانشجوی کامپیوتر

    اگر به برنامه‌نویسی سیستمی، کامپایلر یا سیستم‌عامل علاقه دارید.

پیش‌نیاز: یک رایانه و یک مرورگر.

بعد از این دوره

پرسش‌ها

پرسش‌های پرتکرار

زبان Rust برای چه کاری مناسب است؟
Rust برای برنامه‌هایی مناسب است که هم سرعت می‌خواهند و هم ایمنی حافظه، مثل ابزارهای خط فرمان، سرویس‌های سمت سرور، برنامه‌های سیستمی و WebAssembly.
یادگیری Rust سخت است؟
مالکیت و borrow checker برای بیشتر افراد تازه است و در ابتدا وقت می‌گیرد. دوره این قاعده‌ها را آهسته پیش می‌برد و هر کدام را با چند تمرین کوچک جا می‌اندازد.
برای شروع باید زبان دیگری بلد باشم؟
نه. دوره از اولین برنامه شروع می‌شود و به دانش قبلی نیاز ندارد. آشنایی با یک زبان دیگر کار را آسان‌تر می‌کند.
باید Rust و Cargo را نصب کنم؟
نه. کد در مرورگر نوشته و با Rust 1.68 ساخته و اجرا می‌شود. هر وقت خواستید روی رایانهٔ خودتان کار کنید، همین برنامه‌ها با Cargo هم اجرا می‌شوند.
کتابخانه‌هایی مثل serde و tokio هم آموزش داده می‌شود؟
نه. دوره فقط با کتابخانهٔ استاندارد کار می‌کند، مثلاً JSON و CSV را خودتان پارس می‌کنید. با این پایه، هر crate را بعداً راحت‌تر یاد می‌گیرید.
چند درس این دوره رایگان است؟
درس‌های ابتدایی دوره رایگان است و برای شروع پرداختی لازم نیست. تعداد دقیق آن‌ها کنار دکمهٔ شروع نوشته شده است.
در پایان دوره گواهی می‌گیرم؟
بله. وقتی همهٔ درس‌ها را تمام کنید، گواهی پایان دوره با یک شمارهٔ استعلام صادر می‌شود که هر کسی می‌تواند درستی آن را در سایت بررسی کند.

همین امروز شروع کنید

اولین برنامهٔ Rust خود را همین امروز در مرورگر بسازید. شروع رایگان است و در کمتر از دو دقیقه وارد محیط یادگیری می‌شوید.

آموزش Rust (راست) از صفر تا برنامه‌نویس — دینا کد