Modula-2
From Wikipedia, the free encyclopedia
Modula-2(モジュラ・ツー)は、コンピュータのプログラミング言語の一種で、1978年頃にチューリッヒ工科大学のニクラウス・ヴィルトにより、先立って構想されたプログラミング言語「Modula」の後継として創案されたものである。汎用手続き型言語で、構文の多くは同様にヴィルトの手掛けたPascal言語に基いたものとなっている。名前「Modula-2」は「モジュールの」を意味する英語「modular」に由来する。
Pascal との上位互換にはなっていない。Pascal にモジュールの概念を追加し、分割コンパイルやソフトウェア部品のライブラリ化による再利用が可能である。また、単一の処理装置での並行処理を可能にするコルーチンや、データ抽象化の機能を持つ。一方では、ハードウェアへの直接アクセスなども可能にしている。各ライブラリは、定義モジュールと実現モジュールの2つのファイルから構成され、ライブラリの整合性はリンク時に厳密に検査される。全体として、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.