WebAssembly و Rust: ثنائي قوي لتطوير الويب الحديث

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

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

ابدأ الدورة

مقدمة: عندما لا يكفي JavaScript

\n\n

اعتاد الجميع على أن الإنترنت بأكمله يعتمد على JavaScript. إنه مرن، ويتسامح مع الأخطاء، ويعمل في كل مكان. ولكن هناك مهام تبدأ فيها حتى أكواد JS المحسّنة بالتباطؤ: معالجة الفيديو، العرض ثلاثي الأبعاد، الخوارزميات المعقدة، والألعاب. وهنا يظهر WebAssembly و Rust كثنائي يمنح تطبيقات الويب سرعة الكود الأصلي.

\n\n

في هذه المقالة، سنشرح ما هو WebAssembly، ولماذا يعتبر Rust مع Wasm أحد أفضل الخيارات، وكيفية كتابة أول وحدة Rust تعمل في المتصفح. المقالة مفيدة لكل من المبتدئين وأولئك الذين سمعوا عن Wasm Rust ولكنهم لا يعرفون من أين يبدأون.

\n\n

ما هو WebAssembly (Wasm)؟

\n\n

WebAssembly هو تنسيق تعليمات ثنائي يُنفَّذ في المتصفح بسرعة تقترب من السرعة الأصلية. ببساطة، هو "معالج افتراضي" منخفض المستوى للويب. يقوم المتصفح بتحميل ملف .wasm مضغوط وتنفيذه مباشرة، متجاوزًا مترجم JavaScript.

\n\n

الميزات الرئيسية لـ Wasm:

\n
    \n
  • أداء عالٍ — يتم تنفيذ الكود بسرعة تقريبًا مثل C++ أو Rust المُجمَّعة.
  • \n
  • الأمان — يعمل Wasm في بيئة معزولة (sandbox) مثل JS.
  • \n
  • الحجم الصغير — ملفات .wasm عادةً ما تكون أصغر بعدة مرات من كود JS المماثل.
  • \n
  • قابلية النقل — تعمل نفس الوحدة في جميع المتصفحات الحديثة.
  • \n
\n\n

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

\n\n

لماذا Rust بالتحديد لـ WebAssembly؟

\n\n

اختيار لغة التجميع إلى Wasm ليس حاسمًا. يمكنك استخدام C أو C++ أو Go أو حتى Python (عبر Pyodide). لكن Rust لـ WebAssembly أصبح المعيار الفعلي. لماذا؟

\n\n

1. أمان الذاكرة بدون جامع القمامة

\n

Rust هي لغة الأنظمة الوحيدة الشائعة التي تضمن أمان الذاكرة في مرحلة التجميع. على عكس C/C++، لن تحصل على segfault في وقت التشغيل. وغياب جامع القمامة (GC) يعني عدم وجود "تجميد" مفاجئ — مثالي لتطبيقات الوقت الفعلي.

\n\n

2. تكلفة صفرية للتجريدات

\n

تكتب كودًا عالي المستوى مع التكرارات والإغلاقات والسمات (traits)، لكن مترجم Rust يحوله إلى كود آلي لا يقل عن كود الأسمبلي المكتوب يدويًا. وهذا يعطي أداء C++ مع سهولة اللغات الحديثة.

\n\n

3. بيئة wasm-pack و wasm-bindgen

\n

أدوات تجميع Rust إلى Wasm أصبحت ناضجة جدًا. wasm-pack يبني المشروع، ويولد أغلفة JS، بل وينشر الحزمة في npm. wasm-bindgen يسمح بتمرير السلاسل والمصفوفات والكائنات بسهولة بين Rust و JavaScript.

\n\n

4. حجم ملف الإخراج الصغير

\n

يتم تجميع Rust إلى Wasm بدون بيئة تشغيل (runtime). تحصل على ملف ثنائي صغير جدًا. حتى مع المكتبة القياسية (عبر wasm-pack)، نادرًا ما يتجاوز الحجم 50-100 كيلوبايت للمهام الحقيقية.

\n\n

كيف يعمل هذا: كتابة أول وحدة Rust لـ Wasm

\n\n

لنقم بإنشاء وحدة بسيطة تقوم بتحويل الدرجات المئوية إلى فهرنهايت والعكس. سيظهر لك هذا السلسلة الكاملة: كود Rust → Wasm → استدعاء من JavaScript.

\n\n

الخطوة 1: تثبيت الأدوات

\n

ستحتاج إلى Rust (قم بتثبيته عبر rustup) و wasm-pack:

\n
curl https://sh.rustup.rs -sSf | sh\n# تثبيت wasm-pack\ncargo install wasm-pack
\n\n

الخطوة 2: إنشاء المشروع

\n
cargo new --lib temp-converter\ncd temp-converter
\n\n

افتح Cargo.toml وأضف:

\n
[lib]\ncrate-type = ["cdylib"]\n\n[dependencies]\nwasm-bindgen = "0.2"
\n\n

المدونات

توصيات الكتب