ملاحظة من المترجم: الصدأ هي لغة برمجة شابة نسبيا ، والأمثلة العملية هي دائما مثيرة للاهتمام في هذه المرحلة من التنمية. من المعروف أن Intel و Dropbox و Amazon و Facebook و Google وغيرها يستخدمون Rust في مشاريعهم. حول استخدام Rust في المشروع من Microsoft كان معروفًا ، ولكن لم تكن هناك تفاصيل ، وربما هذا هو أول منشور رسمي حول استخدام Rust في Microsoft. (يتم توفير التفاصيل الفنية للمنتج نفسه "كما هي" ، حدد التفاصيل على موقع الشركة على الويب)Azure IoT Edge هو مشروع برمجي مفتوح المصدر تم إنشاؤه بواسطة فريق تطوير Azure IoT في Microsoft. Azure IoT Edge "هي خدمة إنترنت الأشياء تستند إلى Internet of Things Center. هذه الخدمة مخصصة للعملاء الذين يحتاجون إلى تحليل البيانات ليس في السحابة ، ولكن على الأجهزة المتطورة. نتيجة نقل جزء من عبء العمل إلى منطقة الحدود ، تقضي الأجهزة وقتًا أقل في إرسال الرسائل إلى السحابة والاستجابة بسرعة أكبر للأحداث ".
[مأخوذة من الوثائق الرسمية باللغة الروسية (1) - تقريبا. الترجمة]يشرح هذا المنشور بعض الأسباب وراء اختيارنا Rust باعتبارها لغة البرمجة لتنفيذ مكون Security Daemon في المنتج.
يقوم برنامج الحماية الخفي بتحميل وقت تشغيل Azure IoT Edge. يعمل كوسيط للتواصل بين وقت تشغيل Azure IoT Edge والعديد من خدمات المضيف مثل وقت تشغيل الحاوية وأجهزة تشفير الأجهزة Security Security Modules (HSM) و Trusted Platform Modules (TPM).
اختيار المكدس الفني لـ Security Daemon
عندما بدأنا العمل على Security Daemon (يشار إليها فيما يلي باسم
edgelet ) ، حددنا أهداف التصميم الرئيسية التالية:
- يجب أن يكون edgelet مكونًا أصليًا لا يتطلب وقت تشغيل ، مثل .NET CLR.
- نظرًا لأن edgelet ستعمل كقناة للوصول إلى جهاز HSM / TPM على الجهاز ، يجب أن تكون آمنة.
- سيتفاعل edgelet مع جهاز HSM / TPM من خلال الواجهة الثنائية للتطبيق C (ABI) ، لذلك يجب أن يكون تحميل الكائنات / DLL الشائعة ووظائف الاستدعاء C أمرًا بسيطًا.
وفقًا لهذه النقاط ، كان علينا اختيار إحدى لغات البرمجة التالية: C أو C ++ ، أو Rust ، والتي يتم تجميعها في الكود الأصلي. عدم الرغبة في تحمل النفقات العامة لجامع القمامة يعني أن Go لم تكن مناسبة لنا. تعني متطلبات الأمان للبرنامج الخفي أننا نريد تجنب أخطاء الذاكرة والتزامن. كما اتضح ، في ضوء هذه القيود ، يعد Rust مثاليًا بالنسبة لنا. في منشور سابق (2) على هذه المدونة
[وهذا يعني أن مدونة
Microsoft Security Response Center - translation] ، تم النظر في مزايا اختيار Rust باعتبارها لغة البرمجة.
ماذا احببنا
قبل أن نصدر Azure IoT Edge للجمهور ، قمنا بتعيين مزود أمان خارجي لاختبار برنامج الاختراق. حقيقة أنهم لم يعثروا على أي مشكلة في أمان قاعدة الكود في Rust كانت بالنسبة لنا تأكيدًا على صحة اختيارنا. منذ البداية ، قررنا أن المترجم سيعامل جميع التحذيرات على أنها أخطاء ، بما في ذلك الأخطاء التي تم التحقق منها بواسطة clippy. يرفض نظام التكامل المستمر الخاص بنا مجموعة من الطلبات التي لا تتجاوز نظام rustfmt ، مما يضمن تنسيقًا ثابتًا للكود في جميع أنحاء قاعدة الشفرة.
عملية تحديث مترجم Rust and Cargo
[نظام التجميع وإدارة الحزم - تقريبا. مترجم] العمل بسلاسة في أزور تقنيات عمليات الحافة. تعتبر الترقية إلى إصدار جديد من المحول البرمجي دائمًا عملًا غير مؤلم.
قبول الصدأ
والخطوة التالية هي تعلم اللغة. بالمقارنة مع لغات البرمجة الشائعة الأخرى ، يتمتع Rust بحدود دخول عالية إلى حد ما ، وخشينا من تأثير هذه الدراسة على الجدول الزمني للمشروع. كان لدى فريقنا مطورون ذوو خبرة في C و C ++ و C # و Java ، ولحسن الحظ بالنسبة لنا ، كان هناك أيضًا العديد من المطورين الذين كانوا متحمسين جدًا لل Rust!
لقد توصلنا إلى ورش ورش عملنا فيها على فريق من تلك الأجزاء من اللغة التي ، في تجربتنا ، كانت صعبة الفهم. أثبتت هذه الاستهلاكات الوقت لتكون مفيدة للغاية. وجدنا أن تعلم لغة انتهى به الأمر لا يمثل مشكلة كبيرة كما تخيلنا.
لمدة 4-6 أسابيع ، قدم كل عضو في الفريق تقريبًا مساهمة تافهة في شفرة المصدر في Rust.
تعقيد
على الرغم من أن تجربتنا الأولى في إطلاق إنتاج باستخدام منتج يستند إلى نظام الصدأ في Microsoft كانت ناجحة تمامًا ، إلا أننا لاحظنا العديد من النقاط الصعبة:
- لا يزال النظام البيئي الصدأ جديدًا نسبيًا مقارنة ببعض اللغات الأكثر رسوخًا. هذا يعني أنه كان علينا غالبًا إنشاء أجزاء من البنية التحتية التي ربما لن نحتاج إلى إنشاءها.
- تبين أن تحليل رسائل خطأ برنامج التحويل البرمجي في بعض الأحيان يكون معقدًا للغاية ، خاصةً عند العمل باستخدام تعليمة برمجية تستخدم بشكل كبير أدوات دمج من Tokio (3) [إطار غير متزامن لـ Rust] Futures أو std :: iter :: Iterator.
- الفرق التي يتم استخدامها لدعم أدوات التصحيح والتصحيح C # ورمز Java لم تجد نفس الدعم في Rust. كان ملحق VS Code Rust RLS غير مستقر في الممارسة.
- التحديات في تحليل سلسلة المستقبل طوكيو
- في بعض الأحيان ، لم يكن من السهل فرز الأنواع المعقدة التي لا محالة في سلاسل Combined Tokio Future.
ما التالي
قد يكون من العدل أن نلاحظ هنا أن Azure IoT متكامل تمامًا مع لغة برمجة Rust. منذ أن أصدرنا Azure IoT Edge ، ازداد استخدام Rust فقط. تتم كتابة العديد من مشاريع الخدمات السحابية التي يجري العمل عليها حاليًا بشكل نشط في Rust. إن الثالوث الذي يوفره Rust (أمان الذاكرة ، أمان سباق البيانات ، والأداء) مثالي لـ Azure IoT. نأمل أن يكون لدينا شيء آخر ليقوله حول هذا الموضوع في المستقبل!
راج وينجاليل ، المدير العام ، SWE ، منصة إنترنت الأشياءمراجع
(1)
docs.microsoft.com/en-us/azure/iot-edge(2)
msrc-blog.microsoft.com/2019/07/22/why-rust-for-safe-systems-programming(3)
tokio.rsمن أحد المترجمين: شكرًا للمساعدة في ترجمة
Legatus88 ،
Funkill ، مجموعة التلغراف باللغة الروسية Rust (rustlang_ru) ، KDPV
من هنا .