| パラダイム | 論理、関数、オブジェクト指向[要出典] |
|---|---|
| デザイン: | ゾルタン・ソモジ |
| 開発者 | メルボルン大学 |
| 初登場 | 1995年4月8日 |
| 安定リリース | 22.01.8 [1]
/ 2023年9月8日 |
| タイピングの規律 | 強力、静的、多形的 |
| 実装言語 | 水銀 |
| プラットフォーム | IA-32、x86-64、Arm、SPARC 64、Java、CLI |
| OS | クロスプラットフォーム: Unix、Linux、macOS、Solaris、FreeBSD、OpenBSD、Windows、Android |
| ライセンス | GPLコンパイラ、 LGPL標準ライブラリ |
| ファイル名拡張子 | .m |
| Webサイト | 翻訳元 |
| 主な実装 | |
| メルボルン マーキュリー コンパイラー | |
| 影響を受けた | |
| Prolog、Hope、Haskell | |
Mercury は、実社会での使用を目的とした関数型論理プログラミング言語です。最初のバージョンは、メルボルン大学コンピュータサイエンス学部で、Somogyi の監督の下、Fergus Henderson、Thomas Conway、Zoltan Somogyi によって開発され、1995 年 4 月 8 日にリリースされました。
Mercuryは純粋に宣言的な 論理プログラミング言語です。PrologとHaskellの両方に関連しています。[2]強力で静的な多態的な型システムと、強力なモードと決定論のシステムを備えています。
公式実装である Melbourne Mercury Compiler は、Linux、macOS、Windowsを含むほとんどのUnixおよびUnix 系プラットフォームで利用できます。
概要
Mercury は論理プログラミング言語Prologに基づいています。同じ構文と、選択的線形確定節解決(SLD) アルゴリズムなどの同じ基本概念を備えています。強力な型とモードを備えた Prolog の純粋なサブセットと見なすことができます。そのため、機能と実行時の効率の点で前身の言語と比較されることがよくあります。
この言語はソフトウェア工学の原理に基づいて設計されています。Prolog のオリジナルの実装とは異なり、直接解釈されるのではなく、独立したコンパイル段階があります。これにより、プログラムを実行する前に、より広範囲のエラーを検出できます。厳密な静的型とモード システム[2]およびモジュール システムを備えています。
コンパイル時に取得される情報(型やモードなど)を使用することで、Mercuryで書かれたプログラムは通常、Prologで書かれた同等のプログラムよりも大幅に高速に実行されます。[3] [4]その作者は、Mercuryが世界で最も高速な論理型言語であると主張しています。[2]
Mercury はPrologとは異なり、純粋に宣言的な言語です。これは、(cut) や命令型の入出力(I/O)などの論理外のProlog 文がないためです。これにより、コンパイル時のガベージコレクション[5]を含む、高度な静的プログラム分析とプログラム最適化が可能になりますが、特定のプログラミング構造 (デフォルト[疑わしい–議論]を持つ、いくつかのオプションの switch など) の表現が難しくなる可能性があります。Mercury は不純な機能を許可していますが、主に外国語コードを呼び出す方法として機能します。すべての不純なコードは明示的にマークする必要があります。通常は不純である操作 (入出力など) は、関連するすべてのコードにダミーのワールド値を通すことで、線形型を使用する Mercury の純粋な構造を使用して表現されます。
!
Mercuryで書かれた有名なプログラムには、MercuryコンパイラとPrince XMLフォーマッタがあります。ソフトウェア会社ODASEも、オントロジー中心のソフトウェア開発プラットフォームODASEの開発にMercuryを使用しています。[6]
バックエンド
Mercury には複数のバックエンドがあり、これにより Mercury コードを次のような複数の言語にコンパイルできます。
生産レベル
- オリジナルのMercuryバックエンドであるGNU Compiler Collection (GCC)用の低レベルC
- ハイレベルC
- ジャワ
- C#
過去
- GCCバックエンド経由のアセンブリ言語
- Aditi は、メルボルン大学で開発された演繹データベース システムです。Mercury-0.12.2 は Aditi をサポートする最後のバージョンです。[引用が必要]
- .NET Frameworkの共通中間言語(CIL)
- アーラン
Mercury には外国語インターフェースも備わっており、他の言語のコード (選択したバックエンドによって異なります) を Mercury コードにリンクできます。次の外国語が可能です。
これらの言語から他の言語を呼び出すことで、他の言語とインターフェースすることができます。ただし、これは、異なるバックエンドに対して外国語コードを複数回記述する必要がある場合があることを意味します。そうしないと、バックエンド間の移植性が失われます。
最も一般的に使用されるバックエンドは、オリジナルの低レベル C バックエンドです。
例
:- モジュール こんにちは。
:- インターフェース。
:- import_module io 。
: -pred main ( io :: di , io :: uo )は detです 。
:- implementation .
main (! IO ) :-
io . write_string ( "Hello, World!\n" , ! IO ).
10番目のフィボナッチ数を計算する(最も明白な方法):[7]
:- module fib .
:- interface .
:- import_module io .
:- pred main ( io : :di , io : :uo )は detです 。
:- 実装.
:- 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 ).
% 代わりに 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 ) .
リリーススケジュール
安定リリースの命名規則は、最初の 13 回の安定リリースでは 0.1 から 0.13 でした。2010 年 2 月に、Mercury プロジェクトは、リリースの年と月を使用して各安定リリースに名前を付けることを決定しました。たとえば、10.04 は 2010 年 4 月に作成されたリリースです。
開発システムのリリース当日のスナップショット(ROTD) も定期的に公開されることが多い。
IDEとエディターのサポート
- 開発者はVimのサポートを提供する
- Emacs用 Flycheck ライブラリ
- Eclipse IDE用のプラグインが利用可能
- NetBeans IDE用のプラグインが利用可能
参照
- Curry、別の関数型論理言語
- Alice 、標準MLの方言言語
- Logtalk言語は、Prolog にコンパイルされる Prolog のオブジェクト指向拡張です。
- Oz/Mozart、マルチパラダイム言語
- Visual Prolog言語、新しい構文を持つ、Prologの強く型付けされたオブジェクト指向拡張
参考文献
- ^ “リリース 22.01.8”. 2023年9月8日. 2023年9月18日閲覧。
- ^ abc マーキュリープロジェクト - モチベーション
- ^ マーキュリー プロジェクト - ベンチマーク
- ^ Somogyi, Zoltan; Henderson, Fergus; Conway, Thomas (1996 年 10 月 - 12 月)。「Mercury の実行アルゴリズム: 効率的な純粋宣言型論理プログラミング言語」。Journal of Logic Programming。29 ( 1 - 3)。Mercurylang.org: 17 - 64。CiteSeerX 10.1.1.46.9861。doi :10.1016/ S0743-1066 (96)00068-4。2008年 8 月 30日閲覧。
- ^ Mazur, Nancy (2004 年 5 月). 宣言型言語 Mercury のコンパイル時ガベージ コレクション(PDF) (論文). ルーヴェン カトリック大学.
- ^ オダセ
- ^ Ralph Becket の Mercury チュートリアルから引用
外部リンク
- 公式サイト
