Rust: مقدمة إلى لغة «Rust» وإعداد بيئة التطوير

لغة «Rust» هي لغة تمكّن الجميع من تطوير برامج موثوقة وفعالة — فهي لا تعتمد على آلية جمع القمامة، ومع ذلك تضمن أمان الذاكرة.

يستهدف هذا الدليل التعليمي المطورين الذين يمتلكون معرفة أساسية بلغة برمجة واحدة على الأقل. وسواء كانت خلفيتك في لغة C/C++ أو Java أو Python أو JavaScript، فإن نظام الملكية في Rust والتجريدات ذات التكلفة الصفرية ستغير مفهومك عن «الأمان». وقد تم اختيار Rust كـ«لغة البرمجة الأكثر شعبية» في استطلاع المطورين الذي أجرته Stack Overflow لعدة سنوات متتالية.


1. ما ستتعلمه



2. قصة مبرمج أنظمة

(1) العذاب: كابوس لغة البرمجة C

توم مهندس أنظمة مدمجة. وفي أحد الأيام، كُلف بمهمة عاجلة:

"تقليل استهلاك الذاكرة لهذه الخدمة الإلكترونية من 300 ميغابايت إلى أقل من 50 ميغابايت، مع ضمان عدم تعطلها أبدًا."

وقد طوره بلغة البرمجة C ووجد أن:

ماذا اختار في النهاية؟ لقد تحول إلى Rust.

(2) حل Rust

بالنسبة للمهمة نفسها، كتب توم ما يلي بلغة Rust:

RUST
fn main() {
    let msg = String::from("Hello, secure world!");
// Compiler Guarantees: msg memory is automatically released when it goes out of scope.
// Not necessary malloc, nor free
    println!("{}", msg);
}

الوقت الإجمالي: تمت الترجمة بنجاح = آمن. يكتشف مُترجم لغة Rust أخطاء الذاكرة أثناء الترجمة. لا حاجة إلى Valgrind ولا إلى Sanitizer — إذا تمت الترجمة، فهذا يعني أن البرنامج آمن.

هذا هو جمال لغة Rust: القضاء على أخطاء الذاكرة في مرحلة الترجمة دون أي عبء إضافي على وقت التشغيل. وتقوم فلسفة تصميمها على مبدأ أن «الأمان لا يتحقق من خلال توخي المطور للحذر، بل يضمنه المُترجم».



3. ما هو Rust؟

Rust هي لغة برمجة على مستوى النظام أنشأها في عام 2015 الباحث في مؤسسة Mozilla Graydon Hoare، وقد صُممت في الأصل لمحرك متصفح Firefox.

(1) المبادئ الأساسية الثلاثة لـ Rust

100%
graph LR
    A[Rust Three Major Commitments] --> B[Zero-Cost Abstraction]
    A --> C[Memory Safety]
    A --> D[Concurrency-Safe]
    B --> E[Expressiveness of High-Level Languages<br>Assembly-Level Performance]
    C --> F[Ownership + Borrow<br>Eliminating Memory Errors at Compile Time]
    D --> G[Send+Sync trait<br>Data race detected at compile time]
الفئة الوصف
التجريد بدون تكلفة قدرة اللغات عالية المستوى على التعبير، وأداء لغة التجميع. بدون أي عبء إضافي أثناء التشغيل
ضمانات أمان الذاكرة الملكية + الاستعارة + دورة الحياة؛ يضمن المُجمِّع في وقت التجميع عدم وجود مؤشرات فارغة، ولا مؤشرات عشوائية، ولا تضارب في الوصول إلى البيانات
التزامن الآمن تتيح سمات «Send» و«Sync» اكتشاف أخطاء التزامن في مرحلة التحويل البرمجي

(2) Rust مقابل C/C++ مقابل Go

البعد C/C++ Go Rust
إدارة الذاكرة استخدام malloc/free يدويًا GC (جمع القمامة) فحوصات الملكية + الاستعارة (في وقت التحويل البرمجي)
الأداء عالٍ جدًّا عالٍ (مع فترات توقف بسبب جمع القمامة) عالٍ جدًّا (بدون وقت تشغيل)
الالتزام بالأمان لا شيء (يعتمد على المبرمجين) جزئي (تمنع آلية التجميع التلقائي (GC) حدوث تسربات الذاكرة) كامل (مضمون في وقت التحويل البرمجي)
نموذج التزامن pthreads (دليل) goroutine + قناة std::thread + سمة Send/Sync
إدارة الحزم Makefile / CMake go mod Cargo (جاهز للاستخدام)
منحنى التعلم متوسط إلى مرتفع (قد تكون التلميحات مزعجة) منخفض متوسط إلى مرتفع (أداة التحقق من الاستعارة)


4. تثبيت Rust

