لماذا يجب عليك استخدام لغة Ada لبرمجة نظامك



وُلدت لغة برمجة Ada في منتصف سبعينيات القرن الماضي عندما قررت وزارة الدفاع الأمريكية ووزارة الدفاع البريطانية استبدال مئات لغات البرمجة المتخصصة لأنظمة الحوسبة المدمجة ، والتي كانت تستخدم بشكل متزايد في المشاريع العسكرية. تم تطوير لغة Ada بطريقة كانت هي اللغة الوحيدة القادرة على العمل على جميع هذه الأنظمة المدمجة ، وفي الوقت نفسه توفير الموثوقية والأداء بمستوى ليس أسوأ من الأنظمة المتخصصة.

بعد التحديث من عام 1995 ، تم تكييف اللغة لأنظمة الأغراض العامة ، مضيفة البرمجة الموجهة للكائنات ، دون إغفال القيم الأساسية - الموثوقية وسهولة الدعم والكفاءة. اليوم ، البرامجيات المكتوبة في Ada لا تشكل أساسًا للمعدات العسكرية فحسب ، بل أيضًا للمشاريع التجارية في مجال أنظمة الطيران ومراقبة الحركة الجوية. تتحكم شفرة Ada في صواريخ مثل أريان 4 و 5 والعديد من الأقمار الصناعية وأنظمة أخرى لا حصر لها يمكن أن يكون لانقطاعاتها الصغيرة عواقب وخيمة.

ربما Ada مناسب للاستخدام في مشروعك المضمن التالي.

تخطيط الجودة العسكرية


لاختيار لغة برمجة جديدة ، قامت وزارة الدفاع بتجميع " مجموعة عمل لغة عالية الترتيب (HOLWG)] ، مؤلفة من خبراء عسكريين وعلميين كانت مهمتهم تجميع قائمة من الاستفسارات واختيار لغات مرشحة. ونتيجة لذلك ، ما يسمى " طلبات ستيلمان ":

النقاط الرئيسية للطلبات هي:

  • سير عمل مرن للأغراض العامة يتكيف مع احتياجات تطبيقات الحوسبة المضمنة.
  • الموثوقية. يجب أن تسهل اللغة تصميم وتطوير برامج موثوقة.
  • سهولة الدعم. يجب أن تكون الشفرة قابلة للقراءة ، وحلول البرمجيات واضحة.
  • سهولة إنتاج كود فعال. يجب أن يكون من الممكن تحديد التصاميم غير الفعالة بسهولة.
  • لا تعقيد لا لزوم لها. يجب أن تكون البنية الدلالية متسقة وتقلل من عدد المفاهيم.
  • الاستقلال عن السيارة. لا ينبغي ربط اللغة بأي تفاصيل عن نظام التشغيل أو الجهاز.
  • التعريف الكامل. يجب تحديد جميع أجزاء اللغة بشكل كامل وصريح.

وخلص التقرير برأي مفاده أن خط الدفاع الأول ضد مشاكل البرامج هو منع المبرمجين من ارتكاب الأخطاء. من خلال القضاء على إمكانية ارتكاب خطأ خفي ، على سبيل المثال ، من خلال تحويلات ضمنية أو غيرها من المنشآت الخطرة ، نجعل الكود أكثر أمانًا تلقائيًا ونيسر دعمه.

وخلصت المجموعة إلى أنه على الرغم من أن أي من اللغات الموجودة في ذلك الوقت كانت مناسبة لاحتياجات وزارة الدفاع ، إلا أنه كان من الواقعي إنشاء لغة جديدة تناسب جميع هذه القضايا. أربعة مصممين حصلوا عليها. اختارت عملية الاختيار الوسيطة طريقتي العمل الأكثر ملاءمة ، ونتيجة لذلك ، فازت لغة واحدة فقط بالمسابقة وحصلت على اسم " Ada ".



المدمج في الحماية الافتراضية


نظام الكتابة في Hell ليس فقط صارمًا - بل يُسمى أحيانًا super -rict لأنه لا يسمح بأي تحويل ضمني للنوع. خذ على سبيل المثال مقتطف شفرة C:

