7 أسباب لاستخدام الصدأ في مشروعك التنموي التالي

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

في هذه المقالة ، سوف نستكشف لغة البرمجة Rust ، وميزاتها ، مثل نظام الكتابة ، وأمان الذاكرة ، والملكية. سنراجع أيضًا قائمة الموارد التي يمكن أن تساعدك على تعلم Rust.

هيا نبدأ!

ما هو الصدأ؟

الصدأ هي لغة برمجة أنظمة. بدأ كمشروع شخصي لمطور Graydon Hoare ، في عام 2006. في أقل من عقد من الزمان ، نمت لتصبح الخيار الأول لبرمجة الأنظمة والتطبيقات المرتبطة بها. يبلغ متوسط ​​راتب مبرمج Rust حوالي 120 ألف دولار.

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

مصدر الصورة: StackOverflow

يوفر Rust سرعة لغات برمجة الأنظمة منخفضة المستوى مثل C و C ++ وأمان لغات البرمجة عالية المستوى مثل Python.

من المشاريع البارزة مثل Dropbox و Firefox إلى WebAssembly والبرمجة المدمجة ، يستخدم Rust على نطاق واسع في جميع مجالات تطوير البرامج. يوفر Rust دعمًا لإدارة الطرود الجاهزة من خلال Cargo.

الشحن: مدير الحزم الخاصة بالصدأ

Cargo هو مدير الحزم لـ Rust. يمكنك استخدام البضائع لتثبيت الحزم من الصناديق ، سجل حزمة الصدأ. بالإضافة إلى كونه مدير حزم يتيح لك البحث عن الحزم وتثبيتها وإدارتها ، فإن البضائع تعمل أيضًا كجهاز اختبار ، ومولد مستندات ، ونظام بناء.

الآن بعد أن حصلت على نظرة عامة على Rust ، دعنا نلقي نظرة فاحصة على بعض ميزات Rust التي تجعلها تبرز كلغة برمجة أنظمة مع اعتماد واسع.

رسائل خطأ مفيدة

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

مثال على رسالة خطأ

عندما لا يتم ترجمة الكود الخاص بك بنجاح ، يقدم Rust رسائل خطأ مفيدة توفر تفسيرات لما يجب إصلاحه في التعليمات البرمجية الخاصة بك وأين.

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

fn main() {
    let num1 = 10;
    fn inner(){
        let num2 = 9; 
    }
    println!("The value of num2 is: {}", num2);
}

وتقدم رسالة الخطأ معلومات حول ما يجب إصلاحه.

error[E0425]: cannot find value `num2` in this scope
 --> src/main.rs:6:42
  |
6 |     println!("The value of num2 is: {}", num2);
  |                                          ^^^^ help: a local variable with a similar name exists: `num1`

تحذيرات أثناء التجميع

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

fn main() {
    let num1 = 10;
    let num2 = 9;
    println!("The value of num1 is: {}", num1);
}

هنا ، يتم التصريح عن المتغير num2 ولكن لم يتم استخدامه مطلقًا.

warning: unused variable: `num2`
 --> src/main.rs:3:9
  |
3 |     let num2 = 9;
  |         ^^^^ help: if this is intentional, prefix it with an underscore: `_num2`
  |

لغة مكتوبة بقوة

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

  كيفية إدارة حساب Hulu

على سبيل المثال ، سيتم تشغيل كود Python في خلية التعليمات البرمجية التالية بدون أخطاء. هذا لأنه في بايثون ، الرقم غير الصفري له قيمة حقيقية لـ True ، وبالتالي ، فإن تعليمة if تعمل بدون أخطاء – على الرغم من أن الرقم 10 هو عدد صحيح – وليس قيمة منطقية.

num1 = 10
if num1:
    num2 = 9
print(f"num2 is {num2}")

# Output: num2 is 9

من ناحية أخرى ، لا يجبر Rust الأنواع. لذا فإن الكود التالي سيظهر خطأ:

fn main() {
    let num1 = 10;
    if num1{
        let num2 = 9; 
    }
}

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

error[E0308]: mismatched types
 --> src/main.rs:3:8
  |