(1) التثبيت باستخدام rustup

الطريقة الموصى بها لتثبيت Rust هي من خلال rustup، وهي أداة لإدارة إصدارات Rust.

BASH
# Run in the terminal (Windows requires Visual Studio C++ Build Tools to be installed first)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

بعد التثبيت، تحقق من الإصدار:

BASH
rustc --version   # Output: rustc 1.86.0 (05f9846f8 2025-03-31)
cargo --version   # Output: cargo 1.86.0 (version number)

(2) ملاحظات خاصة بنظام ويندوز

يجب على مستخدمي Windows أولاً تثبيت Visual Studio Build Tools (أو Visual Studio 2019 أو إصدار أحدث) واختيار حزمة العمل "التطوير على سطح المكتب باستخدام C++". تعتمد لغة Rust على أداة الربط MSVC.

(3) التحديث وإلغاء التثبيت

BASH
rustup update    # Update to the latest version
rustup self uninstall  # Uninstall (for cache retention, use uninstall rather than directly deleting the directory)


5. برنامجك الأول بلغة Rust

(1) ▶ المثال:Hello World (مستوى الصعوبة ⭐)

RUST
// ============================================
// First Rust Program: Print Hello World
// ============================================

fn main() {
    println!("Hello, world!");
}

الناتج:

TEXT 📖 للعرض فقط
Hello, world!

fn main() هي نقطة الدخول لكل برنامج مكتوب بلغة Rust. println! هي ماكرو (انظر !) تُستخدم لعرض النص على شاشة المحطة الطرفية.


(2) ▶ المثال:إنشاء مشروع باستخدام Cargo (مستوى الصعوبة ⭐)

BASH
# Create a New Project
cargo new hello_cargo
cd hello_cargo

سيُنتج cargo new البنية التالية:

TEXT 📖 للعرض فقط
hello_cargo/
├── Cargo.toml    # Project Configuration File (Dependencies, Metadata)
├── src/
│   └── main.rs   # Source Code Entry Point

Cargo.toml المحتوى:

TOML
[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"

التجميع والتشغيل:

BASH
cargo build       # Compilation (generates target/debug/ directory)
cargo run         # Compilation + Run

الناتج:

TEXT 📖 للعرض فقط
Hello, world!

Cargo هو مدير الحزم ونظام البناء في Rust. cargo build يُنشئ نسخة تجريبية للتصحيح؛ cargo run يُترجم البرنامج ويُشغّله بأمر واحد؛ cargo check يُجري فحصًا لنحو البرنامج فقط دون إنشاء ملف ثنائي (أسرع).


(3) ▶ المثال:آلة حاسبة بسيطة (مستوى الصعوبة ⭐⭐)

RUST
// ============================================
// A Simple Addition Calculator
// ============================================

fn main() {
    let a: i32 = 10;      // i32 is a 32-bit signed integer
    let b: i32 = 20;      // Rust type annotations use a colon
    let sum = a + b;

    println!("{} + {} = {}", a, b, sum);
}

الناتج:

TEXT 📖 للعرض فقط
10 + 20 = 30

المتغيرات في لغة Rust غير قابلة للتغيير افتراضيًّا. هنا، يتم إعلانها باستخدام let؛ وإذا احتجت إلى تعديل قيمها لاحقًا، فيجب عليك استخدام let mut. أما تعليقات الأنواع : i32 فهي اختيارية — حيث يمكن للمترجم استنتاج النوع من السياق.


(4) ▶ المثال:تمرين شامل — تحويل درجات الحرارة وتقديم النتائج (مستوى الصعوبة ⭐⭐)

RUST
// ============================================
// Comprehensive Example: Temperature Conversion + Simple Report Generation
// Demo Variables, Types, Basic Syntax, Such as Formatted Output
// ============================================

fn celsius_to_fahrenheit(celsius: f64) -> f64 {
    celsius * 9.0 / 5.0 + 32.0
}

fn fahrenheit_to_celsius(fahrenheit: f64) -> f64 {
    (fahrenheit - 32.0) * 5.0 / 9.0
}

fn main() {
    let cities = ["Beijing", "Shanghai", "Guangzhou"];
    let temps_c = [28.5, 31.2, 33.8];

    println!("=== City Temperature Report ===");
    println!("{:<12} {:>10} {:>10}", "City", "Celsius(°C)", "Fahrenheit(°F)");
    println!("{}", "-".repeat(34));

    let mut index = 0;
    while index < cities.len() {
        let c = temps_c[index];
        let f = celsius_to_fahrenheit(c);
        println!("{:<12} {:>10.1} {:>10.1}", cities[index], c, f);
        index += 1;
    }

    let freezing_f: f64 = 32.0;
    let freezing_c = fahrenheit_to_celsius(freezing_f);
    println!("\nFreezing Point: {:.1}°F = {:.1}°C", freezing_f, freezing_c);

    const BOILING_C: f64 = 100.0;
    let boiling_f = celsius_to_fahrenheit(BOILING_C);
    println!("Boiling Point: {:.1}°C = {:.1}°F", BOILING_C, boiling_f);
}

الناتج:

TEXT 📖 للعرض فقط
=== City Temperature Report ===
City           Celsius(°C)    Fahrenheit(°F)
----------------------------------
Beijing           28.5       83.3
Shanghai          31.2       88.2
Guangzhou         33.8       92.8

Freezing Point: 32.0°F = 0.0°C
Boiling Point: 100.0°C = 212.0°F

يغطي هذا المثال الشامل تعريفات الدوال، وإعلانات الثوابت، والتكرار على المصفوفات، والإخراج المنسق، وصيغ تحويل درجات الحرارة، مما يوفر شرحًا تفصيليًّا كاملاً لقواعد اللغة الأساسية في Rust.

(5) ▶ المثال:لعبة «خمن الرقم» (مستوى الصعوبة ⭐⭐)

RUST
use std::io;

fn main() {
    let secret = 42; // Hidden answer (random numbers will be used in subsequent lessons)
    println!("🎯 Guess the Number Game! Range 1-100");

    loop {
        println!("Please enter your guess:");

        let mut guess = String::new();
        io::stdin()
            .read_line(&mut guess)
            .expect("Failed to read input");

        let guess: i32 = match guess.trim().parse() {
            Ok(num) => num,
            Err(_) => {
                println!("⚠️  Please enter a valid number!");
                continue;
            }
        };

        match guess.cmp(&secret) {
            std::cmp::Ordering::Less => println!("Too small! ⬆️"),
            std::cmp::Ordering::Greater => println!("Too big! ⬇️"),
            std::cmp::Ordering::Equal => {
                println!("🎉 Congratulations, you got it right! The answer is {}", secret);
                break;
            }
        }
    }
}

يوضح هذا المثال الاستخدام الأساسي لـ loop وmatch والمكتبة القياسية io، بالإضافة إلى معالجة الأخطاء — وهو المشروع التمهيدي الكلاسيكي المأخوذ من الدليل التعليمي الرسمي للغة Rust.



6. نظرة عامة سريعة على منظومة Rust

تدور منظومة Rust حول ثلاث أدوات أساسية:

الأداة الغرض الأمر
rustc مُترجم لغة Rust rustc main.rs
rustup إدارة إصدارات Rust rustup toolchain install nightly
Cargo إدارة الحزم + التجميع cargo build / run / test / doc

يتم استضافة الحزم مفتوحة المصدر على crates.io (https://crates.io)، الذي يستضيف حاليًا أكثر من 150,000 حزمة. ومن بين الحزم الشائعة serde (التسلسل)، وclap (معلمات سطر الأوامر)، وtokio (وقت التشغيل غير المتزامن).



❓ أسئلة شائعة

س هل لغة Rust مناسبة للمبتدئين الذين ليس لديهم خبرة في البرمجة؟
ج ليس تمامًا.
س كيف أختار بين Rust و Go؟
ج هذا يعتمد على حالة الاستخدام.
س كيف هو وضع سوق العمل لمطوري لغة Rust؟
ج الطلب آخذ في النمو بسرعة، لكن العدد الإجمالي للوظائف الشاغرة لا يزال منخفضًا.
س لماذا أحتاج إلى Visual Studio لتثبيت Rust على نظام Windows؟
ج يعتمد مُجمِّع Rust بشكل أساسي على أداة الربط MSVC.
س ما الفرق بين cargo check وcargo build؟
ج يقوم cargo check بإجراء فحوصات الصياغة والنوع فقط؛ ولا يقوم بإنشاء ملفات ثنائية، لذا فهو أسرع بكثير.

📖 ملخص


📝 تمارين

  1. الصعوبة ⭐: استخدم cargo new لإنشاء مشروع باسم my_first_rust، وقم بتعديل main.rs لطباعة اسمك، ثم قم بتشغيله باستخدام cargo run.
  2. الصعوبة ⭐⭐: انطلاقًا من المثال 3، أضف عمليات الطرح والضرب والقسمة، ولاحظ نتائج أنواع العمليات المختلفة (هل يتم اقتطاع الباقي عند القسمة على الأعداد الصحيحة؟).
  3. الصعوبة ⭐⭐⭐: اقرأ الوثائق الرسمية لـ Rust التي فتحها rustup doc، وابحث عن قسم «الملكية»، ولخصه بثلاث جمل بعباراتك الخاصة. أرسلها إلى أحد مطوري Rust الذين تعرفهم لتتأكد من صحتها.
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%