مكتبة Rust القياسية: نظرة شاملة
مكتبة Rust القياسية (std) هي جوهر النظام البيئي للغة، حيث توفر للمطورين أدوات قوية وآمنة لبناء تطبيقات عالية الأداء. على عكس العديد من اللغات الأخرى، تولي Rust اهتمامًا خاصًا لأمان الذاكرة والتجريدات ذات التكلفة الصفرية، مما يجعل std ليست مجرد مجموعة من الأدوات المساعدة، بل أساسًا لكتابة كود موثوق. في هذه المقالة، سنستعرض بالتفصيل الوحدات الرئيسية للمكتبة القياسية، وإمكانياتها، ونقدم أمثلة عملية.
الوحدات الأساسية للمكتبة القياسية
تتضمن مكتبة Rust القياسية العديد من الوحدات التي تغطي جميع جوانب التطوير تقريبًا. دعنا نستعرض أهمها:
- std::collections — هياكل البيانات (HashMap، Vec، BTreeMap، HashSet وغيرها)
- std::io — الإدخال والإخراج (قراءة/كتابة الملفات، العمل مع وحدة التحكم)
- std::fs — العمل مع نظام الملفات
- std::thread — تعدد المهام (الخيوط)
- std::sync — مزامنة الخيوط (Mutex، Arc، Barrier)
- std::net — برمجة الشبكات (TCP، UDP)
- std::path — العمل مع مسارات نظام الملفات
- std::error — معالجة الأخطاء
العمل مع المجموعات (std::collections)
توفر الوحدة std::collections هياكل بيانات فعالة. الأكثر شيوعًا هو Vec<T> (المصفوفة الديناميكية). كما تُستخدم HashMap<K, V> بشكل متكرر لتخزين أزواج المفتاح-القيمة و HashSet<T> للعناصر الفريدة.
use std::collections::HashMap;
fn main() { let mut scores = HashMap::new(); scores.insert(String::from("Blue"), 10); scores.insert(String::from("Yellow"), 50);
// الوصول عبر المفتاح match scores.get(&"Blue".to_string()) { Some(score) => println!("النتيجة: {}", score), None => println!("لم يتم العثور على نتيجة"), }}الإدخال والإخراج والعمل مع الملفات (std::io و std::fs)
تسمح الوحدتان std::io و std::fs بقراءة وكتابة الملفات، والعمل مع الإدخال/الإخراج من وحدة التحكم. تضمن Rust العمل الآمن مع الملفات بفضل نظام الملكية.
use std::fs::File;use std::io::{BufRead, BufReader, Write};
fn main() -> std::io::Result<()> { // الكتابة إلى ملف let mut file = File::create("example.txt")?; file.write_all(b"مرحبًا، Rust!")?;
// قراءة الملف سطرًا سطرًا let file = File::open("example.txt")?; let reader = BufReader::new(file); for line in reader.lines() { println!("{}", line?); } Ok(())}تعدد المهام (std::thread)
توفر Rust نموذجًا آمنًا لتعدد المهام عبر الوحدة std::thread. يمنع المترجم سباقات البيانات في مرحلة الترجمة بفضل قواعد الملكية والاقتراض.
use std::thread;use std::time::Duration;
fn main() { let handle = thread::spawn(|| { for i in 1..5 { println!("الخيط: {}", i); thread::sleep(Duration::from_millis(100)); } });
for i in 1..3 { println!("الخيط الرئيسي: {}", i); thread::sleep(Duration::from_millis(50)); }
handle.join().unwrap();}المزامنة (std::sync)
للمشاركة الآمنة للبيانات بين الخيوط، تُستخدم البدائيات من std::sync: Mutex (الاستبعاد المتبادل)، Arc (عداد مرجعي ذري) و Barrier (حاجز المزامنة).
use std::sync::{Arc, Mutex};use std::thread;
fn main() { let counter = Arc::new(Mutex::new(0)); let mut handles = vec![];
for _ in 0..10 {\