3 |     if num1{
  |        ^^^^ expected `bool`, found integer

سلامة الذاكرة

تعد سلامة الذاكرة ميزة أخرى لـ Rust تجعلها جذابة للمبرمجين. سنحاول تقديم نظرة عامة سريعة حول كيفية عمل ذلك.

يجب تهيئة المتغيرات قبل استخدامها

في Rust ، يجب تهيئة جميع المتغيرات قبل استخدامها. في لغات مثل C ، سيتم ترجمة التعليمات البرمجية التالية التي لم تتم تهيئة num وتشغيلها بدون أخطاء. قيمة المتغير غير المهيأ هي بعض القيم غير المرغوب فيها.

#include <stdio.h>

int main(void) {
    int num;
	printf("The value of num is %d", num);
	return 0;
}
// Output: The value of num is 0

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

fn main() {
    let num:i32;
    println!("The value of num is: {}",num);
}
error[E0381]: used binding `num` isn't initialized
 --> src/main.rs:3:40
  |
2 |     let num:i32;
  |         --- binding declared here but left uninitialized
3 |     println!("The value of num is: {}",num);
  |                                        ^^^ `num` used here but it isn't initialized
  |

سلامة الذاكرة في وقت الترجمة

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

fn main() {
    let num:i32;
    if true{
        num = 100;
    }
    println!("The value of num is: {}", num);
}

هذا لأن التقييم الشرطي يحدث في وقت التشغيل ، ولن يتمكن المحول البرمجي من ضمان أن num لها قيمة في وقت الترجمة.

error[E0381]: used binding `num` is possibly-uninitialized
 --> src/main.rs:6:41
  |
2 |     let num:i32;
  |         --- binding declared here but left uninitialized
3 |     if true{
  |        ---- if this `if` condition is `false`, `num` is not initialized
4 |         num = 100;
5 |     }
  |      - an `else` arm might be missing here, initializing `num`
6 |     println!("The value of num is: {}", num);
  |                                         ^^^ `num` used here but it is possibly-uninitialized

إذا ألقيت نظرة فاحصة على رسالة الخطأ ، فسترى أنه مع عبارة else ، يمكننا التأكد من أن num سيكون لها قيمة. لذلك سيتم تشغيل الكود التالي بدون أخطاء. لأنه بهذه الطريقة ، يمكن للمجمع أن يحدد أن num سيكون لها قيمة – في وقت الترجمة – لذلك لا توجد أخطاء.

fn main() {
    let num:i32;
    if true{
        num = 100;
    }
    else{
        num = 50;
    }
    println!("The value of num is: {}", num);
}
The value of num is: 100

ثبات المتغيرات

من المفيد أيضًا ملاحظة أن المتغيرات في Rust غير قابلة للتغيير افتراضيًا. هذا يعني بصفتك مطورًا ، لا داعي للقلق بشأن الكتابة غير المقصودة لقيمة متغير معين. هذا مثال:

fn main() {
    let num1 = 10;
    num1 = 5;
    println!("The value of num1 is: {}", num1);
}

نظرًا لتهيئة num1 إلى 10 ، عند محاولة تعيين قيمة لها بقيمة 5 ، تظهر رسالة خطأ تقول “لا يمكن التخصيص مرتين للمتغير غير القابل للتغيير num1”.

error[E0384]: cannot assign twice to immutable variable `num1`
 --> src/main.rs:3:5
  |
2 |     let num1 = 10;
  |         ----
  |         |
  |         first assignment to `num1`
  |         help: consider making this binding mutable: `mut num1`
3 |     num1 = 5;
  |     ^^^^^^^^ cannot assign twice to immutable variable

الملكية والاقتراض

الملكية تضمن سلامة الذاكرة. من الناحية الوظيفية ، يمكن تلخيص الملكية في Rust على النحو التالي:

  9 خيارات للإضاءة الخلفية للتلفزيون لتغيير تجربة مشاهدة الفيلم والمشاهدة

يجب أن يكون لكل كائن مالك واحد فقط. إذا خرج المالك عن النطاق ، فسيتم إسقاط الكائن.

لنأخذ مثالاً بسيطًا. هنا ، نقوم بتهيئة سلسلة str1 ثم نقل قيمتها إلى str2. نظرًا لأن أي كائن يمكن أن يكون له مالك واحد فقط ، يتم إسقاط الكائن str1 بمجرد نقل قيمته إلى str2.

fn main() {
    let str1 = String::from("Rust");
    let str2 = str1;
    println!("The value of str1 is: {}", str1);
}
error[E0382]: borrow of moved value: `str1`
 --> src/main.rs:4:42
  |
2 |     let str1 = String::from("Rust");
  |         ---- move occurs because `str1` has type `String`, which does not implement the `Copy` trait
3 |     let str2 = str1;
  |                ---- value moved here
4 |     println!("The value of str1 is: {}", str1);
  |                                          ^^^^ value borrowed here after move

في حين أن هذا يبدو بديهيًا ، لفهم وتقدير كيفية عمل الملكية بشكل أفضل ، من المفيد تعلم مفاهيم الاقتراض والمراجع.

تطوير سريع

حتى الآن ، ناقشنا العديد من الميزات المفيدة للغة برمجة Rust. لمراجعة القليل:

  • تم تحسين الصدأ من أجل السرعة والسلامة.
  • يأتي مع أداة مدمجة لإدارة الحزم ويبني نظامًا.
  • كما أن لديها مكتبة قياسية غنية.

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

تطوير عبر المنصات

مع Rust ، يمكنك اختيار التطوير على منصة من اختيارك. يدعم Rust الأنظمة الأساسية الأكثر شيوعًا: Linux و MacOS و Windows.

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

يقطع المجتمع الداعم شوطًا طويلاً في تبسيط رحلة التعلم الخاصة بك. لدى Rust قاعدة مستخدمين ضخمة تنمو فقط مع مرور كل عام.

تشير شعبية Rust في استطلاع StackOverflow للمطورين إلى وجود مجتمع كبير من المستخدمين ، مع وجود الكثير من المطورين ذوي الخبرة على استعداد لمشاركة معارفهم وخبراتهم.

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

تعلم الموارد لتبدأ مع الصدأ

يسرد هذا القسم بعض الموارد المفيدة لمساعدتك على البدء في التعامل مع Rust. هذه ليست قائمة شاملة ولكنها تتضمن بعض البرامج التعليمية والدورات والكتب الموصى بها لمساعدتك في رحلة التعلم الخاصة بك.

# 1. الصدأ بالمثال

سيعلمك Rust By Example أساسيات Rust والمكتبات القياسية من خلال سلسلة من الأمثلة التي يمكنك ترميزها في محرر عبر الإنترنت.

تشمل الموضوعات التي يتم تناولها الصناديق والبضائع: أداة إدارة الحزم الخاصة بالصدأ والأدوية والسمات ومعالجة الأخطاء وغير ذلك الكثير.

# 2. الصدأ

Rustlings هو مصدر تعليمي رسمي آخر للغة برمجة Rust. إنه مشابه لـ Rust بالقدوة. ومع ذلك ، فإنه يتطلب منك إعداد بيئة التطوير المحلية الخاصة بك ، واستنساخ مثال الريبو ، وحل المشكلات البسيطة لتعلم هذه المفاهيم.

# 3. مسار الصدأ التمرين

يحتوي Rust Track on Exercism على أكثر من 100 تمرين لمساعدتك على تعلم واختبار فهمك لمرض الصدأ. التمرين عبارة عن منصة مجانية حيث يمكنك الحصول على إرشاد من قبل مبرمجين ذوي خبرة بالإضافة إلى ترميز طريقك من خلال التدريبات.

# 4. دورة تحطم الصدأ النهائي

تغطي دورة Ultimate Rust Crash Course التي يدرسها Nathan Stocks على Udemy ما يلي:

  • أساسيات برمجة الصدأ
  • نظام الوحدة النمطية في الصدأ
  • أنواع البيانات وتدفق التحكم
  • الإحالة والاستعارة
  • الهياكل والصفات والمجموعات

# 5. Ultimate Rust 2: مفاهيم وسيطة

Ultimate Rust 2 هي دورة متابعة لدورة Ultimate Rust Crash Course وتغطي الموضوعات التالية:

  • الإغلاق
  • التكرارات
  • معالجة الأخطاء
  • اختبار الوحدة والتكامل
  • التسجيل وتعدد مؤشرات الترابط والقنوات

# 6. روست لانج: دليل المبتدئين الكامل 2023

دورة Udemy التي تدرسها كاتالين ستيفان هي دورة شاملة عن برمجة Rust. تشمل بعض الموضوعات التي يتم تناولها ما يلي:

  • أساسيات الصدأ
  • أنواع البيانات وهياكل التحكم
  • الوظائف والصفات
  • إدارة الذاكرة
  • التزامن

# 7. صدأ البرمجة: تطوير سريع وآمن للأنظمة

يعد Programming Rust من O’Reilly كتابًا شهيرًا لبرمجة Rust سيعلمك ما يلي:

  • أنواع البيانات الأساسية
  • الملكية والاقتراض
  • البرمجة غير المتزامنة
  • تطبيقات متعددة الخيوط سريعة
  • الإغلاق ، التكرارات
  • المجموعات

# 8. لغة البرمجة Rust ، الإصدار الثاني

تم تأليف لغة برمجة Rust بواسطة مساهمين مشهورين في مجتمع Rust. يغطي هذا الكتاب كل ما تحتاج لمعرفته حول Rust ، بما في ذلك:

  • الملكية والاقتراض
  • علم الوراثة والصفات
  • المؤشرات الذكية ، تعدد الخيوط
  • الاختبار ومعالجة الخطأ

# 9. الدليل المرجعي الكامل لبرمجة الصدأ

يغطي الدليل المرجعي الكامل لبرمجة الصدأ من Packt ما يلي:

  • تنفيذ هياكل البيانات في Rust
  • كتابة مكونات قابلة لإعادة الاستخدام وقابلة للاختبار في الصدأ
  • تصميم خوارزمية التطبيقات متعددة مؤشرات الترابط وتصميم
  • تطبيقات Rust في WebAssembly والشبكات وتطبيقات سطر الأوامر

# 10. مشاريع إبداعية لمبرمجي الصدأ

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

  • بناء خدمات ويب مريحة
  • ألعاب ثنائية الأبعاد مع
  • تطوير تطبيقات الويب باستخدام WebAssembly
  • محاكيات لغة الآلة
  • و اكثر!

استنتاج

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

كخطوة تالية ، يمكنك اختيار واحد أو أكثر من موارد التعلم المذكورة لالتقاط أساسيات Rust. برمجة صدأ سعيدة!

يمكنك أيضًا استكشاف بعض أفضل مزودي خدمة استضافة Rust.