به Comprehensive Rust خوش آمدید 🦀
1.
اجرای دوره
❱
1.1.
مباحث دوره
1.2.
میانبرهای صفحه کلید
1.3.
ترجمه
2.
استفاده از cargo
❱
2.1.
اکوسیستم Rsut
2.2.
نمونه کد
2.3.
اجرای cargo روی ماشین local
روز اول: صبح
3.
خوش آمدید
4.
سلام دنیا
❱
4.1.
زبان Rust چیست؟
4.2.
Benefits of Rust
4.3.
Playground
5.
Types and Values
❱
5.1.
سلام دنیا
5.2.
متغیرها
5.3.
Values
5.4.
Arithmetic
5.5.
تعیین تایپ ضمنی
5.6.
تمرین: عبارت را بسنجید
❱
5.6.1.
راه حلها
6.
کنترل جریان
❱
6.1.
عبارات if
6.2.
Loops
❱
6.2.1.
حلقههای for
6.2.2.
loop
6.3.
break و continue
❱
6.3.1.
Labels
6.4.
Blocks and Scopes
❱
6.4.1.
محدودهها و سایهگذاری
6.5.
توابع
6.6.
Macros
6.7.
Exercise: Collatz Sequence
❱
6.7.1.
راه حلها
روز ۱: بعد از ظهر
7.
خوش آمدید
8.
Tuples and Arrays
❱
8.1.
آرایهها
8.2.
تاپلها
8.3.
تکرار کننده
8.4.
تخریب Enumها
8.5.
Exercise: Nested Arrays
❱
8.5.1.
راه حلها
9.
مراجع
❱
9.1.
مراجع
9.2.
ارجاعات تعلیق شده
9.3.
Slices: &\[T\]
9.4.
رشتهها
9.5.
Exercise: Geometry
❱
9.5.1.
راه حلها
10.
User-Defined Types
❱
10.1.
ساختارها
10.2.
ساختارهای چندگانه (Tuple Structs)
10.3.
Enums
10.4.
Static
10.5.
Const
10.6.
Type Aliases
10.7.
تمرین: عبارت را بسنجید
❱
10.7.1.
راه حلها
روز دوم: صبح
11.
خوش آمدید
12.
تطبیق الگو
❱
12.1.
Matching Values
12.2.
تخریب ساختارها
12.3.
تخریب Enumها
12.4.
کنترل جریان
12.5.
تمرین: عبارت را بسنجید
❱
12.5.1.
راه حلها
13.
Read and Write
❱
13.1.
متدها
13.2.
صفتها
❱
13.2.1.
پیاده سازی صفات (Traits) ناامن
13.2.2.
Supertraits
13.2.3.
تایپهای عددی
13.3.
صفات استنتاجی (Deriving Traits)
13.4.
Exercise: Generic Logger
❱
13.4.1.
راه حلها
روز دوم: عصر
14.
خوش آمدید
15.
جنریکها
❱
15.1.
توابع خارجی (Extern Functions)
15.2.
انواع دادهها جنریک (Generic Data Types)
15.3.
جنریکها
15.4.
صفات مرزی (Trait Bounds)
15.5.
impl Trait
15.6.
صفات Async
15.7.
Exercise: 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.
کتابخانههای استاندارد
❱
17.1.
Comparisons
17.2.
تکرار کننده
17.3.
From and Into
17.4.
تستکردن
17.5.
Read and Write
17.6.
Default, struct update syntax
17.7.
Closures
17.8.
تمرینها
❱
17.8.1.
راه حلها
روز سوم: صبح
18.
خوش آمدید
19.
مدیریت حافظه
❱
19.1.
Review of Program Memory
19.2.
مدیریت حافظه خودکار
19.3.
مالکیت
19.4.
مفاهیم جابهجایی
19.5.
Clone
19.6.
تایپهای مرکب
19.7.
رها کردن
19.8.
Exercise: Builder Type
❱
19.8.1.
راه حلها
20.
Smart Pointers
❱
20.1.
Box<T>
20.2.
Rc
20.3.
آبجکتهای موصوفی (Trait Objects)
20.4.
Exercise: Binary Tree
❱
20.4.1.
راه حلها
روز سوم: عصر
21.
خوش آمدید
22.
قرض گرفتن
❱
22.1.
قرض گرفتن
22.2.
قرض گرفتن
22.3.
Borrow Errors
22.4.
قابلیت همکاری
22.5.
آمارهای سلامتی
❱
22.5.1.
راه حلها
23.
چرخه حیات
❱
23.1.
طول عمر در فراخوانی توابع
23.2.
چرخه حیات
23.3.
چرخه حیات
23.4.
Exercise: Protobuf Parsing
❱
23.4.1.
راه حلها
روز اول: صبح
24.
خوش آمدید
25.
Iterators
❱
25.1.
Iterator
25.2.
IntoIterator
25.3.
FromIterator
25.4.
Exercise: Iterator Method Chaining
❱
25.4.1.
راه حلها
26.
ماژولها
❱
26.1.
ماژولها
26.2.
سلسله مراتب فایلسیستم
26.3.
قابلیت دید
26.4.
use, super, self
26.5.
Exercise: Modules for a GUI Library
❱
26.5.1.
راه حلها
27.
تستکردن
❱
27.1.
تست ماژولها
27.2.
منابع دیگر
27.3.
Compiler Lints and Clippy
27.4.
الگوریتم Luhn
❱
27.4.1.
راه حلها
روز ۱: بعد از ظهر
28.
خوش آمدید
29.
مدیریت خطا (Error Handling)
❱
29.1.
پانیکها
29.2.
تکرار کننده
29.3.
تبدیلهای غیر صریح
29.4.
صفتهای بیشتر
29.5.
thiserror and anyhow
29.6.
Exercise: Rewriting with Result
❱
29.6.1.
راه حلها
30.
Rust ناایمن
❱
30.1.
Rust ناایمن
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 Service Tutorial
❱
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.
انواع
❱
34.2.1.
Primitive Types
34.2.2.
آرایهها
34.2.3.
آبجکتهای موصوفی (Trait Objects)
34.2.4.
متغیرها
34.2.5.
Sending Files
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 در اندروید
37.2.3.
Generated C++
37.2.4.
C++ Bridge
37.2.5.
تایپهای عددی
37.2.6.
Shared Enums
37.2.7.
مدیریت خطا (Error Handling)
37.2.8.
مدیریت خطا (Error Handling)
37.2.9.
Additional Types
37.2.10.
Building for Android: C++
37.2.11.
Building for Android: Genrules
37.2.12.
Building for Android: Rust
37.3.
با جاوا
38.
تمرینها
Chromium
39.
خوش آمدید
40.
تنظیم
41.
Comparing Chromium and Cargo Ecosystems
42.
Policy
43.
قوانین ساخت
❱
43.1.
Rust ناایمن
43.2.
Depending on Rust Code from Chromium C++
43.3.
Visual Studio Code
43.4.
تمرینها
44.
تستکردن
❱
44.1.
rust_gtest_interop Library
44.2.
GN Rules for Rust Tests
44.3.
chromium::import! Macro
44.4.
تمرینها
45.
قابلیت همکاری
❱
45.1.
مثالها
45.2.
Limitations of CXX
45.3.
مدیریت خطا (Error Handling)
❱
45.3.1.
مدیریت خطا (Error Handling)
45.3.2.
مدیریت خطا (Error Handling)
45.4.
Using CXX in Chromium
45.5.
تمرینها
46.
Adding Third Party Crates
❱
46.1.
Configuring Cargo.toml
46.2.
Configuring gnrt_config.toml
46.3.
Downloading Crates
46.4.
Generating gn Build Rules
46.5.
Resolving Problems
❱
46.5.1.
Build Scripts Which Generate Code
46.5.2.
Build Scripts Which Build C++ or Take Arbitrary Actions
46.6.
Depending on a Crate
46.7.
Reviews and Audits
46.8.
Checking into Chromium Source Code
46.9.
Keeping Crates Up to Date
46.10.
تمرینها
47.
Bringing It Together - Exercise
48.
راه حلها
با Bare Metal: صبح
49.
خوش آمدید
50.
no_std
❱
50.1.
یک مثال ساده
50.2.
alloc
51.
میکروکنترلرها
❱
51.1.
Raw 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.
متد دریافتی
59.2.
کانالهای نامحدود
59.3.
کانالهای محدود
60.
Send and 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.
کنترل جریان پیشرفته
❱
65.1.
کانالهای Async
65.2.
Join
65.3.
Select
66.
مشکلها
❱
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 (漢語)
Korean (한국어)
Spanish (Español)
جعبههای (crates) کاربردی
We’ll go over a few crates which solve some common problems in bare-metal programming.