typedef uint32_t myInt; myInt foo = 42; uint32_t bar = foo; 

هذا رمز صالح ؛ سوف يجمع ويبدأ وينتج نتيجة واضحة تشير إلى إجابة السؤال الرئيسي عن الحياة والكون وكل ذلك. في الجحيم ، لن ينجح هذا:

 type MyInt is Integer; foo: MyInt; bar: Integer; foo := 42; bar := foo; 

سيقوم المترجم بإلقاء خطأ ، لأن Integer و MyInt ليسا نفس الشيء. الميزة الرئيسية لهذا النهج هي أنه إذا قام المبرمج بعد ذلك بتغيير تعريف النوع ، فلن تفجر الآلاف من تحويلات النوع الضمني في جميع أنحاء قاعدة الكود البرنامج. بدلاً من ذلك ، يجب صب الأنواع بشكل صريح - وهذا يعزز الكود الجيد ، ويمنع الخلط بين الأنواع "المتشابهة إلى حد ما".

يمكن لأي مبرمج عالق في مستنقع من مزيج من التعريفات القياسية للأنواع C و Linux و Win32 تقدير عدم الحاجة إلى البحث خلال صفحات لا تعد ولا تحصى من الوثائق ورمز غير منسق بشكل جيد لفهم أي typedef أو الماكرو يحتوي على تعريف حقيقي لشيء فقط التي منعت تجميع أو الزحف خارج أثناء تصحيح الأخطاء.



يضيف Ada طبقات إضافية من الحماية في عمليات الفحص في مراحل التجميع والإطلاق. في Ada ، يجب على المبرمج تحديد عبارات الإغلاق للكتل والحدود التي يجب أن تتناسب معها قيمة المتغير. لا يحدد Ada الأنواع القياسية مثل int أو float ، لكنه يتطلب من المبرمج إنشاء أنواع بنطاق محدد من البداية. ينطبق هذا أيضًا على الأوتار - باستثناء السلاسل غير المحدودة ، يكون طول كل السلاسل ثابتًا.

في مرحلة التشغيل ، يمكنك التحقق من الأخطاء مثل الوصول غير الصحيح إلى الذاكرة ، وتجاوزات المخزن المؤقت ، وتجاوز الحدود المحددة ، والأخطاء errors 1 ، والوصول إلى الصفيف. يمكن بعد ذلك معالجتها بأمان ، بدلاً من إسقاط التطبيق بأكمله.

يقوم Ada بتنفيذ نموذج لأنواع المراجع بدلاً من المؤشرات ذات المستوى المنخفض. تتم معالجة كل نوع مرجعي بواسطة تجمع الذاكرة ، إما بشكل افتراضي ، أو بواسطة مبرمج معين ، إذا لزم الأمر ، للعمل مع تطبيقات ذاكرة NUMA الأكثر غرابة. لا يتعين على مبرمج الوصول إلى الذاكرة مباشرة ؛ بل يجب عليه استخدام معالج تجمع الذاكرة.

أخيرًا ، يقرر برنامج التحويل البرمجي أو البرنامج في وقت التشغيل كيفية تمرير البيانات إلى أو من الوظيفة. وعلى الرغم من أنه من الضروري الإشارة إلى اتجاه إرسال كل معلمة ("في" أو "خارج" أو "في الخارج") ، فإن القرار النهائي حول ما إذا كان يتم نقل البيانات من خلال السجلات ، أو أكوام أو عن طريق المرجع من قبل المترجم أو البرنامج في وقت التشغيل ، ولكن ليس مبرمج. هذا يمنع مشاكل تجاوز سعة مكدس الذاكرة المؤقتة.

ملف تعريف Ravenscar ولهجة SPARK هي مجموعات فرعية من Ada ، مع التركيز على العقود. مع مرور الوقت ، تم نقل ميزات هذه المجموعات الفرعية إلى مواصفات اللغة الرئيسية.

ادا البرمجة اليوم


