تجربة البرمجة باستخدام Rust

Home PDF

Rust هي لغة برمجة شهدت شعبية كبيرة في السنوات الأخيرة. في عام 2006، بدأ موظف في Mozilla العمل على مشروع شخصي، والذي لاحقًا حصل على دعم من الشركة، وتم إصدار المشروع في عام 2010. هذا المشروع يُدعى Rust.

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

الموقع الرسمي يوفر نصًا برمجيًا:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

على نظام Mac، يمكنك أيضًا استخدام أداة إدارة الحزم Homebrew لتثبيت البرنامج. يمكنك تشغيل الأمر التالي:

brew install rust

أنا هنا أستخدم Homebrew لتثبيت Rust. أثناء التثبيت، دعونا نواصل الاطلاع على الموقع الرسمي.

ثم نلاحظ ظهور أداة Cargo على الموقع الرسمي، وهي أداة بناء وإدارة الحزم لـ Rust.

الموقع الرسمي يقول:

يخبرنا كيفية بناء وتشغيل واختبار برامج Cargo.

تشغيل:

brew install rust

الإخراج:

==> تنزيل https://homebrew.bintray.com/bottles/rust-1.49.0_1.big_sur.bottle.tar.gz
==> التنزيل من https://d29vzk4ow07wi7.cloudfront.net/5a238d58c3fa775fed4e12ad74109deff54a82a06cb6a3a4f51b5d37587fb319?response-content-disposition=a
######################################################################## 100.0%
==> صب rust-1.49.0_1.big_sur.bottle.tar.gz
==> ملاحظات
تم تثبيت إكمال Bash في:
  /usr/local/etc/bash_completion.d
==> الملخص
🍺  /usr/local/Cellar/rust/1.49.0_1: 15,736 ملفًا، 606.2 ميجابايت

تم التثبيت بنجاح.

عند تشغيل cargo في الطرفية، يكون الناتج كما يلي:

مدير حزم Rust

الاستخدام: cargo [خيارات] [أمر فرعي]

الخيارات: -V, –version طباعة معلومات الإصدار والخروج –list عرض قائمة الأوامر المثبتة –explain تشغيل `rustc --explain CODE` -v, --verbose استخدام الإخراج التفصيلي (-vv تفصيلي جدًا/إخراج build.rs) -q, --quiet عدم طباعة أي إخراج على stdout --color التلوين: تلقائي، دائمًا، أبدًا --frozen يتطلب أن يكون Cargo.lock والذاكرة المؤقتة محدثين --locked يتطلب أن يكون Cargo.lock محدثًا --offline التشغيل دون الوصول إلى الشبكة -Z ... أعلام غير مستقرة (للإصدارات الليلية فقط) لـ Cargo، انظر 'cargo -Z help' للتفاصيل -h, --help طباعة معلومات المساعدة

بعض أوامر Cargo الشائعة هي (راجع جميع الأوامر باستخدام –list): build, b تجميع الحزمة الحالية check, c تحليل الحزمة الحالية والإبلاغ عن الأخطاء، ولكن دون إنشاء ملفات كائن clean إزالة دليل الهدف doc بناء توثيق هذه الحزمة والتبعيات الخاصة بها new إنشاء حزمة Cargo جديدة init إنشاء حزمة Cargo جديدة في دليل موجود run, r تشغيل ملف ثنائي أو مثال من الحزمة المحلية test, t تشغيل الاختبارات bench تشغيل المقاييس update تحديث التبعيات المدرجة في Cargo.lock search البحث في السجل عن الصناديق publish تعبئة الحزمة وتحميلها إلى السجل install تثبيت ملف ثنائي لـ Rust. الموقع الافتراضي هو $HOME/.cargo/bin uninstall إلغاء تثبيت ملف ثنائي لـ Rust

راجع ‘cargo help ’ للحصول على مزيد من المعلومات حول أمر معين.


لا تحتاج إلى فهم جميع الأوامر. يكفي أن تعرف الأوامر الشائعة. أوامر `build` و `run` مهمة جدًا.

استمر في قراءة وثائق الموقع الرسمي:

