مرکوری (زبان برنامه‌نویسی)

مرکوری یک زبان برنامه‌نویسیمنطقی تابعی است که جهت کاربردهای دنیای واقعی بهینه شده است. این زبان در ابتدا در دانشکده علوم کامپیوتر دانشگاه ملبورن تحت نظارت زولتان سوموگی ابداع شد. فرگوس هندرسون، توماس کانوی و زلتان سوموگی نخستین نسخه مرکوری را در ۸ آوریل سال ۱۹۹۵ منتشر کردند.
مرکوری یک زبان برنامه‌نویسی منطقی اعلانی خالص است که با زبان‌های پرولوگ و هسکل در ارتباط است. این امر باعث به وجود آمدن سیستم نوع ی قوی، ایستا و چند ریخت به همراه حالت و جبرگرایی سیستم قوی شده است.
پیاده‌سازی رسمی این زبان با عنوان کامپایلر مرکوری ملبورن برای پلتفرم هاییونیکس از جمله اواس ده مک ومایکروسافت ویندوز در دسترس است.
مرور کلی
مرکوری مبتنی بر زبان برنامه‌نویسی منطقی پرولوگ است به طوری که همان نحو و همان مفاهیم پایه‌ای همانند الگوریتم تصمیم SLD را داراست. می‌توان به مرکوری به عنوان زیرمجموعه از پرولوگ با نوع داده‌ای و حالت قوی نگاه کرد. به این ترتیب مرکوری همواره با نسخه‌های قبلی آن از لحاظ ویژگی‌ها و بهره‌وری زمان اجرا قابل مقایسه است.
این زبان با در ذهن داشتن اصول مهندسی نرم‌افزار طراحی شده است. بر خلاف پیاده‌سازی اصلی از پرولوگ، به جای تفسیر مستقیم، جداگانهکامپایل می‌شود که اجازه می‌دهد طیف بسیار گسترده‌تری از اشتباهات که باید قبل از اجرای برنامه گرفته شوند، از بین بروند. این امر باعث به وجود آمدن سیستم ایستای حالت و نوع و سیستم ماژول سفت و سختی شده است.
با توجه به استفاده از اطلاعات به دست آمده در زمان کامپایل (مانند نوع و اطلاعات حالت)، برنامه‌های نوشته شده در مرکوری به طور قابل توجهی سریعتر از برنامه‌های معادل نوشته شده در پرولوگ اجرا می‌شوند. نویسندگان آن ادعا می‌کنند که مرکوری با اختلافی زیاد، سریع‌ترین زبان منطقی در جهان است.
مرکوری زبان اعلانی خالص است. ازآنجا که مرکوری فاقد عبارات «فوق منطقی» پرولوگ مانند «برش» و ورودی/خروجی دستوری است، بر خلاف پرولوگ، قادر است تجزیه و تحلیل استاتیک پیشرفته و بهینه‌سازی برنامه، از جمله زباله‌روب زمان کامپایل انجام دهد، از طرفی ممکن است ساختارهای برنامه‌نویسی خاصی (مانند یک سوئیچ با بیش از تعداد خاصی از گزینه‌ها، با پیش فرض) سخت‌تر به بیان شود. (توجه داشته باشید که با این که مرکوری اجازه افزودن کد زبان‌های دیگر را می‌دهد، این اقدام در درجه اول به عنوان یک راه فراخوانی کد زبان دیگر است. همه کدهای زبان‌های دیگر استفاده شده در کد مرکوری باید به صراحت مشخص شده باشند) عملیاتی که به طور معمول ناخالص اند (مانند ورودی / خروجی) با استفاده از سازه خالص در مرکوری توسط چندریسمانی ساختگی، با ارزش «جهانی» از طریق تمام کدهای مربوط، بیان می‌شوند.
از برنامه‌های قابل توجه نوشته شده در مرکوری می‌توان به خود کامپایلر مرکوری و فرمت کننده Prince XML اشاره کرد. شرکت نرم‌افزاری Mission Critical IT، نیزاز مرکوری از سال ۲۰۰۰ به منظور توسعه برنامه‌های سازمانی و پلتفرم Ontology-Driven-development با عنوان ODASE استفاده می‌کند.
زیرساخت‌ها
مرکوری زیرساخت‌های متعددی دارد. این زبان به زبان‌های زیر قابل کامپایل است:
مرحله تولید
C سطح پایین برای GCC (زیرساخت اصلی مرکوری)
C سطح بالا
کیفیت بتا
Java
C#
Erlang
کیفیت آلفا (ممکن است درست کار نکند، یا اصلا کار نکند):
IL برای Microsofts .NET
Assembly برخلاف زیرساخت GCC
زیرساخت‌های گذشته:
ادیتی، یک سیستم پایگاه داده استنتاجی که در دانشگاه ملبورن توسعه یافته است. مرکوری ۰٫۱۲٫۲ آخرین نسخه از مرکوری است که از ادیتی پشتیبانی می‌کند.
مرکوری همچنین دارای یک رابط زبان خارجی است، که اجازه می‌دهد کد به زبان‌های دیگر (بسته به انتخاب به زیرساخت) لینک شود. زبان‌های خارجی امکان‌پذیر در جدول زیر آمده‌اند:
زیرساخت
زبان خارجی
C (هر دو سطح)
C
Java
Java
Erlang
Erlang
IL
IL یا C#
پس از آن زبانهای دیگر با صدا زدن از طریق این زبانها می‌توانند واسطه شوند. با این حال، این بدان معنی است که کد زبان‌های خارجی ممکن است نیاز به چندین بار نوشته شدن برای پایانه (Backend)های مختلف دارند، در غیر این صورت قابلیت حمل بین پایانه (Backend) دست خواهد رفت.
بیشترین زیرساخت مورداستفاده زیرساخت سطح پایین 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).
زمانبندی انتشار
پروژه مرکوری دارای یک چرخه انتشار ۶ ماهه است. نسخه‌ها با توجه به سال و ماه انتشار نام گذاری می‌شوند. نسخه پایدار فعلی ۱۴٫۰۱٫۱ (سپتامبر ۲۰۱۴) است. قبلا نسخه‌ها به صورت ۰٫۱۲، ۰٫۱۳، و غیره شماره می‌شدند و دوره بین نسخه‌های پایدار بسیار زیاد (۳ سال) بود.
همچنین یک نسخه تصویر لحظه‌ای متشکل از آخرین امکانات و رفع اشکالات اضافه شده به نسخه پایدار گذشته وجود دارد.