مرحبًا بكم في Comprehensive Rust 🦀
1.
تشغيل الدورة
❱
1.1.
هيكل الدورة
1.2.
(keyboard shortcuts) اختصارات لوحة المفاتيح
1.3.
الترجمات
2.
استخدام Cargo
❱
2.1.
النظام البيئي ل Rust
2.2.
(Code Samples) عينات الكود
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.
حلقة
6.3.
كسر واستمرار
❱
6.3.1.
تسميات
6.4.
الكتل والنطاقات
❱
6.4.1.
النطاقات والتظليل
6.5.
الدوال
6.6.
الماكروهات
6.7.
تمرين: تسلسل كولاتز
❱
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.
Slices: &\[T\]
9.4.
السلاسل النصية
9.5.
تمرين: هندسة الأشكال
❱
9.5.1.
الحل
10.
أنواع معرفة من قبل المستخدم
❱
10.1.
هياكل مسماة
10.2.
هيكل الصفوف
10.3.
التعدادات
10.4.
ثابت الذاكرة (Static)
10.5.
الثوابت (Const)
10.6.
أسماء مستعارة للنوع
10.7.
تمرين: أحداث المصعد
❱
10.7.1.
الحل
اليوم الثاني: صباحا
11.
مرحبًا
12.
مطابقة الأنماط
❱
12.1.
مطابقة القيم
12.2.
تفكيك الهياكل
12.3.
تفكيك التعدادات
12.4.
دع التحكم في التدفق
12.5.
تمرين: فيبوناتشي
❱
12.5.1.
الحل
13.
Methods and Traits
❱
13.1.
الدوال
13.2.
سمات
❱
13.2.1.
تنفيذ السمات
13.2.2.
السمات الفائقة
13.2.3.
الأنواع المرتبطة
13.3.
اشتقاق
13.4.
تمرين: مسجل عام
❱
13.4.1.
الحل
اليوم الثاني: بعد الظهر
14.
مرحبًا
15.
التعميم
❱
15.1.
الدوال المعممة
15.2.
أنواع البيانات المعممة
15.3.
السمات المعممة
15.4.
حدود السمات
15.5.
تطوير السمات impl Trait
15.6.
تطوير السمات المتغيرة dyn Trait
15.7.
تمرين: فيبوناتشي
❱
15.7.1.
الحل
16.
أنواع المكتبة القياسية
❱
16.1.
المكتبة القياسية
16.2.
المستندات التوثيقية (Documentation)
16.3.
الخيار (Option)
16.4.
النتيجة (Result)
16.5.
السلاسل النصية (String)
16.6.
المصفوفات (Vec)
16.7.
خريطة المشفرة (HashMap)
16.8.
تمرين: عداد
❱
16.8.1.
الحل
17.
سمات المكتبة القياسية
❱
17.1.
مقارنات
17.2.
المشغلات (Operators)
17.3.
السمات (من و إلى) (From and Into)
17.4.
التحويل
17.5.
السمات (القراءة و الكتابة) (Read and Write)
17.6.
الإفتراضي، بناء جملة تحديث البنية (Default, struct update syntax)
17.7.
الإغلاقات
17.8.
تمرين: ROT13
❱
17.8.1.
الحل
اليوم الثالث: صباحا
18.
مرحبًا
19.
إدارة الذاكرة
❱
19.1.
مراجعة ذاكرة البرنامج
19.2.
طرق إدارة الذاكرة
19.3.
الملكية
19.4.
دلالات النقل
19.5.
الاستنساخ
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.
فحص الاستعارة (Borrow Checking)
22.3.
أخطاء الاستعارة (Borrow Errors)
22.4.
القابلية للتغيير الداخلي (Interior Mutability)
22.5.
(Health Statistics) تمرين: إحصاءات الصحة
❱
22.5.1.
الحل
23.
فترات الحياة (Lifetimes)
❱
23.1.
تعليقات فترة الحياة (Lifetime Annotations)
23.2.
حذف فترة الحياة (Lifetime Elision)
23.3.
فترات حياة الهيكل (Struct Lifetimes)
23.4.
تمرين: تحليل Protobuf (Protobuf Parsing)
❱
23.4.1.
الحل
اليوم الأول: صباحا
24.
مرحبًا
25.
المكررات (Iterators)
❱
25.1.
Iterator (المكرر)
25.2.
IntoIterator (إلى مكرر)
25.3.
FromIterator (من مكرر)
25.4.
تمرين: تسلسل طرق المكرر (Iterator Method Chaining)
❱
25.4.1.
الحل
26.
الوحدات (Modules)
❱
26.1.
الوحدات (Modules)
26.2.
التسلسل الهرمي لنظام الملفات (Filesystem Hierarchy)
26.3.
الرؤية (Visibility)
26.4.
use, super, self
26.5.
تمرين: الوحدات لمكتبة واجهة المستخدم الرسومية (Modules for a GUI Library)
❱
26.5.1.
الحل
27.
الاختبار (Testing)
❱
27.1.
وحدات الاختبار (Test Modules)
27.2.
أنواع أخرى من الاختبارات (Other Types of Tests)
27.3.
التحذيرات البرمجية (Compiler Lints) و Clippy
27.4.
تمرين: خوارزمية لون (Luhn Algorithm)
❱
27.4.1.
الحل
اليوم الأول: صباحا
28.
مرحبًا
29.
معالجة الأخطاء (Error Handling)
❱
29.1.
Panics
29.2.
النتيجة (Result)
29.3.
مشغل المحاولة (Try Operator)
29.4.
محاولات التحويل (Try Conversions)
29.5.
سمة Error (Error Trait)
29.6.
thiserror و anyhow
29.7.
تمرين: إعادة الكتابة باستخدام Result
❱
29.7.1.
الحل
30.
Rust غير الآمنة (Unsafe Rust)
❱
30.1.
غير آمن (Unsafe)
30.2.
إلغاء مرجعية المؤشرات الخام (Dereferencing Raw Pointers)
30.3.
المتغيرات الثابتة القابلة للتغيير (Mutable Static Variables)
30.4.
الاتحادات (Unions)
30.5.
الدوال غير الآمنة (Unsafe Functions)
30.6.
السمات غير الآمنة (Unsafe Traits)
30.7.
تمرين: فيبوناتشي
❱
30.7.1.
الحل
أندرويد (Android)
31.
مرحبًا
32.
الإعداد (Setup)
33.
قواعد البناء (Build Rules)
❱
33.1.
ثنائي (Binary)
33.2.
مكتبة (Library)
34.
AIDL
❱
34.1.
دليل خدمة عيد الميلاد (Birthday Service Tutorial)
❱
34.1.1.
الواجهة (Interface)
34.1.2.
واجهة برمجة التطبيقات للخدمة (Service API)
34.1.3.
الخدمة (Service)
34.1.4.
الخادم (Server)
34.1.5.
النشر (Deploy)
34.1.6.
العميل (Client)
34.1.7.
تغيير واجهة برمجة التطبيقات (Changing API)
34.1.8.
تحديث التنفيذات (Updating Implementations)
34.2.
أنواع AIDL (AIDL Types)
❱
34.2.1.
الأنواع الأولية (Primitive Types)
34.2.2.
أنواع المصفوفات (Array Types)
34.2.3.
إرسال الكائنات (Sending Objects)
34.2.4.
المتغيرات
34.2.5.
إرسال الملفات (Sending Files)
35.
الاختبار (Testing)
❱
35.1.
GoogleTest
35.2.
المحاكاة (Mocking)
36.
التسجيل (Logging)
37.
قابلية التشغيل البيني (Interoperability)
❱
37.1.
مع C (With C)
❱
37.1.1.
استدعاء C باستخدام Bindgen (Calling C with Bindgen)
37.1.2.
استدعاء Rust من C (Calling Rust from C)
37.2.
مع C++ (With C++)
❱
37.2.1.
وحدة الجسر (The Bridge Module)
37.2.2.
جسر Rust (Rust Bridge)
37.2.3.
C++ المُولَّد (Generated C++)
37.2.4.
جسر C++ (C++ Bridge)
37.2.5.
الأنواع المشتركة (Shared Types)
37.2.6.
التعدادات المشتركة (Shared Enums)
37.2.7.
معالجة الأخطاء في Rust (Rust Error Handling)
37.2.8.
معالجة الأخطاء في C++ (C++ Error Handling)
37.2.9.
الأنواع الإضافية (Additional Types)
37.2.10.
البناء لأندرويد: C++ (Building for Android: C++)
37.2.11.
البناء لأندرويد: قواعد التوليد (Building for Android: Genrules)
37.2.12.
البناء لأندرويد: Rust (Building for Android: Rust)
37.3.
مع Java (With Java)
38.
التمارين
كروميوم (Chromium)
39.
مرحبًا
40.
الإعداد (Setup)
41.
مقارنة بين بيئات Chromium و Cargo (Comparing Chromium and Cargo Ecosystems)
42.
سياسة الاستخدام (Policy)
43.
قواعد البناء (Build Rules)
❱
43.1.
الكود غير الآمن (Unsafe Code)
43.2.
الاعتماد على كود Rust من Chromium C++ (Depending on Rust Code from Chromium C++)
43.3.
فيجوال ستوديو كود (Visual Studio Code)
43.4.
تمرين (Exercise)
44.
الاختبار (Testing)
❱
44.1.
مكتبة rust_gtest_interop
44.2.
قواعد GN لاختبارات Rust (GN Rules for Rust Tests)
44.3.
ماكرو Macro chromium::import!
44.4.
تمرين (Exercise)
45.
التشغيل البيني مع C++ (Interoperability with C++)
❱
45.1.
أمثلة على الربط (Example Bindings)
45.2.
قيود CXX
45.3.
معالجة الأخطاء في CXX (CXX Error Handling)
❱
45.3.1.
معالجة الأخطاء (Error Handling): مثال QR
45.3.2.
معالجة الأخطاء: مثال PNG
45.4.
استخدام CXX في Chromium
45.5.
تمرين (Exercise)
46.
إضافة كريت الطرف الثالث (third party Crates)
❱
46.1.
تهيئة Cargo.toml
46.2.
تهيئة gnrt_config.toml
46.3.
تنزيل الحزم (Crates)
46.4.
توليد قواعد البناء Generating gn Build Rules
46.5.
حل المشاكل
❱
46.5.1.
برامج البناء التي تولد الكود (Build Scripts Which Generate Code)
46.5.2.
برامج البناء التي تبني C++ أو تتخذ إجراءات عشوائية (Build Scripts Which Build C++ or Take Arbitrary Actions)
46.6.
الاعتماد على كريت (Depending on a Crate)
46.7.
المراجعات والتدقيقات (Reviews and Audits)
46.8.
التحقق من مصدر الكود Chromium (Checking into Chromium Source Code)
46.9.
الحفاظ على الكريتات محدثة (Keeping Crates Up to Date)
46.10.
تمرين (Exercise)
47.
جمعها معًا - تمرين (Bringing It Together - Exercise)
48.
تمرين: فيبوناتشي
اليوم الأول: صباحا
49.
مرحبًا
50.
no_std
❱
50.1.
مثال بسيط
50.2.
alloc
51.
المتحكمات الدقيقة (Microcontrollers)
❱
51.1.
MMIO الخام (Raw MMIO)
51.2.
حزم الوصول المحيطي (PACs)
51.3.
حزم طبقة تجريد الأجهزة (HAL Crates)
51.4.
حزم دعم اللوحة (Board Support Crates)
51.5.
نمط حالة النوع (The Type State Pattern)
51.6.
embedded-hal
51.7.
probe-rs و cargo-embed
❱
51.7.1.
تتبع الأخطاء (Debugging)
51.8.
مشاريع أخرى
52.
التمارين
❱
52.1.
بوصلة (Compass)
52.2.
حلول (Solutions)
Bare Metal: بعد الظهر
53.
معالجات التطبيقات
❱
53.1.
الاستعداد للبرمجة بلغة Rust
53.2.
التجميع المضمن (Inline Assembly)
53.3.
MMIO (إدخال/إخراج الذاكرة المعين)
53.4.
لنكتب برنامج تشغيل UART
❱
53.4.1.
المزيد من السمات (Traits)
53.5.
برنامج تشغيل UART أفضل
❱
53.5.1.
أعلام البت (Bitflags)
53.5.2.
سجلات متعددة (Multiple Registers)
53.5.3.
برنامج تشغيل (Driver)
53.5.4.
استخدام Cargo
53.6.
التسجيل (Logging)
❱
53.6.1.
استخدام Cargo
53.7.
استثناءات (Exceptions)
53.8.
مشاريع أخرى
54.
كريتات مفيدة ( Useful Crates)
❱
54.1.
zerocopy
54.2.
aarch64-paging
54.3.
buddy_system_allocator
54.4.
tinyvec
54.5.
spin
55.
أندرويد (Android)
❱
55.1.
vmbase
56.
التمارين
❱
56.1.
برنامج تشغيل RTC (RTC Driver)
56.2.
حلول (Solutions)
التزامن: الصباح (Concurrency)
57.
مرحبًا
58.
الخيوط البرمجية (Threads)
❱
58.1.
Plain Threads
58.2.
الخيوط البرمجية المحددة النطاق (Scoped Threads)
59.
القنوات (Channels)
❱
59.1.
المرسلون والمستقبلون (Senders and Receivers)
59.2.
القنوات غير المحدودة (Unbounded Channels)
59.3.
القنوات المحدودة (Bounded Channels)
60.
Send و Sync
❱
60.1.
سمات العلامات (Marker Traits)
60.2.
Send
60.3.
Sync
60.4.
أمثلة (Examples)
61.
الحالة المشتركة (Shared State)
❱
61.1.
Arc
61.2.
Mutex
61.3.
مثال (Example)
62.
التمارين
❱
62.1.
عشاء الفلاسفة (Dining Philosophers)
62.2.
مدقق الروابط متعدد الخيوط (Multi-threaded Link Checker)
62.3.
حلول (Solutions)
التزامن: بعد الظهر (Concurrency)
63.
مرحبًا
64.
أساسيات البرمجة غير المتزامنة (Async Basics)
❱
64.1.
async/await
64.2.
المستقبلات (Futures)
64.3.
وقت التشغيل (Runtimes)
❱
64.3.1.
طوكيو (Tokio)
64.4.
المهام (Tasks)
65.
القنوات وتدفق التحكم (Channels and Control Flow)
❱
65.1.
القنوات غير المتزامنة (Async Channels)
65.2.
الانضمام (Join)
65.3.
اختيار (Select)
66.
المزالق (Pitfalls)
❱
66.1.
حجب المنفذ (Blocking the Executor)
66.2.
Pin
66.3.
السمات غير المتزامنة (Async Traits)
66.4.
الإلغاء (Cancellation)
67.
التمارين
❱
67.1.
عشاء الفلاسفة (Dining Philosophers)
67.2.
تطبيق الدردشة الجماعية (Broadcast Chat Application)
67.3.
حلول (Solutions)
كلمات أخيرة (Final Words)
68.
شكرًا! (Thanks!)
69.
مسرد المصطلحات (Glossary)
70.
موارد أخرى (Other Resources)
71.
الشكر والتقدير (Credits)
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 (українська)
AIDL
The
Android Interface Definition Language (AIDL)
is supported in Rust:
Rust code can call existing AIDL servers,
You can create new AIDL servers in Rust.