```c
لنكتب تطبيقًا صغيرًا باستخدام بيئة تطوير Rust الجديدة التي أعددناها. للبدء، سنستخدم Cargo لإنشاء مشروع جديد لنا. في الطرفية التي تفضلها، قم بتشغيل:
cargo new hello-rust

سيؤدي هذا إلى إنشاء دليل جديد باسم hello-rust يحتوي على الملفات التالية:

hello-rust
|- Cargo.toml
|- src
  |- main.rs

ملف Cargo.toml هو ملف البيان (manifest) لـ Rust. إنه المكان الذي تحتفظ فيه ببيانات التعريف (metadata) لمشروعك، بالإضافة إلى التبعيات (dependencies).

src/main.rs هو المكان الذي سنكتب فيه كود التطبيق الخاص بنا.

هذا يشرح كيفية إنشاء المشروع. بعد ذلك، سنقوم بإنشائه.
$ cargo new hello-rust

تم إنشاء حزمة ثنائية (تطبيق) hello-rust


نستخدم VSCode لفتح المشروع.

main.rs:

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

ملاحظة: الكود أعلاه مكتوب بلغة البرمجة Rust ويقوم بطباعة “Hello, world!” عند تنفيذه. لا يحتاج إلى ترجمة لأنه جزء من التعليمات البرمجية.

بعد ذلك، من الطبيعي أن نفكر في بناء وتشغيل البرنامج.

$ cargo build

خطأ: تعذر العثور على ملف Cargo.toml في /Users/lzw/ideas/curious-courses/program/run/rust أو أي دليل أب

حدث خطأ. لماذا؟ هذا يشير إلى أن cargo يمكنه العمل فقط داخل دليل المشروع. بعد ذلك، تم الانتقال إلى الدليل الفرعي عن طريق تشغيل الأمر cd hello-rust.

في هذه اللحظة، تساءلت: ماذا سيحدث إذا قمت بتشغيله مباشرة؟

$ cargo run
   
   يتم تجميع hello-rust v0.1.0 (/Users/lzw/ideas/curious-courses/program/run/rust/hello-rust)
    تم الانتهاء من التجميع [بدون تحسين + معلومات تصحيح] target(s) في 4.43 ثانية
     تشغيل `target/debug/hello-rust`
مرحبًا بالعالم!

حسنًا، لقد نجحت. تم إخراج السلسلة النصية، والبرنامج بدأ يعمل الآن.

جرب تعديل البرنامج.

fn main() {
    println!(2+3);
}

بعد تشغيل cargo run، ظهر:

   يتم تجميع hello-rust v0.1.0 (/Users/lzw/ideas/curious-courses/program/run/rust/hello-rust)
خطأ: وسيط التنسيق يجب أن يكون نصًا حرفيًا
 --> src/main.rs:2:14
  |
2 |     println!(2+3);
  |              ^^^
  |
مساعدة: قد تكون ناقصًا نصًا حرفيًا للتنسيق معه
  |
2 |     println!("{}", 2+3);
  |              ^^^^^

خطأ: إيقاف العملية بسبب خطأ سابق

خطأ: تعذر تجميع hello-rust

لمعرفة المزيد، قم بتشغيل الأمر مرة أخرى مع الخيار --verbose.


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

```rust
fn main() {
    println!("{}", 2+3);
}

ترجمة الكود:

fn main() {
    println!("{}", 2+3);
}

ملاحظة: الكود مكتوب بلغة Rust ولا يحتاج إلى ترجمة حيث أن الأكواد البرمجية تُكتب عادةً بالإنجليزية. ومع ذلك، يمكن شرح الكود باللغة العربية:

هذه المرة تم التصحيح بشكل صحيح، وتم بالفعل إخراج الرقم 5.

بالمناسبة، ماذا عن الأمر build؟

$ cargo build
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s

لماذا نحتاج إلى عملية البناء (build)؟ لأنه قد نرغب فقط في إنشاء البرنامج القابل للتنفيذ دون الرغبة في تنفيذه مباشرة. ربما بالنسبة لبعض البرامج الكبيرة، يكون التنفيذ مكلفًا من حيث الوقت. أو ربما نريد إنشاء البرنامج محليًا ثم نقله إلى خادم بعيد للتنفيذ.

لقد نجحنا في تشغيل برنامج Rust. الخطوة التالية هي التعرف على المزيد من قواعد لغة Rust، حتى نتمكن من العثور على التمثيلات الرمزية للمفاهيم التي ناقشناها في “حل ألغاز علوم الكمبيوتر”، مثل المتغيرات والدوال واستدعاء الدوال والتعابير.


تمرين صغير


Back 2025.01.18 Donate