Modula-2

Modula-2（モジュラ・ツー）は、コンピュータのプログラミング言語の一種で、1978年頃にチューリッヒ工科大学のニクラウス・ヴィルトにより、先立って構想されたプログラミング言語「Modula」の後継として創案されたものである。汎用手続き型言語で、構文の多くは同様にヴィルトの手掛けたPascal言語に基いたものとなっている。名前「Modula-2」は「モジュールの」を意味する英語「modular」に由来する。

特徴
Pascal との上位互換にはなっていない。Pascal にモジュールの概念を追加し、分割コンパイルやソフトウェア部品のライブラリ化による再利用が可能である。また、単一の処理装置での並行処理を可能にするコルーチンや、データ抽象化の機能を持つ。一方では、ハードウェアへの直接アクセスなども可能にしている。各ライブラリは、定義モジュールと実現モジュールの２つのファイルから構成され、ライブラリの整合性はリンク時に厳密に検査される。全体として、Adaの縮小版のような仕様である。

ヴィルト自身がビットスライスプロセッサを使用し、ハードウェア管理から、独自のウインドウシステムを持つオペレーティングシステムを含めたオリジナルのワークステーションシステム Lilith の全体を Modula-2 だけで構築して見せ、その実用性と強力さを示した。

発表当時は、究極の手続き型言語ともてはやされたが、現在では、Ada と同様、あまり広く使用されているとは言えない。

Pascal との共通点 
配列の範囲等の実行時検査が可能である。
手続きや関数を入れ子にできる。
引数は値渡しと参照渡しが使用できる。
手続きや関数の内部で定義された名前はその外部からは参照できない。

Pascalとの相違点 
大文字と小文字は区別される、予約語は全て大文字。
予約語 AND（論理積） のかわりに「&」、NOT（否定） のかわりに「~」が使える。不等号は「#」を使う。
部分範囲型は "[..]" でくくる。集合型は "{..}" でくくる。注釈は "(*..*)" でくくる。注釈は入れ子にできる。
整数型は符号のある INTEGER と符号なしの CARDINAL を区別する。
十進数以外に、二進・八進・十六進数で定数を指定することができる。
文字列定数は「'」以外に「"」で囲むこともでき、添え字 0 からはじまる文字の配列として扱われる。文字列はC言語と同様、コード 0 の文字（0C）によって終了する。
IF 文などの制御文は複数の文を対象とするため、明示的に予約語 END で閉じる。else if のかわりに ELSIF を用いる。
 CASE文の各選択肢には複数の文を書くことができ、選択肢は | で区切る。ELSE も存在する。RECORD CASE の書き方も少し異なる。
GOTO 文はない。代わりに無限ループを構成する LOOP 文とそれから脱出する EXIT 文を持つ。
FOR文は予約語 BY によって増分を 1 か -1 以外にもできる。予約語 DOWNTO はない。
手続きと関数の定義は同じ予約語 PROCEDURE で開始する。関数は RETURN 文で値を返すことができる。手続きの終わりを示す END の後ろには手続き名を書く必要がある。手続き型の変数が存在する。
手続きの引数として整合配列を使用できる。整合配列は一次元に限られ、添え字 0 から始まる。配列 a の最大の添え字は HIGH(a) によって取得できる。
標準手続きは原則としてライブラリとして提供される。ただし CHR, ORD などは Modula-2 でも標準手続きである。
モジュールが存在する。モジュールは初期化部分を持ち、どの識別子をモジュール外から参照できるかを定義できる。分割コンパイルもモジュールを単位に行う。
絶対参照、出入力ポート制御、ビット型などの、ハードウェアを直接操作する低レベル機能を持つ。
コルーチンを持つ。

例
 MODULE sample ;
 FROM InOut IMPORT WriteLn,WriteString ;
 BEGIN
    WriteString('This is Modula-2') ;
    WriteLn
 END sample.

標準 
Modula-2 は、ISO 10514 として規格化されている。対応する日本工業規格は存在しない。
 ISO 10514-1:1996
 ISO 10514-2:1998 （ジェネリックプログラミング）
 ISO 10514-3:1998 （オブジェクト指向）

ヴィルトの著作『Programming in Modula-2』（Springer-Verlag, 1982年初版、1988年4版）は、Modula-2 の紹介とレポートから構成され、あまり厳密ではないが標準的なものとして扱われる。3版は邦訳が出ている。
 
ほかに、ヴィルトによる Modula-2 の著作で、邦訳されているものに以下のものがある。

関連項目
Pascal — ヴィルト自身が作った Modula-2 の元になった言語
Modula — Modula-2 の前段階の言語
Modula-3 — Modula-2 のオブジェクト指向言語へ拡張
Mesa — 影響を受けたとされる
Simula - 影響を受けたとされる
Oberon - オブジェクト指向言語、ヴィルトの次の作品

外部リンク
 Modula-2 Frequently Asked Questions 
  ISO/IEC JTC1/SC22/WG13 Modula-2  
 Lilith and Modula-2 
 GNU Modula-2  
 ADW Modula-2 （かつて Stony Brook Modula-2 と呼ばれた処理系） 
 Gardens Point Modula-2 (GPM/CLR)（.Net 用の処理系） 

MODULA2