به Comprehensive Rust خوش آمدید 🦀
1.
اجرای دوره
❱
1.1.
مباحث دوره
1.2.
میانبرهای صفحه کلید
1.3.
ترجمه
2.
استفاده از cargo
❱
2.1.
اکوسیستم Rust
2.2.
نمونه کد
2.3.
اجرای کد به صورت لوکال با cargo
روز ۱: صبح
3.
خوش آمدید
4.
سلام, دنیا
❱
4.1.
زبان Rust چیست؟
4.2.
مزیتهای زبان Rust
4.3.
Playground
5.
تایپها و مقادیر
❱
5.1.
سلام, دنیا
5.2.
متغیرها
5.3.
مقادیر
5.4.
عملگرهای ریاضی
5.5.
تعیین تایپ ضمنی
5.6.
تمرین: دنباله فیبوناچی
❱
5.6.1.
راهحل
6.
مبانی پایه کنترل جریان
❱
6.1.
عبارات if
6.2.
حلقهها
❱
6.2.1.
for
6.2.2.
loop
6.3.
break و continue
❱
6.3.1.
برچسبها
6.4.
بلوکها و محدودهها
❱
6.4.1.
محدودهها و سایهگذاری
6.5.
توابع
6.6.
ماکروها
6.7.
تمرین: دنباله Collatz
❱
6.7.1.
راهحل
روز ۱: بعد از ظهر
7.
خوش آمدید
8.
تاپل ها و آرایه ها
❱
8.1.
آرایهها
8.2.
تاپلها
8.3.
تکرار ارایه
8.4.
الگوها و ضدِ ساختارها
8.5.
تمرین: آرایههای تو در تو
❱
8.5.1.
راهحل
9.
مراجع
❱
9.1.
مراجع اشتراکی
9.2.
مراجع انحصاری
9.3.
برشها
9.4.
رشتهها
9.5.
تمرین: هندسه
❱
9.5.1.
راهحل
10.
تایپهای تعریف شده توسط کاربر
❱
10.1.
ساختارهای نامدار
10.2.
ساختار تاپلها
10.3.
Enums
10.4.
Const
10.5.
Static
10.6.
نامهای مستعار تایپ
10.7.
تمرین: رویدادهای آسانسور
❱
10.7.1.
راهحل
روز ۲: صبح
11.
خوش آمدید
12.
تطبیق
❱
12.1.
تطابق مقادیر
12.2.
تخریب ساختارها
12.3.
تخریب ساختار Enums
12.4.
کنترل جریان Let
12.5.
تمرین: ارزیابی عبارت
❱
12.5.1.
راهحل
13.
متدها و تریتها
❱
13.1.
متدها
13.2.
Traits
❱
13.2.1.
پیاده سازی Traits
13.2.2.
Supertraits
13.2.3.
تایپهای وابسته
13.3.
Deriving
13.4.
تمرین: توابع Generic
❱
13.4.1.
راهحل
روز دوم: عصر
14.
خوش آمدید
15.
Generics
❱
15.1.
توابع Generic
15.2.
دیتا تایپهای Generic
15.3.
Generic Traits
15.4.
Trait Bounds
15.5.
impl Trait
15.6.
dyn Trait
15.7.
تمرین: Generic min
❱
15.7.1.
راهحل
16.
کتابخانه استاندارد تایپها
❱
16.1.
کتابخانه استاندارد
16.2.
مستندات
16.3.
Option
16.4.
Result
16.5.
String
16.6.
Vec
16.7.
HashMap
16.8.
تمرین: شمارنده
❱
16.8.1.
راهحل
17.
کتابخانه استاندارد Traits
❱
17.1.
مقایسه
17.2.
اپراتورها
17.3.
From and Into
17.4.
Casting
17.5.
Read and Write
17.6.
Default, struct update syntax
17.7.
Closures
17.8.
تمرین: ROT13
❱
17.8.1.
راهحل
روز ۳: صبح
18.
خوش آمدید
19.
مدیریت حافظه
❱
19.1.
بررسی حافظه برنامه
19.2.
رویکردهای مدیریت حافظه
19.3.
مالکیت
19.4.
مفاهیم جابهجایی
19.5.
Clone
19.6.
کپی کردن تایپها
19.7.
Drop
19.8.
تمرین: تایپهای سازنده
❱
19.8.1.
راهحل
20.
اشارهگرهای هوشمند
❱
20.1.
\<Box\<T
20.2.
Rc
20.3.
Owned Trait Objects
20.4.
تمرین: درخت باینری
❱
20.4.1.
راهحل
روز ۳: بعد از ظهر
21.
خوش آمدید
22.
قرضگیری (Borrowing)
❱
22.1.
قرضگیری یک مقدار
22.2.
چک کردن قرض
22.3.
خطاهای قرضگیری
22.4.
تغییرپذیری داخلی
22.5.
تمرین: آمار سلامتی
❱
22.5.1.
راهحل
23.
طولعمر
❱
23.1.
تفسیرهای طول عمر
23.2.
حذف طول عمر
23.3.
طول عمر ساختارها
23.4.
تمرین: تجزیه Protobuf
❱
23.4.1.
راهحل
روز چهارم: صبح
24.
خوش آمدید
25.
Iterators
❱
25.1.
Iterator
25.2.
IntoIterator
25.3.
FromIterator
25.4.
تمرین: روش Iterator Chaining
❱
25.4.1.
راهحل
26.
ماژولها
❱
26.1.
ماژولها
26.2.
سلسله مراتب فایلسیستم
26.3.
قابلیت دید
26.4.
use, super, self
26.5.
تمرین: ماژولهایی برای کتابخانه رابط کاربری گرافیکی
❱
26.5.1.
راهحل
27.
تستکردن
❱
27.1.
تست ماژولها
27.2.
انواع دیگر تستها
27.3.
کامپایلر Lints و Clippy
27.4.
تمرین: الگوریتم Luhn
❱
27.4.1.
راهحل
روز چهارم: بعد از ظهر
28.
خوش آمدید
29.
مدیریت خطا
❱
29.1.
در مورد Panicها
29.2.
Result
29.3.
عملگرد Try
29.4.
این تبدیلها (Conversions) را امتحان کنید
29.5.
Error Trait
29.6.
thiserror و anyhow
29.7.
تمرین: بازنویسی با Result
❱
29.7.1.
راهحل
30.
Rust ناایمن
❱
30.1.
ناایمن
30.2.
عدم ارجاع به اشارهگرهای خام
30.3.
متغیرهای ثابت قابل تغییر
30.4.
نوع داده چندگانه
30.5.
توابع ناامن
30.6.
صفات (Traits) ناامن
30.7.
تمرین: FFI Wrapper
❱
30.7.1.
راهحل
اندروید
31.
خوش آمدید
32.
تنظیم
33.
قوانین ساخت
❱
33.1.
باینری
33.2.
کتابخانه
34.
AIDL
❱
34.1.
آموزش سرویس Birthday
❱
34.1.1.
رابط (Interface)
34.1.2.
Service API
34.1.3.
سرویس
34.1.4.
سرور
34.1.5.
استقرار
34.1.6.
کاربر
34.1.7.
تغییر دادن API
34.1.8.
پیاده سازی
34.2.
AIDL Types
❱
34.2.1.
انواع اولیه
34.2.2.
تایپهای اٰرایهای
34.2.3.
Sending Objects
34.2.4.
بستهبندیها
34.2.5.
ارسال فایلها
35.
تستکردن
❱
35.1.
GoogleTest
35.2.
Mocking
36.
لاگ
37.
قابلیت همکاری
❱
37.1.
با C
❱
37.1.1.
فراخوانی C با Bindgen
37.1.2.
فراخوانی Rust از C
37.2.
با C++
❱
37.2.1.
ماژول پل
37.2.2.
Rust Bridge
37.2.3.
Generated C++
37.2.4.
پل ++C
37.2.5.
انواع مشترک
37.2.6.
Shared Enums
37.2.7.
مدیریت خطا Rust
37.2.8.
مدیریت خطا ++C
37.2.9.
تایپهای اضافی
37.2.10.
روش Build برای اندروید: ++C
37.2.11.
روش Build برای اندروید: ژانرها
37.2.12.
روش Build برای اندروید: Rust
37.3.
با جاوا
38.
تمرینها
Chromium
39.
خوش آمدید
40.
تنظیم
41.
مقایسه Chromium و اکوسیستم Cargo
42.
قواعد
43.
قوانین ساخت
❱
43.1.
Rust ناایمن
43.2.
بسته به Rust Code از ++Chromium C
43.3.
Visual Studio Code
43.4.
تمرینها
44.
تستکردن
❱
44.1.
rust_gtest_interop Library
44.2.
قواعد GN برای تستهای Rust
44.3.
chromium::import! Macro
44.4.
تمرینها
45.
قابلیت همکاری با ++C
❱
45.1.
نمونه اتصالها (Bindingها)
45.2.
محدودیتهای CXX
45.3.
مدیریت خطا CXX
❱
45.3.1.
مدیریت خطا: مثال QR
45.3.2.
مدیریت خطا: مثال PNG
45.4.
استفاده از CXX در Chromium
45.5.
تمرینها
46.
اضافهکردن Crateهای شخص ثالث
❱
46.1.
پیکربندی Cargo.toml
46.2.
تنظیمات gnrt_config.toml
46.3.
دانلود کردن Crateها
46.4.
ایجاد قواعد gn Build
46.5.
حل مشکلات
❱
46.5.1.
ساخت اسکریپتهایی که کد را تولید میکنند
46.5.2.
ساخت اسکریپتهایی که ++C را Build میکند یا اقدامات دلخواه انجام میدهند
46.6.
وابسته به یک Crate
46.7.
بررسیها و ممیزیها
46.8.
کدهای Chromium را بررسی کنید
46.9.
به روز نگه داشتن Crateها
46.10.
تمرینها
47.
دور همی تمرین کنید
48.
راهحلهای تمرین
با Bare Metal: صبح
49.
خوش آمدید
50.
no_std
❱
50.1.
یک مثال ساده
50.2.
alloc
51.
میکروکنترلرها
❱
51.1.
MMIO خام
51.2.
PACs
51.3.
HAL Crates
51.4.
Board Support Crates
51.5.
انواع State Pattern
51.6.
embedded-hal
51.7.
probe-rs, cargo-embed
❱
51.7.1.
اشکال یابی (Debugging)
51.8.
باقی پروژهها
52.
تمرینها
❱
52.1.
قطبنما
52.2.
راه حلها
با Bare Metal: عصر
53.
پردازندههای برنامه
❱
53.1.
آماده شدن برای Rust
53.2.
اسمبلی درونی
53.3.
MMIO
53.4.
بریم یک درایور UART بنویسیم
❱
53.4.1.
صفتهای بیشتر
53.5.
یک درایور بهتر UART
❱
53.5.1.
پرچمهای بیتی (Bitflags)
53.5.2.
رجیسترهای چندگانه
53.5.3.
درایور
53.5.4.
استفاده از آن
53.6.
لاگ
❱
53.6.1.
استفاده از آن
53.7.
استثناها
53.8.
باقی پروژهها
54.
جعبههای (Crates) کاربردی
❱
54.1.
zerocopy
54.2.
aarch64-paging
54.3.
buddy_system_allocator
54.4.
tinyvec
54.5.
spin
55.
اندروید
❱
55.1.
vmbase
56.
تمرینها
❱
56.1.
درایور RTC
56.2.
راه حلها
همزمانی: صبح
57.
خوش آمدید
58.
تردها
❱
58.1.
تردهای ساده
58.2.
محدوده تردها
59.
کانالها
❱
59.1.
Senders و Receivers
59.2.
کانالهای نامحدود
59.3.
کانالهای محدود
60.
Send و Sync
❱
60.1.
ویژگیهای نشانگر
60.2.
Send
60.3.
Sync
60.4.
مثالها
61.
ناحیههای مشترک
❱
61.1.
Arc
61.2.
Mutex
61.3.
مثال
62.
تمرینها
❱
62.1.
فلسفه Dining
62.2.
جستجوگر پیوند چند تِردی
62.3.
راه حلها
همزمانی: عصر
63.
خوش آمدید
64.
مبانی Async
❱
64.1.
async/await
64.2.
Futures
64.3.
Runtimes
❱
64.3.1.
Tokio
64.4.
Task
65.
کانالها و Control Flow
❱
65.1.
کانالهای Async
65.2.
Join
65.3.
Select
66.
Pitfallها
❱
66.1.
مسدود کردن Executor
66.2.
Pin
66.3.
صفات Async
66.4.
لغو
67.
تمرینها
❱
67.1.
فلسفه Dining
67.2.
پخش برنامه چت
67.3.
راه حلها
کلمات آخر
68.
سپاس!
69.
واژهنامه
70.
منابع دیگر
71.
اعتبارها
Light
Rust
Coal
Navy
Ayu
Comprehensive Rust 🦀
English
Brazilian Portuguese (Português do Brasil)
Chinese Simplified (汉语)
Chinese Traditional (漢語)
Japanese (日本語)
Korean (한국어)
Farsi (فارسی)
Spanish (Español)
Ukrainian (українська)
جعبههای (crates) کاربردی
ما به چند crate میپردازیم که برخی از مشکلات رایج در برنامهنویسی bare-metal را حل میکند.