Rust كلصق: التكامل مع Python وC ولغات أخرى

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

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

ابدأ الدورة

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
\n\n

تكامل Rust مع Python عبر PyO3

\n\n

PyO3 هي الطريقة الأكثر شيوعًا لربط Rust وPython. تكتب دوالًا بلغة Rust، وتجمعها في وحدة أصلية (.so أو .pyd) وتستوردها كوحدة Python عادية. يبدو سحريًا؟ في الواقع، الأمر بسيط.

\n\n

التثبيت والإعداد

\n

للبدء، قم بتثبيت maturin — أداة لبناء إضافات Rust الخاصة بـ Python:

\n
pip install maturin
\n

أنشئ مشروعًا جديدًا:

\n
maturin init --bindings pyo3
\n

سينشئ هذا هيكلًا مع ملف Cargo.toml وملف lib.rs.

\n\n

مثال: تسريع العمليات الحسابية

\n

لنفترض أننا بحاجة إلى حساب أرقام فيبوناتشي بسرعة. في Python قد يكون هذا بطيئًا، أما في Rust فهو سريع كالبرق. إليك الكود في src/lib.rs:

\n
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

قم بتجميع الوحدة:

\n
maturin develop
\n

الآن في Python:

\n
import rust_fib\nprint(rust_fib.fibonacci(40))  # 102334155
\n

قارن السرعة مع Python الخالص — سيكون الفرق بعشرات المرات! هذا مثال مثالي على تكامل Rust مع Python للتحسين.

\n\n

نقل البيانات المعقدة

\n

PyO3 لا تدعم الأرقام فقط، بل أيضًا القوائم والقواميس وحتى مصفوفات numpy. على سبيل المثال، يمكنك تمرير قائمة ومعالجتها في Rust:

\n
#[pyfunction]\nfn sum_list(numbers: Vec<i32>) -> i32 {\n    numbers.iter().sum()\n}
\n

في Python:

\n
print(rust_fib.sum_list([1, 2, 3, 4]))  # 10
\n

هذا يفتح إمكانيات هائلة لـ تكامل Rust مع Python في علم البيانات وتطوير الويب.

\n\n

Rust وC: FFI الكلاسيكي

\n\n

تم إنشاء Rust كبديل لـ C/C++، لذا فإن FFI Rust هو أسلوبها الأصلي

المدونات

توصيات الكتب