تجربة البرمجة باستخدام Rust
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 build
- تشغيل مشروعك باستخدام
cargo run
- اختبار مشروعك باستخدام
cargo test
يخبرنا كيفية بناء وتشغيل واختبار برامج 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
بعض أوامر 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 ولا يحتاج إلى ترجمة حيث أن الأكواد البرمجية تُكتب عادةً بالإنجليزية. ومع ذلك، يمكن شرح الكود باللغة العربية:
fn main() { ... }
: تعريف الدالة الرئيسية التي يتم تنفيذها عند تشغيل البرنامج.println!("{}", 2+3);
: طباعة نتيجة عملية الجمع بين الرقمين 2 و 3. العلامة{}
تُستخدم لوضع القيمة التي سيتم طباعتها.
هذه المرة تم التصحيح بشكل صحيح، وتم بالفعل إخراج الرقم 5.
بالمناسبة، ماذا عن الأمر build
؟
$ cargo build
Finished dev [unoptimized + debuginfo] target(s) in 0.00s
لماذا نحتاج إلى عملية البناء (build)؟ لأنه قد نرغب فقط في إنشاء البرنامج القابل للتنفيذ دون الرغبة في تنفيذه مباشرة. ربما بالنسبة لبعض البرامج الكبيرة، يكون التنفيذ مكلفًا من حيث الوقت. أو ربما نريد إنشاء البرنامج محليًا ثم نقله إلى خادم بعيد للتنفيذ.
لقد نجحنا في تشغيل برنامج Rust. الخطوة التالية هي التعرف على المزيد من قواعد لغة Rust، حتى نتمكن من العثور على التمثيلات الرمزية للمفاهيم التي ناقشناها في “حل ألغاز علوم الكمبيوتر”، مثل المتغيرات والدوال واستدعاء الدوال والتعابير.
تمرين صغير
- حاول أن تجرب برمجة Rust على جهاز الكمبيوتر الخاص بك كما هو موضح أعلاه.
- بعد الانتهاء من التمرين، يمكنك تقديم ملخص لا يتجاوز مائة كلمة أو إضافة إلى هذه المقالة.