プログラミング
Modula-3 歴史コレクション(コンピュータ歴史博物館)
Modula-3 History Collection on Computer History Museum (softwarepreservation.computerhistory.org)
要約
この記事は、プログラミング言語Modula-3の誕生、開発、利用に関する文書、ソースコード、その他の資料を収集した注釈付きコレクションです。Modula-3は、安全性と効率性を両立させることを目指して1980年代後半に設計され、インターフェース、オブジェクト、ジェネリクス、スレッド、ガベージコレクションなどの機能を備えていました。本コレクションは、その設計思想や歴史的経緯、実装、ライブラリ、応用事例などを詳細に記録しています。
全文翻訳
Modula-3 歴史コレクション
Paul McJones 編集
paul@mcjones.org
https://mcjones.org/dustydecks/
最終更新日 2026年7月5日
概要
これは、プログラミング言語Modula-3の誕生、開発、利用に関する文書、ソースコード、その他の資料を収集した注釈付きコレクションです。
目次
謝辞
はじめに
言語設計タイムライン
実装と配布
ライブラリ
アプリケーション
開発サポート
リソース
謝辞
Marc H. Brown, Luca Cardelli, Michel Dagenais, Dave Detlefs, John DeTreville, Amer Diwan, Jim Donahue, Allan Heydon, Tony Hosking, Bill Kalsow, Al Kossow, Rustan Leino, Eliot Moss, Eric Muller, Farshad Nayeri, Mika Nyström, John Polstra, Klaus Preschern, Olaf Wagner の皆様に、協力、助言、資料提供に感謝いたします。
このウェブサイトは、Modula-3とその前身言語の設計者、およびModula-3で書かれたすべてのライブラリとアプリケーションの作者に捧げられています。
はじめに
Modula-3は、1980年代後半にLuca Cardelli, Jim Donahue, Mick Jordan, Bill Kalsow, Greg Nelsonによって設計されたプログラミング言語です(定義レポートはLucille GlassmanとGreg Nelsonによって書かれました)。この言語は、デバイスドライバのような低レベルコードから、プログラム開発ツール、科学的またはビジネスアプリケーションまで、幅広いシステムおよびアプリケーションプログラミングにおいて、安全性と効率性の両方を兼ね備えることを意図しています。安全性とは、プログラムの実行時状態が言語セマンティクスに忠実であることが保証されることを意味します。
Modula-3は、これらの目標を達成するために可能な限りシンプルであることも意図されていました。設計者は、言語定義の50ページの予算をわずか6行のテキストと構文概要で超過しました。
言語機能には、インターフェース、オブジェクト、ジェネリクス、スレッド、安全でないコードの分離、ガベージコレクション、例外、サブタイピングが含まれます。これらの多くは2025年までに普及しましたが、1990年[Nelson1991]には、特に非ヒープ割り当てデータ構造をサポートする言語では、はるかに一般的ではありませんでした。
Modula-3の存在は、Maurice WilkesがNiklaus WirthにModula-2+を改訂してModula-3として標準化することを提案したことに端を発します。(Modula-2+は、WirthのModula-2に、Xerox PARCでのMesaおよびCedarでの以前の経験に基づいたスレッド、ガベージコレクション、例外を追加拡張したものです。Software Preservation > Mesa and Modula-2+ を参照してください。)
Digital Equipment Corporation Systems Research Center(Cardelli, Kalsow, Nelson)とOlivetti Research California(Donahue, Jordan)のメンバーからなる委員会は、1988年8月に最初のModula-3設計を発表しました[Cardelli1988a]。両方のラボで実装が開始されました。Modula-3コンパイラをModula-3で記述する経験から、1989年11月にはいくつかの改訂と一般化が行われました[Cardelli1989a]。最終的な改訂セットは1990年12月までに完了しました[Nelson1990]。
1991年には、書籍『Systems Programming with Modula-3』がこの言語をより広い読者層に紹介しました[Nelson1991]。[Nelson1991]の第1章(「はじめに」)には、設計プロセスの歴史と言語の性質に関する追加の詳細が記載されています。第8章(「言語がどのようにしてその特徴を獲得したか」)は、設計者が直面した多くの問題を暴露する架空の対話です。
[Cardelli1988a] Luca Cardelli, James Donahue, Lucille Glassman, Mick Jordan, Bill Kalsow, and Greg Nelson. Modula-3 Report. Report 31, Systems Research Center, Digital Equipment Corporation, 25 August 1988, 55 pages. Also published as Report ORC-1, Olivetti Research Center, 1988. PDF
[Cardelli1989a] L. Cardelli, J. Donahue, M. Jordan, B. Kalsow, and G. Nelson. The Modula–3 type system. In Proceedings of the 16th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL '89). Association for Computing Machinery, New York, January 1989, pages 202–212. ACM Digital Library
[Cardelli1989c] Luca Cardelli, James Donahue, Lucille Glassman, Mick Jordan, Bill Kalsow, and Greg Nelson. Modula-3 Report (revised). Report 52, Systems Research Center, Digital Equipment Corporation, 1 November 1989, 71+15 pages. PDF version includes [Nelson1990] as an appendix. Also published as Report STL-89-3, Olivetti Research California, November 1989. PDF
[Cardelli1992] Luca Cardelli, James Donahue, Lucille Glassman, Mick Jordan, Bill Kalsow, and Greg Nelson. Modula-3 language definition. SIGPLAN Notices, Volume 27, Issue 8 (Aug. 1992), pages 15–42. ACM Digital Library / PDF
[Donahue1989] James Donahue. Modula-3. Videotaped lecture, University Video Communications, Computer History Museum catalog number 102622078, 29 November 1989. .m4v video
[Nelson1990] Greg Nelson, editor. Twelve Changes to Modula-3. comp.lang.modula3, 19 December 1990. PDF Also included as appendix to PDF version of [Cardelli1989a].
[Nelson1991] Greg Nelson, editor. Systems Programming with Modula-3. Prentice Hall, 1991. online at archive.org / PDF
[Nelson1991errata] Allan Heydon, editor. Modula-3: Language definition errata. SRC Modula-3 web site, last modified 14 July 1997. online via archive.org
言語設計タイムライン
1984-1986 Modula-2+ のDEC SRCでの開発 [Rovner1985, Rovner1986]。
1986年12月 WirthをETHで訪問するためのSRC/ORC合同代表団 [Donahue1989]。
1987年1月-3月: 目標、範囲に関する初期の議論 [Donahue1989]。
1987年4月: 真剣な設計が開始 [Donahue1989]。
1987年11月: 最初の完全なドラフト [Donahue1989]。
1988年8月: Modula-3 Report が発行 [Cardelli1988a]。両ラボで実装が開始 [Donahue1989, Nelson1991]。
1989年1月: 実装経験に基づく改訂:「主な変更点は、ブランド付き参照型の導入、ブランド付き不透明型の要件、不透明スーパ型の合法化、不透明型の情報開示における新しい柔軟性でした」[Cardelli1989c]。
1989年10月: ORC Modula-3 の最初の公開リリース [Donahue1989]。
1989年11月: Modula-3 Report (改訂版) が発行 [Cardelli1989c]。
1989年12月: SRC Modula-3 の最初の公開リリース [Kalsow2021]。
1990年12月: 「Twelve Changes」:ジェネリクスの追加、IEEE 754浮動小数点数との互換性の向上、RAISESが{}にデフォルト、NEW時のメソッド宣言とオーバーライドの区別、構文糖衣によるNEW時のメソッドオーバーライド、定数式でのトップレベルプロシージャ定数、T.mをプロシージャ定数およびメソッドデフォルトとして許可、不透明オブジェクト型のNEWの緩和、不透明型のスーパ型の開示は全順序でなければならない、EXTERNALの変更、TYPECODEの戻り値が符号付きから符号なしに変更、CHAR, TEXT, 数値リテラルの変更 [Nelson1990]。
1991年: 最終言語定義の最初の出版、[Nelson1991,Nelson1991errata]にて。
1992年: Modula-3 Language Definition が発行 [Cardelli1992]。
circa 1996: 最終ウェブ版。
実装と配布
Olivetti Modula3
DEC SRC Modula-3
UMass Amherst
GNU Modula-3
Caltech Modula-3D
Princeton M3
Klagenfurt M3/PC
M3forDOS
Modula-3 for OS/2
Critical Mass
CM3
Polytechnique Montréal
PM3
University of Washington SPIN Modula-3
Purdue Persistent M3
Cambridge CAM3
EZM3
Elego Software Solutions Modula-3
Github Modula-3
M3コンパイラファミリーツリー
初期言語定義発行直後に両社で実装が開始されました。Olivetti Modula-3は一時Olivetti社内で使用されましたが、1991年2月にOlivetti Research Californiaが突然閉鎖された後に廃れました。その後のModula-3開発(UMass Amherstでの短命なGNUプロジェクトを除く)は、DEC SRC Modula-3に基づいています。
Olivetti Modula-3
Olivetti Modula-3は、Mick Jordan, Trevor Morris, David Chase, Steve Glassman, Marion Sturtevantによって実装されました。[Jordan1990, Nelson1991] コンパイラは、M3ASTと呼ばれる汎用抽象構文木(AST)メカニズムに基づいていました。M3ASTに基づくツールには、コンパイラフロントエンド(パーサー、セマンティックアナライザー、制御モジュール)、Cソースコードを生成するコードジェネレーター、プリリンカー(モジュール初期化順序の決定やインターフェースとモジュールのコンパイルの一貫性チェックなどのグローバル情報を処理)、および「ピクル」(オブジェクトシリアライゼーション/デシリアライゼーション)が含まれていました。