لماذا Rust ليست مجرد لغة عصرية، بل أداة عمل حقيقية؟
\n\nلعدة سنوات متتالية، تم الاعتراف بـ Rust كأكثر لغة برمجة محبوبة وفقًا لاستطلاع Stack Overflow. ولكن خلف حب المجتمع، يوجد نظام بيئي قوي — مكتبات Rust التي تحول لغة النظام الآمنة إلى أداة متعددة الاستخدامات. إذا كنت تكتب بلغة Python وتتطلع إلى Rust للخدمات الدقيقة عالية التحميل، أدوات CLI، أو معالجة البيانات — فهذه المقالة لك.
\n\nلن نقوم بإدراج جميع الـ 100,000+ كريت (كما تسمى الحزم في Rust). بدلاً من ذلك، سأعرض 10 من أكثر مكتبات Rust فائدة التي تسرّع عملية التطوير حقًا. سترى أمثلة على الكود، وستعرف المهام التي يحلها كل مكتبة، وستفهم من أين تبدأ الغوص في عالم النظام البيئي لـ Rust.
\n\n1. Serde — ملك التسلسل
\n\nإذا كنت تعمل مع JSON، YAML، TOML أو أي تنسيق بيانات آخر — فأنت بحاجة إلى serde. هذه ليست مجرد مكتبة، بل إطار عمل كامل لتسلسل وإلغاء تسلسل هياكل البيانات. Serde هو أساس آلاف الكريتات الأخرى ويعتبر المعيار الفعلي.
مثال: تحويل هيكل Rust إلى JSON والعكس.
\n\nuse serde::{Serialize, Deserialize};\n\n#[derive(Serialize, Deserialize, Debug)]\nstruct User {\n name: String,\n age: u8,\n email: String,\n}\n\nfn main() {\n let user = User {\n name: "أليكسي".into(),\n age: 30,\n email: "alex@example.com".into(),\n };\n\n // التسلسل إلى JSON\n let json = serde_json::to_string(&user).unwrap();\n println!("JSON: {}", json);\n\n // إلغاء التسلسل مرة أخرى\n let decoded: User = serde_json::from_str(&json).unwrap();\n println!("تم فك الترميز: {:?}", decoded);\n}\n\nلاحظ: Serde يعمل مع أي تنسيق — فقط قم بتوصيل كريت المحول (serde_json, serde_yaml، إلخ). هذه واحدة من أشهر مكتبات Rust بملايين التنزيلات.
2. Tokio — وقت التشغيل غير المتزامن
\n\nلكتابة تطبيقات شبكية عالية الأداء في Rust، يتم استخدام البرمجة غير المتزامنة. Tokio هو وقت التشغيل غير المتزامن الرئيسي، الذي يوفر منفذًا متعدد الخيوط، مؤقتات، إدخال/إخراج شبكي، وقنوات. بدون Tokio، لا يمكن تصور النظام البيئي الحديث لـ Rust.
\n\nخادم TCP echo بسيط على Tokio:
\n\nuse tokio::net::TcpListener;\nuse tokio::io::{AsyncReadExt, AsyncWriteExt};\n\n#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n let listener = TcpListener::bind("127.0.0.1:8080").await?;\n println!("الخادم يعمل على المنفذ 8080");\n\n loop {\n let (mut socket, _) = listener.accept().await?;\n tokio::spawn(async move {\n let mut buf = [0; 1024];\n loop {\n let n = socket.read(&mut buf).await.unwrap();\n if n == 0 { break; }\n socket.write_all(&buf[0..n]).await.unwrap();\n }\n });\n }\n}\n\nTokio يُستخدم في أطر الويب (Actix, Warp)، قواعد البيانات (TiKV)، وحتى أدوات Kubernetes. إذا كنت تبحث عن مكتبات Rust لتطوير الويب — فـ Tokio سيكون أساسك.
\n\n3. Reqwest — عميل HTTP للبشر
\n\nreqwest هو عميل HTTP أنيق، مبني على Tokio. يدعم الطلبات غير المتزامنة والحظرية، JSON، multipart، والبروكسي. مثالي لكتابة برامج الزحف، التكامل مع واجهات برمجة التطبيقات، والاختبارات.
طلب GET غير متزامن مع استجابة JSON:
\n\nuse reqwest::Client;\n\n#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n let client = Client::new();\n let resp = client\n .get("https://api.github.com/repos/rust-lang/rust")\n .header("User-Agent", "my-rust-app")\n