- مرحبًا بكم في 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)