ميركوري (لغة برمجة)

ميركوري هي لغة برمجة منطقية وظيفية مصممة للاستخدامات العملية. طُوّرت النسخة الأولى منها في قسم علوم الحاسوب بجامعة ملبورن ، على يد فيرغوس هندرسون وتوماس كونواي وزولتان سوموجي، تحت إشراف سوموجي، وصدرت في 8 أبريل 1995.

ميركوري هي لغة برمجة منطقية تصريحية بحتة . وهي مرتبطة بكل من برولوج وهاسكل . [ 2 ] تتميز بنظام أنواع قوي وثابت ومتعدد الأشكال ، ونظام أنماط وحتمية قوي.

يتوفر التطبيق الرسمي، وهو برنامج Melbourne Mercury Compiler، لمعظم أنظمة Unix والأنظمة الشبيهة بـ Unix ، بما في ذلك Linux و macOS و Windows .

ملخص

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

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

باستخدام المعلومات المُستقاة أثناء عملية الترجمة (مثل النوع والوضع)، عادةً ما تُنفَّذ البرامج المكتوبة بلغة ميركوري بسرعة أكبر بكثير من البرامج المكافئة المكتوبة بلغة برولوج. [ 3 ] [ 4 ] ويزعم مطوروها أن ميركوري هي أسرع لغة منطقية في العالم، بفارق كبير. [ 2 ]

ميركوري لغة وصفية بحتة ، على عكس برولوج ، إذ تفتقر إلى عبارات برولوج غير المنطقية مثل !(cut) وعمليات الإدخال/الإخراج الإجرائية (I/O). يُمكّن هذا من إجراء تحليل ثابت متقدم للبرامج وتحسينها ، بما في ذلك جمع البيانات المهملة في وقت الترجمة [ 5 ] ، ولكنه قد يُصعّب التعبير عن بعض بنيات البرمجة (مثل التبديل بين عدد من الخيارات، مع قيمة افتراضية ). مع أن ميركوري تسمح بوظائف غير نقية، إلا أنها تُستخدم أساسًا كوسيلة لاستدعاء شيفرة لغات أخرى. يجب تمييز جميع الشيفرة غير النقية صراحةً. تُعبّر العمليات التي تُعتبر عادةً غير نقية (مثل الإدخال/الإخراج ) باستخدام بنيات نقية في ميركوري باستخدام أنواع خطية ، وذلك بتمرير قيمة وهمية للعالم عبر جميع الشيفرة ذات الصلة.

من أبرز البرامج المكتوبة بلغة ميركوري مُجمِّع ميركوري ومُنسِّق برينس XML . كما تستخدم شركة البرمجيات ODASE لغة ميركوري لتطوير منصتها لتطوير البرمجيات التي تركز على علم الوجود، ODASE. [ 6 ]

الواجهات الخلفية

يحتوي برنامج ميركوري على العديد من الأنظمة الخلفية، والتي تُمكّن من ترجمة كود ميركوري إلى لغات متعددة، بما في ذلك:

مستوى الإنتاج

ماضي

يتميز نظام ميركوري أيضًا بواجهة لغات أجنبية، مما يسمح بربط التعليمات البرمجية المكتوبة بلغات أخرى (بحسب النظام الخلفي المُختار) مع تعليمات ميركوري البرمجية. اللغات الأجنبية المدعومة هي:

الواجهة الخلفيةلغة (لغات) أجنبية
ج (كلا المستويين)ج
جافاجافا
إرلانغإرلانغ
إلينويلغة الوسيط المشتركة (CIL) أو C#

يمكن بعد ذلك ربط لغات البرمجة الأخرى عن طريق استدعائها من هذه اللغات. مع ذلك، يعني هذا أنه قد يلزم كتابة كود اللغة الأجنبية عدة مرات للأنظمة الخلفية المختلفة، وإلا ستُفقد إمكانية نقل الكود بين هذه الأنظمة.

