مكتبة Rust القياسية: نظرة شاملة
مكتبة Rust القياسية (std) هي الأساس الذي يُبنى عليه أي تطبيق بهذه اللغة. توفر مجموعة من الأدوات الموثوقة والفعالة والآمنة لحل المهام النمطية، بدءًا من العمل مع المجموعات وصولاً إلى إدارة الذاكرة منخفضة المستوى. على عكس العديد من اللغات الأخرى، صُممت مكتبة Rust القياسية لتقليل الاعتماد على الحزم الخارجية (crates) للعمليات الأساسية، مع الحفاظ على أداء قريب من C/C++.
الوحدات الرئيسية للمكتبة القياسية
تم تنظيم المكتبة القياسية في وحدات منطقية. دعنا نستعرض أهمها:
std::collections— هياكل البيانات:Vec،HashMap،HashSet،BTreeMap،LinkedListوغيرها.std::io— العمل مع الإدخال/الإخراج: قراءة/كتابة الملفات، العمل مع التدفقات، التخزين المؤقت.std::fs— نظام الملفات: إنشاء، حذف، نسخ الملفات والمجلدات.std::thread— تعدد الخيوط: إنشاء الخيوط، المزامنة عبرMutex،Arc.std::sync— بدائيات المزامنة: القنوات (mpsc)، الحواجز، الإشارات.std::net— برمجة الشبكات: مقابس TCP/UDP، العناوين.std::time— العمل مع الوقت: القياسات، المؤقتات، المدد الزمنية.std::mem— إدارة الذاكرة: أحجام الأنواع، المحاذاة،swap،replace.
المجموعات: من Vec إلى HashMap
المجموعات في Rust ليست مجرد حاويات. فهي تنفذ واجهة برمجة تطبيقات غنية وتضمن سلامة الذاكرة في مرحلة التجميع. المجموعة الأكثر شيوعًا هي Vec<T> — المصفوفة الديناميكية.
fn main() { let mut numbers: Vec<i32> = vec![1, 2, 3, 4]; numbers.push(5); // التكرار مع التعديل for num in &mut numbers { *num *= 2; } // التصفية let evens: Vec<&i32> = numbers.iter() .filter(|&&x| x % 2 == 0) .collect(); println!("{:?}", evens); // [2, 4, 6, 8, 10]}HashMap — مصفوفة ترابطية مع تجزئة. من المهم ملاحظة أنه افتراضيًا يتم استخدام خوارزمية تجزئة آمنة تشفيريًا (SipHash)، مما يمنع هجمات HashDoS.
use std::collections::HashMap;
fn main() { let mut scores = HashMap::new(); scores.insert(String::from("Alice"), 100); scores.insert(String::from("Bob"), 85); // الحصول الآمن على القيمة match scores.get(&String::from("Alice")) { Some(score) => println!("Score: {}", score), None => println!("Not found"), } // التجول باستخدام المكرر for (name, score) in &scores { println!("{}: {}", name, score); }}العمل مع الإدخال/الإخراج والملفات
توفر الوحدة std::io وسائل عالية المستوى ومنخفضة المستوى للعمل مع تدفقات البيانات. تستحق الصفات Read و Write اهتمامًا خاصًا.
use std::fs::File;use std::io::{self, Read, Write};
fn read_file(path: &str) -> io::Result<String> { let mut file = File::open(path)?; let mut contents = String::new(); file.read_to_string(&mut contents)?; Ok(contents)}
fn write_file(path: &str, data: &str) -> io::Result<()> { let mut file = File::create(path)?; file.write_all(data.as_bytes())?; Ok(())}
fn main() -> io::Result<()> { write_file("example.txt", "Hello, Rust