وضعت ANSI مواصفات Ada 83 في عام 1983. ثم تم إصدار Intel 80286 للتو ، وكان عمر Motorola 68000 أربعة أعوام فقط. لقد كان فجر أجهزة الكمبيوتر المنزلية ، بالإضافة إلى انتقال أخرق من السبعينيات إلى الثمانينيات ، عندما بدأت شعبية المتحكمات الدقيقة في النمو. تخيل أن متحكم Intel 8051 و EPROM 4Kb المذهل و 128 B من ذاكرة الوصول العشوائي.



وحدات التحكم الدقيقة التي تحظى بشعبية كبيرة اليوم هي أقوى بعدة مرات من تلك التي كانت في عام 1983. يمكنك أن تأخذ أي ARM ، AVR ، RISC-V ، إلخ. (أو مجموعة Lego Mindstorms NXT) وابدأ التطوير لها باستخدام نفس الأدوات المستندة إلى C. وليس من المستغرب أن يقوم برنامج التحويل البرمجي GNAT Ada الشهير على أساس دول مجلس التعاون الخليجي. أيضا قيد التطوير داخل مشروع DragonEgg هناك أدوات تعتمد على LLVM.

هناك إصداران من أدوات Ada المستندة إلى دول مجلس التعاون الخليجي. يتم دعم خيار AdaCore تجاريًا ، ولكن له خصائصه الخاصة. يعد خيار Free Software Foundation مجانيًا بشكل طبيعي ويمكن مقارنته في وظائفه مع AdaCore.

لبداية سهلة ، استخدم إما GNAT Programming Studio IDE (GPS) ، المرفق مع AdaCore ( نسخة على Github ) ، أو اكتب الرمز في محرر نصوص وقم بترجمته يدويًا ، أو باستخدام Makefiles. تعتبر مجموعة الأدوات هنا أكثر تعقيدًا من C أو C ++ ، ولكن التطوير سهل بواسطة أداة gnatmake ، التي تشمل جميع الأدوات ، وتعمل مثل دول مجلس التعاون الخليجي تقريبًا.



مثال على مشروع صغير ولكنه غير تافه في Ada كتبه خادمك المتواضع كمحلل للجدل في سطر الأوامر. ستجد هناك Makefile في مجلد ada / project ، حيث يتم تعريف المجلدات حيث يمكنك العثور على ملفات مواصفات الحزمة (.ads) والحزم نفسها (.adb).

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

إلى أين أذهب بعد ذلك


بعد تنزيل مجموعة أدوات GNAT ، وبدء تشغيل GPS أو Vim / Emacs ، ولفترة من النظر إلى المؤشر الوامض على صفحة فارغة ، يمكنك التفكير في مكان البدء. لحسن الحظ ، قمنا مؤخراً بتغطية مشروع قائم على Ada باستخدام PicoRV32 RISC-V. ويستخدم ICE40LP8K CPLD الشهير ، والذي تدعمه FPGAs مفتوحة المصدر مثل Yosys.



من حيث الوثائق ، هناك مقالات تمهيدية للمبتدئين تهدف إلى مطوري Java و C ++ ، ومرجع AdaCore ، ومرجع WikiBooks ، وبالطبع وثائق برمجة Ada 2012 . ربما تكون هذه هي المراجع الأكثر شمولاً ، باستثناء دليل المراجع بلغة 945 صفحة Ada 2012 Language Reference (LRM).

لغة Ada ، وإن كانت نادرة إلى حد ما لعشاق البرمجة ، هي لغة مفتوحة تمامًا مع أدوات تطوير موثوقة مع دعم تجاري ، وتستخدم لإنشاء برامج لكل شيء من الصواريخ الباليستية العابرة للقارات و F-15 إلى البرامج الثابتة للأجهزة الطبية. على الرغم من أن هذه لغة معقدة إلى حد ما ، إذا تجاوزت الحدود الأساسية ، فمن المؤكد أنه يجب تضمينها في قائمة اللغات التي استخدمتها في مشاريعك - حتى تجعل سيرتك الذاتية تبدو أكثر برودة.

Source: https://habr.com/ru/post/ar469671/


All Articles