أكثر أنظمة الواجهة الخلفية استخداماً هي الواجهة الخلفية الأصلية منخفضة المستوى المكتوبة بلغة C.

أمثلة

مرحبا بالعالم :

:- الوحدة مرحبا . :- الواجهة . :- import_module io . :- pred main ( io : :di , io : :uo ) هو det .:- implementation . main (! IO ) :- io . write_string ( "Hello, World!\n" , ! IO ).

حساب العدد العاشر من متتالية فيبوناتشي (بأبسط طريقة): [ 7 ]

:- وحدة فيب . :- الواجهة . :- import_module io . :- pred main ( io : :di , io : :uo ) هو det .:- التنفيذ . :- استيراد_الوحدة int .:- func fib ( int ) = int . fib ( N ) = ( if N =< 2 then 1 else fib ( N - 1 ) + fib ( N - 2 )).main (! IO ) :- io . write_string ( "fib(10) = " , ! IO ), io . write_int ( fib ( 10 ), ! IO ), io . nl (! IO ). % يمكن استخدام io.format("fib(10) = %d\n", [i(fib(10))], !IO).

!IOهو "متغير حالة"، وهو اختصار برمجي لزوج من المتغيرات التي يتم تعيين أسماء محددة لها أثناء عملية الترجمة؛ على سبيل المثال، يتم تبسيط ما سبق إلى شيء مثل:

main ( IO0 , IO ) :- io . write_string ( "fib(10) = " , IO0 , IO1 ), io . write_int ( fib ( 10 ), IO1 , IO2 ), io . nl ( IO2 , IO ).

جدول الإصدارات

كان نظام تسمية الإصدارات المستقرة يبدأ من 0.1 وينتهي بـ 0.13 لأول ثلاثة عشر إصدارًا مستقرًا. في فبراير 2010، قرر مشروع ميركوري تسمية كل إصدار مستقر باستخدام سنة وشهر الإصدار. على سبيل المثال، 10.04 هو إصدار صدر في أبريل 2010.

كما يتم في كثير من الأحيان تقديم لمحة دورية عن إصدار نظام التطوير اليومي (ROTD).

دعم بيئة التطوير المتكاملة والمحرر

انظر أيضاً

  • كاري ، لغة منطقية وظيفية أخرى
  • أليس ، وهي لهجة من لغة Standard ML
  • لغة لوج توك ، وهي امتداد كائني التوجه للغة برولوج، ويتم ترجمتها إلى لغة برولوج.
  • أوز/موزارت ، لغة متعددة النماذج
  • لغة Visual Prolog ، وهي امتداد قوي الكتابة وموجه للكائنات للغة Prolog، مع بناء جملة جديد

مراجع

  1. "الإصدار 22.01.8" . 8 سبتمبر 2023. تم الاطلاع عليه بتاريخ 18 سبتمبر 2023 .
  2. 1 2 3 مشروع ميركوري - الدافع
  3. مشروع ميركوري - المعايير المرجعية
  4. سوموجي، زولتان؛ هندرسون، فيرغوس؛ كونواي، توماس (أكتوبر-ديسمبر 1996). "خوارزمية تنفيذ لغة ميركوري: لغة برمجة منطقية تصريحية بحتة وفعالة" . مجلة البرمجة المنطقية . 29 ( 1-3 ). Mercurylang.org: 17-64 . CiteSeerX 10.1.1.46.9861 . doi : 10.1016/S0743-1066(96)00068-4 . تاريخ الاسترجاع: 30 أغسطس 2008 . 
  5. ^ مازور ، نانسي (مايو 2004). تجميع البيانات المهملة في وقت الترجمة للغة التصريحية Mercury (PDF) (أطروحة). الجامعة الكاثوليكية لوفين.
  6. أوداس
  7. مقتبس من درس رالف بيكيت عن الزئبق