لمعانٍ أخرى، طالع ميركوري (توضيح).

**ميركوري** (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).

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

```
 :- 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 سنوات وهناك أيضا صورة توضح الميزات الجديدة والاعطال التي تم اصلاحها قبل بعض الاصدارات الثابتة

المراجع
-------

1. ↑  Adapted from Ralph Becket's Mercury tutorial نسخة محفوظة 2020-09-21 على موقع واي باك مشين.

* أيقونة بوابةبوابة برمجة الحاسوب
* أيقونة بوابةبوابة برمجيات حرة