Hacker News

لقد قمنا بربط لغة C++ أحادية الترابط مع Rust متعدد الخيوط

لقد قمنا بربط لغة C++ أحادية الترابط مع Rust متعدد الخيوط يقدم هذا التحليل الشامل للواجهات فحصًا تفصيليًا — Mewayz Business OS.

1 دقيقة قراءة

Mewayz Team

Editorial Team

Hacker News

إليك مشاركة مدونة SEO الكاملة:

لقد قمنا بربط لغة C++ أحادية الخيوط مع الصدأ متعدد الخيوط

إن ربط كود C++ أحادي الترابط مع Rust متعدد الخيوط ليس ممكنًا فحسب، بل إنه أحد أكثر الطرق العملية لتحديث الأنظمة القديمة دون إعادة كتابة كاملة. في Mewayz، تعاملنا مع هذا التحدي بالتحديد عندما قمنا بتوسيع نطاق نظام التشغيل التجاري المكون من 207 وحدة لخدمة 138000 مستخدم، وقد غيرت النتائج بشكل أساسي طريقة تفكيرنا في قابلية التشغيل البيني للأنظمة.

لماذا تقوم بربط لغة C++ أحادية الترابط مع الصدأ متعدد الخيوط؟

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

في حالتنا، كانت وحدات منطق الأعمال الأساسية تعمل بشكل موثوق في لغة C++ أحادية الترابط لسنوات. لقد تعاملوا مع معالجة المهام المتسلسلة وإنشاء المستندات والحسابات المالية. ولكن مع نمو قاعدة مستخدمينا لتتجاوز 100 ألف، كنا بحاجة إلى معالجة متوازية للبيانات، ومعالجة متزامنة لواجهة برمجة التطبيقات (API)، وإدارة الحالة المشتركة الآمنة. أعطتنا سمات الإرسال والمزامنة الخاصة بـ Rust ضمانات التزامن في وقت الترجمة والتي لا يمكن لـ C++ تقديمها بدون تدقيق يدوي شامل.

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

كيف تعمل حدود المؤسسات المالية الأجنبية فعليًا؟

تعمل واجهة الوظائف الخارجية (FFI) بين C++ وRust من خلال توقيعات الوظائف المتوافقة مع C. تعرض كتل "C" الخارجية لـ Rust الوظائف التي يمكن لـ C++ الاتصال بها مباشرة، والعكس صحيح. يظهر التحدي الحاسم عندما يحتاج وقت تشغيل Rust متعدد الخيوط إلى استدعاء تعليمات برمجية C++ أحادية الترابط بأمان.

لقد حللنا هذه المشكلة باستخدام بنية مخصصة:

منفذ تنفيذ C++ مقيد بمؤشر ترابط: يتم توجيه جميع مكالمات C++ عبر مؤشر ترابط واحد مخصص باستخدام قناة لتمرير الرسائل، مما يضمن عدم انتهاك الثابت المفرد مطلقًا.

💡 هل تعلم؟

Mewayz تحل محل 8+ أدوات أعمال في منصة واحدة

CRM · الفواتير · الموارد البشرية · المشاريع · الحجوزات · التجارة الإلكترونية · نقطة البيع · التحليلات. خطة مجانية للأبد متاحة.

ابدأ مجانًا →

طبقة جسر Rust غير المتزامن: ترسل مهام Tokio العمل إلى منفذ C++ وتنتظر النتائج من خلال قنوات Oneshot، مع الحفاظ على جانب Rust غير متزامن تمامًا.

إدارة المؤشر غير الشفاف: يتم تغليف كائنات C++ في بنيات Rust التي تنفذ Drop للتنظيف الحتمي، مما يمنع تسرب الذاكرة عبر حدود اللغة.

التسلسل عند الحدود: يتم إجراء تسلسل لهياكل البيانات المعقدة إلى FlatBuffers في طبقة FFI، مما يؤدي إلى تجنب مطابقة تخطيط البنية الهشة وتمكين التطور المستقل لكل جانب.

عزل الذعر: يقوم ملف Catch_unwind الخاص بـ Rust بتغليف كل نقطة دخول لـ FFI بحيث لا يتجاوز الذعر أبدًا حدود اللغة، وهو ما قد يكون سلوكًا غير محدد.

لقد منحنا هذا النمط إنتاجية Rust متعددة الخيوط مع موثوقية منطق C++ المثبت - دون إعادة كتابة سطر واحد من قواعد العمل الأصلية.

ما هي أكبر المزالق التي يجب تجنبها؟

الخطأ الأكثر خطورة هو افتراض أن كود C++ آمن لسلسلة الرسائل عندما لا يكون كذلك. ستتسبب الحالة العامة والمتغيرات الثابتة واستدعاءات المكتبة غير المعادة في حدوث سباقات بيانات لا يستطيع مترجم Rust اكتشافها عبر حدود FFI. تتوقف ضمانات سلامة Rust عند الكتلة غير الآمنة - كل ما بداخلها هو مسؤوليتك.

الفكرة الرئيسية: يضمن Rust سلامة الذاكرة ضمن التعليمات البرمجية الخاصة به، ولكن في اللحظة التي تعبر فيها حدود FFI إلى C++، فإنك ترث كل مشكلة تتعلق بسلامة الخيوط الموجودة في C++. إن البنية المحيطة بهذه الحدود مهمة أكثر من الكود الموجود على جانبيها.

المأزق الشائع الآخر هو إدارة مدى الحياة. لا تشارك كائنات C++ في مدقق الاقتراض الخاص بـ Rust. إذا أسقط Rust مرجعًا بينما لا يزال C++ يحمل المؤشر، فستحصل على أخطاء بعد الاستخدام مجانًا يصعب تشخيصها بشدة. لقد عالجنا هذه المشكلة من خلال فرض دلالات ملكية صارمة: تكون كائنات C++ دائمًا مملوكة لمجمع Rust واحد فقط، ويمر الوصول المشترك من خلال العد المرجعي المستند إلى Arc على جانب Rust.

الأداء الحكيم، باستثناء

Ready to Simplify Your Operations?

Whether you need CRM, invoicing, HR, or all 207 modules — Mewayz has you covered. 138K+ businesses already made the switch.

Get Started Free →

جرب Mewayz مجانًا

منصة شاملة لإدارة العلاقات والعملاء، والفواتير، والمشاريع، والموارد البشرية، والمزيد. لا حاجة لبطاقة ائتمان.

الدليل ذو الصلة

دليل إدارة الموارد البشرية →

إدارة فريقك بفعالية: ملفات الموظفين، وإدارة الإجازات، وكشوف المرتبات، وتقييمات الأداء.

ابدأ في إدارة عملك بشكل أكثر ذكاءً اليوم.

انضم إلى 30,000+ شركة. خطة مجانية للأبد · لا حاجة لبطاقة ائتمان.

وجدت هذا مفيدا؟ أنشرها.

هل أنت مستعد لوضع هذا موضع التنفيذ؟

انضم إلى 30,000+ شركة تستخدم ميويز. خطة مجانية دائمًا — لا حاجة لبطاقة ائتمان.

ابدأ التجربة المجانية →

هل أنت مستعد لاتخاذ إجراء؟

ابدأ تجربة Mewayz المجانية اليوم

منصة أعمال شاملة. لا حاجة لبطاقة ائتمان.

ابدأ مجانًا →

تجربة مجانية 14 يومًا · لا توجد بطاقة ائتمان · إلغاء في أي وقت