- به 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. اعتبارها