لماذا Rust ليست مجرد موضة عابرة، بل تذكرتك إلى المستقبل؟
\n\nتخيل لغة برمجة تمنحك سرعة C++ وأمان Python. يبدو هذا كالخيال؟ مرحبًا بك في عالم Rust — اللغة التي تم الاعتراف بها كأكثر لغة محبوبة من قبل مجتمع المطورين على Stack Overflow للسنة الرابعة على التوالي. في عام 2025، يستمر الطلب على مطوري Rust في النمو: فهي تُستخدم في نواة Linux، ومتصفح Firefox، وأنظمة المنازل الذكية، وحتى في المركبات الفضائية التابعة لـ NASA.
\n\nلكن هناك خبر سيء: Rust ليست لغة يمكن تعلمها في عطلة نهاية الأسبوع. نظام الملكية (ownership) ومدقق الاقتراض (borrow checker) يكسران أنماط التفكير المعتادة. ومع ذلك، إذا كنت مستعدًا للتحدي، فإن خارطة الطريق هذه ستقودك من أول سطر println! إلى خدمات مصغرة جاهزة للإنتاج.
المرحلة 1: الأساسيات — لا تخف من المترجم، بل كوّن صداقة معه
\n\nأول شيء يجب فهمه: مترجم Rust هو أفضل صديق لك. سينتقد كل شيء صغير، لكن كل خطأ منه هو درس. ابدأ بتثبيت الأدوات:
\n\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\nrustc --version # التحقق من التثبيت\ncargo --version # مدير الحزم\n\nما يجب تعلمه في هذه المرحلة:
\n- \n
- المتغيرات وقابلية التغيير — لماذا
let mutأفضل منvar. \n - نظام الأنواع — i32, f64, char, bool والمجموعات (tuples). \n
- هياكل التحكم — if, loop, while, for. \n
- الدوال — القيم المُرجعة والتعبيرات. \n
إليك مثال سيفجر عقلك إذا كنت معتادًا على Python:
\n\nfn main() {\n let s1 = String::from("hello");\n let s2 = s1; // s1 لم يعد موجودًا!\n // println!("{}", s1); // خطأ في الترجمة!\n println!("{}", s2);\n}\n\nهذه هي الملكية (ownership). في Rust لا يوجد جامع قمامة — يتم تحرير الذاكرة بمجرد خروج المتغير من نطاق الرؤية. في هذه المرحلة، استخدم الكتاب الرسمي "The Rust Programming Language" و Rustlings — التمارين التفاعلية.
\n\nالمرحلة 2: نظام الملكية والاقتراض — طريقة تفكيرك الجديدة
\n\nعندما تتعلم كتابة برامج بسيطة، ابدأ بفهم المراجع (references) والاقتراض (borrowing). هذا هو ما يميز Rust عن جميع اللغات الأخرى. تذكر ثلاث قواعد:
\n\n- \n
- في أي لحظة، يمكن أن يكون لديك إما مرجع واحد قابل للتغيير، أو أي عدد من المراجع غير القابلة للتغيير. \n
- يجب أن تكون المراجع صالحة دائمًا. \n
- لا يمكن أن يكون لديك مرجع لبيانات تم حذفها بالفعل. \n
حاول كتابة دالة تتبادل رقمين:
\n\nfn swap(x: &mut i32, y: &mut i32) {\n let temp = *x;\n *x = *y;\n *y = temp;\n}\n\nfn main() {\n let mut a = 5;\n let mut b = 10;\n swap(&mut a, &mut b);\n println!("a = {}, b = {}", a, b);\n}\n\nهذا الكود آمن بنسبة 100% — لا أخطاء segfaults، ولا سباقات بيانات. إذا تجاوزت هذه المرحلة، سيكون ما بعدها أسهل. أوصي بكتاب "Rust in Action" لتيم مكنمارا — فهو يشرح كل شيء بأمثلة واقعية.
\n\nالمرحلة 3: الهياكل، التعدادات، ومطابقة الأنماط
\n\nRust ليست C بأزرار. لديها نظام أنواع قوي يسمح بنمذجة مجال الموضوع دون وراثة. انسَ الفئات — استخدم struct و enum.
\n\nمثال: نمذجة حالة الطلب
\n\nenum OrderStatus {\n Pending,\n Shipped { tracking_id: String },\n Delivered { date: String },\n Cancelled { reason: String },\n}\n\nstruct Order {\n id: u32,\n status: OrderStatus,\n items: Vec<String>,\n}\n\nfn process_order(order: Order) {\n match &order.status {\n OrderStatus::Pending