「Modula-2」の版間の差分
m →Pascalとの相違点: リンク内のバーティカルバー表記を修正 |
|||
35行目: | 35行目: | ||
==例== |
==例== |
||
< |
<syntaxhighlight lang="modula2"> |
||
MODULE sample ; |
MODULE sample ; |
||
FROM InOut IMPORT WriteLn,WriteString ; |
FROM InOut IMPORT WriteLn,WriteString ; |
||
42行目: | 42行目: | ||
WriteLn |
WriteLn |
||
END sample. |
END sample. |
||
</syntaxhighlight> |
|||
</source> |
|||
== 標準 == |
== 標準 == |
2020年7月5日 (日) 22:38時点における版
パラダイム | 手続き型 |
---|---|
登場時期 | 1978年頃 |
設計者 | ニクラウス・ヴィルト |
型付け | 強い静的型付け |
主な処理系 | XDS, MacMETH |
影響を受けた言語 | Mesa、Pascal |
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.
標準
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版は邦訳が出ている。
- Niklaus Wirth 著、斎藤信男 訳『Modula-2プログラミング』(改訂第3版)マイクロソフトウェア、1986年。
ほかに、ヴィルトによる Modula-2 の著作で、邦訳されているものに以下のものがある。
- N. ヴィルト 著、浦昭二; 國府方久史 訳『アルゴリズムとデータ構造』近代科学社、1990年。ISBN 4764901625。
- ニクラウス・ヴィルト 著、筧捷彦 訳『翻訳系構成法序論』近代科学社、1986年。
関連項目
- 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 用の処理系)