به 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 (українська)
با C++
این
CXX crate
امکان همکاری امن بین Rust و C++ را فراهم میکند.
رویکرد کلی به این صورت است: