مكتبة Rust القياسية: نظرة شاملة على الوحدات والإمكانيات الأساسية

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مكتبة Rust القياسية: نظرة شاملة



مكتبة Rust القياسية (std) هي مجموعة من الوحدات الأساسية التي تزود المطور بكل ما هو ضروري لإنشاء تطبيقات موثوقة وسريعة وآمنة. على عكس العديد من اللغات الأخرى، تولي Rust اهتمامًا خاصًا لأمان الذاكرة والتوازي دون وجود جامع للقمامة. في هذه المقالة، سنقوم بتحليل المكونات الرئيسية لـ std بالتفصيل مع أمثلة على الكود.



1. الوحدات الأساسية للمكتبة القياسية



تنقسم المكتبة إلى عدة مجموعات منطقية. دعنا نستعرض أهمها.



1.1. الوحدة std::collections

تحتوي على هياكل بيانات لتخزين وإدارة مجموعات العناصر. الأكثر شيوعًا:

  • Vec<T> — مصفوفة ديناميكية (مشابهة لـ ArrayList في Java).
  • HashMap<K, V> — جدول تجزئة لتخزين أزواج المفتاح-القيمة.
  • HashSet<T> — مجموعة من القيم الفريدة.
  • BTreeMap و BTreeSet — مجموعات مرتبة تعتمد على الشجرة ذات اللونين الأحمر والأسود.


use std::collections::HashMap;

fn main() { let mut scores = HashMap::new(); scores.insert(String::from("Alice"), 100); scores.insert(String::from("Bob"), 90);

for (name, score) in &scores { println!("{}: {}", name, score); }}


1.2. الوحدة std::io

تتولى مسؤولية الإدخال والإخراج: القراءة من لوحة المفاتيح، التعامل مع الملفات، الإدخال/الإخراج المُخزّن. السمات الرئيسية: Read و Write.



use std::io::{self, BufRead};

fn main() -> io::Result<()> { let stdin = io::stdin(); for line in stdin.lock().lines() { println!("لقد أدخلت: {}", line?); } Ok(())}


1.3. الوحدة std::thread

تسمح بإنشاء وإدارة خيوط التنفيذ. تضمن Rust سلامة البيانات بين الخيوط من خلال نظام الملكية والسمات Send و Sync.



use std::thread;

fn main() { let handle = thread::spawn(|| { for i in 1..10 { println!("الخيط: {}", i); } });

for i in 1..5 { println!("الخيط الرئيسي: {}", i); }

handle.join().unwrap();}


2. التعامل مع السلاسل النصية والنص



يوجد في Rust نوعان من السلاسل النصية:

  • String — سلسلة نصية قابلة للتغيير ومالكة (موجودة في الكومة).
  • &str — شريحة سلسلة نصية غير قابلة للتغيير (مرجع إلى تسلسل UTF-8).


fn main() {    let mut hello = String::from("مرحبًا، ");    hello.push_str("العالم!");    println!("{}", hello); // الإخراج: مرحبًا، العالم!

let slice: &str = &hello[0..6]; println!("الشريحة: {}", slice); // الإخراج: مرحبًا}


3. معالجة الأخطاء



بدلاً من الاستثناءات، تستخدم Rust تعدادين:

  • Option<T> — للحالات التي قد تكون فيها القيمة غير موجودة (Some أو None).
  • Result<T, E> — للعمليات التي قد تنتهي بخطأ (Ok أو Err).


use std::fs::File;use std::io::Read;

fn read_file(path: &str) -> Result<String, std::io::Error> { let mut file = File::open(path)?; let mut contents = String::new(); file.read_to_string(&mut contents)?; Ok(contents)}

fn main() { match read_file("test.txt") { Ok(content) => println!("المحتوى: {}", content), Err(e) => eprintln!("خطأ: {}", e), }}


4. المكررات والإغلاقات



المكررات في Rust كسولة وقوية. تسمح بمعالجة تسلسلات البيانات دون حلقات صريحة.



fn main() {    let numbers = vec![1,                    

توصيات