Rust كلصق عالمي: لماذا التكامل مع اللغات الأخرى هو قوة خارقة
\n\nهل حلمت يومًا بكتابة وحدة عالية الأداء بلغة Rust، لكنك لم ترغب في إعادة كتابة المشروع بأكمله بلغة Python؟ أو ربما تحتاج إلى إضافة عمل آمن مع الذاكرة إلى مكتبة C قديمة؟ مرحبًا بك في عالم تكامل Rust مع اللغات الأخرى. هنا لا تعمل Rust كلغة مستقلة فحسب، بل كـ"لصق" قوي يربط الأنظمة البيئية.
\n\nفي pythonlib.ru، نتحدث غالبًا عن Python، لكننا اليوم سنقوم بمنعطف رائع. Rust ليست فقط السرعة والأمان، بل أيضًا المرونة المذهلة. إنها قادرة على التكامل مع Python عبر PyO3، واستدعاء دوال C عبر FFI، وحتى الترجمة إلى WebAssembly للمتصفح. في هذه المقالة، سنحلل ثلاثة سيناريوهات رئيسية، ونعرض كودًا حقيقيًا، ونقدم نصائح عملية. هيا بنا!
\n\nلماذا دمج Rust مع اللغات الأخرى؟
\n\nتخيل: لديك مشروع ضخم بلغة Python يتباطأ بسبب الحلقات التكرارية. يمكنك إعادة كتابة الجزء الحرج بلغة Rust، والحصول على زيادة في السرعة تتراوح بين 10 و100 مرة دون لمس بقية الكود. أو تعمل مع مكتبة C قديمة وتريد تغليفها بواجهة Rust آمنة. Rust مثالية لهذا بفضل واجهة الدوال الأجنبية (FFI).
\n\nالأسباب الرئيسية للتكامل:
\n- \n
- الأداء — Rust أسرع من Python وJavaScript في المهام الحسابية. \n
- الأمان — Rust تحمي من تسرب الذاكرة وسباقات البيانات، وهو أمر بالغ الأهمية لـ C/C++. \n
- النظام البيئي — تحصل على إمكانية الوصول إلى مكتبات Rust دون مغادرة لغتك الأم. \n
- WebAssembly — كود Rust يعمل في المتصفح بسرعة شبه أصلية. \n
تكامل Rust مع Python عبر PyO3
\n\nPyO3 هي الطريقة الأكثر شيوعًا لربط Rust وPython. تكتب دوالًا بلغة Rust، وتجمعها في وحدة أصلية (.so أو .pyd) وتستوردها كوحدة Python عادية. يبدو سحريًا؟ في الواقع، الأمر بسيط.
\n\nالتثبيت والإعداد
\nللبدء، قم بتثبيت maturin — أداة لبناء إضافات Rust الخاصة بـ Python:
pip install maturin\nأنشئ مشروعًا جديدًا:
\nmaturin init --bindings pyo3\nسينشئ هذا هيكلًا مع ملف Cargo.toml وملف lib.rs.
مثال: تسريع العمليات الحسابية
\nلنفترض أننا بحاجة إلى حساب أرقام فيبوناتشي بسرعة. في Python قد يكون هذا بطيئًا، أما في Rust فهو سريع كالبرق. إليك الكود في src/lib.rs:
use pyo3::prelude::*;\n\n#[pyfunction]\nfn fibonacci(n: u32) -> u64 {\n match n {\n 0 => 0,\n 1 => 1,\n _ => fibonacci(n - 1) + fibonacci(n - 2),\n }\n}\n\n#[pymodule]\nfn rust_fib(_py: Python, m: &PyModule) -> PyResult<()> {\n m.add_function(wrap_pyfunction!(fibonacci, m)?)?;\n Ok(())\n}\nقم بتجميع الوحدة:
\nmaturin develop\nالآن في Python:
\nimport rust_fib\nprint(rust_fib.fibonacci(40)) # 102334155\nقارن السرعة مع Python الخالص — سيكون الفرق بعشرات المرات! هذا مثال مثالي على تكامل Rust مع Python للتحسين.
\n\nنقل البيانات المعقدة
\nPyO3 لا تدعم الأرقام فقط، بل أيضًا القوائم والقواميس وحتى مصفوفات numpy. على سبيل المثال، يمكنك تمرير قائمة ومعالجتها في Rust:
\n#[pyfunction]\nfn sum_list(numbers: Vec<i32>) -> i32 {\n numbers.iter().sum()\n}\nفي Python:
\nprint(rust_fib.sum_list([1, 2, 3, 4])) # 10\nهذا يفتح إمكانيات هائلة لـ تكامل Rust مع Python في علم البيانات وتطوير الويب.
\n\nRust وC: FFI الكلاسيكي
\n\nتم إنشاء Rust كبديل لـ C/C++، لذا فإن FFI Rust هو أسلوبها الأصلي