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

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

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

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

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

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

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

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

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

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

• لغة Java

• لغة C Sharp

• لغة Erlang

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

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

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

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

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

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

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

## الامثلة
Hello World:
```prolog
:- module hello.
 :- interface.
 :- import_module io.
 :- pred main(io::di, io::uo) is det.

 :- implementation.
 main(!IO) :-
 	io.write_string("Hello, World!\n", !IO).
```
حساب رقم فيبوناشي العاشر (بأكثر طريقة واضحة)
```prolog
:- 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:
```prolog
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 سنوات وهناك أيضا صورة توضح الميزات الجديدة والاعطال التي تم اصلاحها قبل بعض الاصدارات الثابتة

## المراجع

تصنيف:برمجيات حرة متعددة المنصات
تصنيف:لغات برمجة
تصنيف:لغات برمجة .نت
تصنيف:لغات برمجة أنشئت في 1995
تصنيف:لغات برمجة منطقية
تصنيف:لغات برمجة وظيفية
تصنيف:لغات برمجة وظيفية منطقية