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

لغة برمجة

ميركوري(mercury) هي لغة برمجة منطقية وظيفية صنعت لحل مشكلات العالم الحقيقي. أول نسخة من اللغة تم تطويرها في قسم كلية علوم الحاسوب في جامعة ملبورن عن طريق فيرغوس هينديرسون، ثوماس كونواي، وزولتان سوموغيي، تحت اشراف سوموغيي، وتم اصدارها بتاريخ 8 ابريل سنة 1995.

ميركوري هي لغة برمجية منطقية تقريرية فقط. و هي متعلقة بلغات برولوغ وهاسكل و هي تتميز بنظام قوي، ثابت, متعدد الاشكال ونمط قوي ونظام تقريري.

التنفيذ الرسمي للغة، مترجم ملبورن ميركوري متوافر لأنظمة تشغيل ينكس والمشابها لها من ضمنها نظام تشغيل ويندوز، لينكس وانظمة تشغيل ماكينتوش..

نظرة عامةعدل

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

باستعمال معلومات يتم الحصول عليها خلال مرحلة الترجمة (مثل النوع والنمط) البرامج المكتوبة بلغة ميركوري يكون ادائها اسرع بشكل ملحوظ من البرامج المكتوبة بلغة برولوغ. و كتابها يدعون ان لغة ميركوري هي اسرع لغة برمجة في العالم.

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

الجهات الخلفيةعدل

ميركوري لديها العديد من الجهات الخلفية التي تتيح ترجمة برامج ميركوري إلى عدة لغات ومنها :

مستوى الانتاجعدل

•لغة C منخفضة المستوى لمترجم مجموعة GNU و هي لغة ميركوري الافتراضية.

•لغة C عالية المستوى

• لغة Java

• لغة C Sharp

• لغة Erlang

الماضيعدل

• لغة التركيب عن طريق جهة GCC الخلفية

• اديتي (aditi) و هو نظام موسوعة بيانات استنتاجي ايضا مطور في جامعة ميلبورن

و ميركوري نسخة 0.12.2 هي النسخة الاخيرة التي تدعم اديتي.

•اللغة المتوسطة الشائعة، لأطار.Net

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

و بالاسفل قائمة هذه اللغات

اللغات الاجنبية التي يمكن التحويل من واليها
اللغة الاجنبية جهة خلفية
لغة C لغة C (المستويين)
Java لغة Java
Erlang لغة Erlang
اللغة المتوسطة اللغة المتوسطة الشائعة

و أكثر جهة خلفية مستعملة هي لغة C منخفضة المستوى.

الامثلةعدل

Hello World:

 :- module hello.
 :- interface.
 :- import_module io.
 :- pred main(io::di, io::uo) is det.

 :- implementation.
 main(!IO) :-
 	io.write_string("Hello, World!\n", !IO).

حساب رقم فيبوناشي العاشر (بأكثر طريقة واضحة)[1]

 :- module fib.
 :- interface.
 :- import_module io.
 :- pred main(io::di, io::uo) is det.
 
 :- implementation.
 :- import_module 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).
        % Could instead use io.format("fib(10) = %d\n", [i(fib(10))], !IO).

!IO is a "state variable", which is syntactic sugar for a pair of variables which are assigned concrete names at compilation; for example, the above is desugared to something like:

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

جدول اوقات الاصداراتعدل

الاصدارات تسمى حسب سنة وشهر الإصدار، والإصدار الحالي هو 20.06 (2020,30 july) و الوقت بين الاصدارات الثابتة قد يصل إلى 3 سنوات وهناك ايضا صورة توضح الميزات الجديدة والاعطال التي تم اصلاحها قبل بعض الاصدارات الثابتة

المراجععدل