| パラダイム | 手続き的、命令的、構造化された |
|---|---|
| 家族 | アルゴル |
| デザイン: | バーナード・ギャラー、ブルース・アーデン、ロバート・M・グラハム |
| 開発者 | ミシガン大学 |
| 初登場 | 1959年 |
| タイピングの規律 | 静的、強い |
| 範囲 | 語彙 |
| OS | UMES、MTS、CTSS、その他 |
| 主な実装 | |
| IBM 704、7090 、S/360、S/370、UNIVAC 1108、Philco 210-211 | |
| 方言 | |
| マッド、マッド/アイ、ゴム | |
| 影響を受けた | |
| IAL、アルゴル 58 | |
MAD (ミシガン アルゴリズム デコーダ) は、IBM 704、後にIBM 709、IBM 7090、IBM 7040、UNIVAC 1107、UNIVAC 1108、Philco 210-211、そして最終的にはIBM System/370メインフレーム コンピュータ用のプログラミング言語およびコンパイラです。1959 年にミシガン大学でBernard Galler、Bruce Arden、Robert M. Grahamによって開発された MAD は、 ALGOL言語の派生です。1960 年代には大学でプログラミングを教えるために広く使用され、互換タイム シェアリング システム(CTSS)、Multics、およびミシガン ターミナル システムコンピュータオペレーティング システムの開発に小さな役割を果たしました。[1]チャットボットELIZAのオリジナル バージョンはMAD-SLIPで書かれました。[2]
ミシガン大学ベントレー歴史図書館のアーカイブには、手書きの注釈が付いた3フィートのプリントアウトやオリジナルの印刷マニュアルなど、MADとMAD/Iの開発に関する参考資料が収蔵されています。 [3] [4] [5] [6]
MAD、MAD/I、GOM
3 つの MAD コンパイラが存在します:
- オリジナルのMADは、1959年にミシガン大学でIBM 704、後にはミシガン大学エグゼクティブシステム(UMES)および互換タイムシェアリングシステム(CTSS)オペレーティングシステムを実行するIBM 709およびIBM 7090 メインフレームコンピュータ用に開発されたコンパイラです。[7] [8] 1960年代半ばに、MADはメリーランド大学でUNIVAC 1108に移植されました。[9] MADのバージョンは、 Philco 210-211およびUNIVAC 1107でも利用可能でした。[9]
- MAD/I は、ミシガン端末システム(MTS) で動作するIBM System/360シリーズのコンピュータ用の MAD の「拡張」バージョンです。新しいコンパイラの作業は、ミシガン大学でARPAが後援する CONCOMP プロジェクトの一環として 1965 年に開始されました。作業が進むにつれて、MAD/I は元の 7090 バージョンの MAD とは独立した新しい言語であることが徐々に明らかになりました。[10]
- GOM (Good Old MAD) は、ミシガンターミナルシステム(MTS) を実行するIBM System/370シリーズのメインフレームコンピュータ用にオリジナルの 7090 MAD を再実装したものです。GOM は、1980 年代初頭にミシガン大学コンピューティングセンターのドン・ボットナーによって作成されました。[11] [12]
歴史
MADはALGOL 58に触発されて考案されたが、ALGOL 58と特に類似しているわけではない。[13] [14]
MADで書かれたプログラムには、MAIL、[15]、 RUNOFF、[16]、最初のテキスト処理システムの1つ、その他互換タイムシェアリングシステム(CTSS)のユーティリティなどがありました。 [17] Multics用のMADコンパイラの設計作業は行われましたが、実装されることはありませんでした。 [ 18 ]
以下はブライアン・カーニガン[19]へのインタビューで「プログラミングに夢中になったきっかけは何ですか?」と尋ねられたとき の興味深い引用です。
- 私がプログラミングで最も楽しかったのは、 1966 年の夏に MIT のProject MACで夏季アルバイトをしたときだったと思います。そこでは、Multics の初期の頃に、最新の GE 645 用のジョブ テープを作成するプログラムに取り組みました。私は MAD で書いていましたが、これは私が以前に書いていた FORTRAN や COBOL よりもはるかに簡単で快適でした。また、最初のタイム シェアリング システムである CTSS を使用していましたが、これはパンチ カードよりもはるかに簡単で快適でした。
MADは当時の他のコンパイラに比べてかなり高速でした。FORTRAN言語の使用に興味を持ちながらもMADコンパイラの速度を得たいと考えた人が多数いたため、 MADTRAN(MADで書かれた)と呼ばれるシステムが開発されました。MADTRANは単にFORTRANからMADへの翻訳者であり、その後マシンコードを生成します。MADTRANはSHAREを通じて配布されました。[13]
MAD/IはALGOL 60に似た構文構造を持ち、オリジナルのMADとPL/Iの重要な機能も備えている。[10] MAD/Iは拡張可能な言語として設計された。MTSで使用可能で、他の言語にも取り入れられる多くの新しいアイデアを提供したが、MAD/Iのコンパイルは遅く、オリジナルの7090 MADと比較するとMAD/Iは広く使用されるまでには至らなかった。[12]
GOMは本質的には7090 MAD言語を360/370アーキテクチャ用に修正・拡張したもので、現在のプログラミング方法や問題にうまく適合するように慎重に調整されています。[ 12] MTSメッセージシステムはGOMで書かれています。
MAD、マッドマガジン、アルフレッド・E・ニューマン

オリジナルの MAD のプレリリース版では、MAD の同名雑誌Madにちなんで、プログラムにコンパイル時エラーが多すぎると、コンパイラはASCII アートを使用したAlfred E. Neumanのフルページの写真を印刷しました。キャプションには、「この人にプログラムについて相談してください。彼はそれを出版したいと思うかもしれません。彼は決して心配しません。しかし、あなたのプログラムを見る限り、あなたは出版すべきです。」と書かれていました。 [9]この機能は最終的な公式バージョンには含まれませんでした。[20]ただし、IBM 7040 の製品バージョンには含まれていました。
そしてバーニー・ギャラーはこう回想する。
- 我々が、やる価値があると考えた言語を設計し、コンパイラーも作れるようになった頃には、もう Algol と呼ぶことはできなくなっていました。まったく違うものだったのです。その時、我々は MAD (Michigan Algorithm Decoder) という名前を採用しました。MAD という名前を使う許可を求めた時、Mad 誌の人たちと面白いやり取りがありました。とても面白い手紙で、彼らは我々を法廷に立たせるなどあらゆることをすると告げましたが、最後に「もちろん、どうぞ」という追伸で脅しを終わらせました。残念ながら、その手紙は紛失してしまいました。[21]
「Hello, world」の例
「hello, world」サンプル プログラムは、文字列「Hello, world」を端末または画面表示に出力します。
印刷フォーマットHELLOW ベクトル値 HELLOW=$13h0Hello, world*$ プログラム終了
行の最初の文字は論理キャリッジ制御として扱われ、この例では文字「0」によって 2 倍のスペースの行が印刷されます。
あるいは、短縮形を使用することもできます。その場合、コンパイラはリスト内で短縮形を展開します。
こんにちは V'S HELLOW=$13h0Hello, world*$ えーと
言語要素
MADとGOMはMAD/Iとは異なり、以下の要素で構成されています。[8] [12] [13]
入力形式
MAD プログラムはパンチ カードに書き込まれた一連のステートメントです。通常は 1 枚のカードにつき 1 つのステートメントですが、ステートメントを複数のカードに継続することもできます。列 1 ~ 10 にはオプションのステートメント ラベルが含まれ、コメントまたは注釈は列 11 の文字「R」を使用してフラグ付けされ、列 73 ~ 80 は未使用で、シーケンス識別子が含まれる場合があります。スペースは、文字定数内以外では重要ではありません。GOM の場合、入力はシーケンス フィールドのない自由形式で、行の長さは最大 255 文字です。アスタリスク (*) で始まる行はコメントであり、プラス記号 (+) で始まる行は継続行です。
名前
変数名、関数名、およびステートメント ラベルは同じ形式であり、文字の後に 0 ~ 5 個の文字または数字が続きます。関数名はピリオドで終わります。すべての名前に添え字を付けることができます (名前の後に括弧が続き、複数の添え字はコンマで区切られます)。GOM の場合、名前は最大 24 文字で、アンダースコア (_) 文字を含めることができます。
言語内のキーワードのほとんどは 6 文字以上かピリオドで囲まれているため、予約語にはなりません。長い単語を置き換えるために使用できる標準的な略語セットがあります。これらは、WHENEVER の場合は W'R、DIMENSION の場合は D'N のように、キーワードの最初と最後の文字の間にアポストロフィを挟んだものです。
データ型
MAD では、データ型に「モード」という用語を使用します。5 つの基本モードがサポートされています。
- スケール係数付きまたはスケール係数なしで記述された整数 ( 1、+1、-1、1K10、1K )、または 8 進定数 ( 7777777777777Kまで)として記述された整数。
- 指数付きまたは指数なしで記述された浮動小数点数( 0.、1.5、-0.05、+100.4、-4.、.05E-2、-.05E2、5E02、5.E2 )。
- ブール値(trueの場合は1B 、falseの場合は0B)
- ステートメントラベル、および
- 関数名は、名前の後にピリオドを付けて記述されます ( SQRT. )。
定数のモードは、定数の末尾に文字 M とそれに続く 1 つの数字を追加することで再定義できます。0 は浮動小数点、1 は整数、2 はブール値、3 は関数名、4 はステートメント ラベルを示します。
GOM には、 CHARACTER、SHORT INTEGER、BYTE INTEGER、LONG INTEGER、POINTER、DYNAMIC RECORDの 6 つのモードが追加されました。
アルファベットまたは文字定数は整数として保存され、ドル記号を区切り文字として使用して記述されます ( $ABCDEF$ )。2 つのドル記号を使用すると、真のドル記号を入力できます ( $$$.56$は 56 セント)。6 文字を超える文字列は、配列を使用して表されます。
配列と行列
- 次元数に制限はありません。
- 負の数、ゼロ、浮動小数点数の添え字も使用できます。
- 行列は、右端の添え字を最初に変更することによって決定される順序で、連続したメモリ位置に格納されます。
- 行列は、各次元の添字 NAME(s 1 ,s 2 ,s 3 ) を使用して参照することも、単一の添字 NAME(s 1 ) を使用して参照することもできます。
- 入出力リスト、VECTOR VALUES ステートメント、および一部のサブルーチンでは、A,...,B または A...B という形式のブロック表記を使用できます。これは、A から B までの領域全体を参照します。ベクトルでは、A(1)...A(N) は A(1)、A(2)、A(3)、...、A(N) になります。
- 実行時に次元を変更したり、配列用に確保された全体のブロック内で配列内の最初の要素の位置をプログラマーが変更したり、任意のストレージ マッピングを指定したりできる機能があります。
オペレーター
宣言文
変数は暗黙的または明示的に宣言できます。デフォルトでは、暗黙的に宣言されたすべての変数は浮動小数点であると想定されます。このデフォルトを変更するには、NORMAL MODE IS ステートメントを使用できます。
実行可能なステートメント
入力および出力ステートメント
機能
関数名はピリオドで終わります。内部関数と外部関数がサポートされています。内部関数は、使用されるプログラムの一部としてコンパイルされ、宣言と変数をメイン プログラムと共有します。外部関数は個別にコンパイルされ、宣言と変数を共有しません。内部関数の 1 つのステートメント定義が許可されます。再帰関数は許可されますが、関数は必要な保存と復元の作業の一部を自分で実行する必要があります。
演算子の定義と再定義
MAD の最も興味深い機能の 1 つは、既存の演算子を再定義したり、新しい演算子を定義したり、新しいデータ型 (モード) を定義したりして言語を拡張できることです。定義は、MAD 宣言文と、宣言に続いて操作を実装する END 疑似命令まで含まれるアセンブリ言語ニーモニックを使用して行われます。
- 二項演算子の定義defined-op、 PRECEDENCE rank existing-opモード構造mode-options
- 単項演算子の定義定義された演算子、優先順位ランク 既存の演算子モード構造モードオプション
- モード構造mode-no = mode-no existing-op mode-no
- モード構造mode-no = mode-no existing-op mode-no mode-no existing-op mode-noと同じシーケンス
どこ:
- ランクは、SAME AS、LOWER THAN、HIGHER THAN のいずれかです。
- mode-options は、 MODE STRUCTURE ステートメントに表示されるオプションです。
INCLUDE ステートメントを使用して MAD ソース プログラムに含めることができる、定義済みの 3 つのパッケージ (MATRIX、DOUBLE PRECISION、および COMPLEX) が利用可能です。
- パッケージを含める
参照
注記
- ^ Alt, Franz (1967).コンピュータの進歩.アカデミック・プレス. p. 143. ISBN 0-12-012104-2。
- ^ シュレーガー、ジェフ。 「ヨーゼフ・ワイゼンバウムのオリジナルELIZA」。
- ^ 技術メモ、ミシガン大学コンピューティングセンター出版物、1965-1999
- ^ 技術レポート、ミシガン大学コンピューティングセンター出版物、1965-1999
- ^ トピックファイル 1960-1986、ミシガン大学コンピューティングセンター記録、1952-1996
- ^ MAD (ミシガン アルゴリズム デコーダー) 1960-1979、ミシガン大学コンピューティング センターの記録、1952-1996
- ^ IBM 7090 用ミシガン アルゴリズム デコーダ (MAD) ユーザーズ リファレンス マニュアル、イリノイ大学大学院デジタル コンピュータ研究所、1962 年、221 ページ
- ^ ab ミシガンアルゴリズムデコーダー(MADマニュアル)、ブルースW.アーデン、改訂版1966
- ^ abc George Gray (2002年6月). 「UNIVAC and ALGOL」. Unisys History Newsletter . 6 (2). 2017年6月29日時点のオリジナルよりアーカイブ。
- ^ ab MAD/I マニュアル、Bolas、Springer、Srodawa、CONCOMP 技術レポート 32、1970 年、ミシガン大学、アナーバー、194 ページ
- ^ MTS 第 2 巻: パブリック ファイルの説明、ミシガン大学コンピューティング センター、1990 年、14 ページ
- ^ abcd GOM マニュアル、ドン・ボットナー、ミシガン大学コンピューティングセンター、アナーバー、1989 年 6 月
- ^ abc コンピュータ言語 - 原理と歴史
- ^ 2010年8月、Jean Sammetの「MADはALGOL 58と特に類似していない」という発言について尋ねられたBruce Ardenは次のように書いている。「Jean Sammetに関しては、IALの2つのバージョン(58と60)を混同した可能性があります。後のバージョンとは異なり、58バージョンでは、条件文と転送文を識別するためにどの単語(または言語)を使用するべきかについては何も述べられておらず、解析上の理由からWHENEVERなどの単語が使用されるようになりました。また、MADには58仕様を超える追加機能がいくつかありました。」
- ^ 初期の電子メールとメッセージングに関するドキュメントとソース、トム・ヴァン・ヴレック
- ^ 「... Doug McIlroy と Bob Morris は、Jerry Saltzer の RUNOFF for CTSS の MAD バージョンに基づいて、BCPL で Multics runoff を作成しました。」, 「Multics ソフトウェア機能: セクション 1.7.7」、Multicans Web サイト。2018 年 11 月 10 日閲覧。
- ^ 互換タイムシェアリングシステム(1961-1973):50周年記念概要、David WaldenとTom Van Vleck(編)、2011年、IEEE Computer Society。2018年11月10日閲覧。
- ^ 「Multics の頭字語と用語の用語集」、Tom Van Vleck、Multicans Web サイト。
- ^ Noren, Allen (2009年4月10日). 「ブライアン・カーニガンとのインタビュー:小さな言語の育成」. O'Reilly Community . 2017年6月30日時点のオリジナルよりアーカイブ。 2023年7月28日閲覧。
- ^ シュナイダーマン、ベン、プレイザント、キャサリン(2004年5月7日)。ユーザーインターフェースの設計(第4版)。アディソン・ウェズリー。ISBN 978-0-321-19786-3。
- ^ Galler, Bernard A.; Galler, Enid H. (2001 年 1 月)。「Bernie Galler とのキャリア インタビュー」IEEE Annals of the History of Computing 23 ( 1): 22–33. doi :10.1109/85.910847. ISSN 1058-6180。
参考文献
- MAD コンパイラ言語の簡略化された説明、Fernando J. Corbató、Jerome H. Saltzer、Neil Barta、および Thomas N. Hastings、MIT 計算センター覚書 CC-213、1963 年 6 月。
- CLSYS、大規模(クラスサイズ)バッチでの MAD トランスレータの使用を容易にするプログラム、Jerome H. Saltzer、MIT 計算センター覚書 CC-204。1963 年 2 月。
- 『マッド・ランゲージのためのコンピュータ入門』、エリオット・アーヴィング・オーガニック、1961年。
- MAD トランスレータの内部構成、Arden, BW、Galler, BA、Graham, RM、pp. 28–31、CACM 第 4 巻第 1 号 (1961 年 1 月)
- MAD 言語を使用したアルゴリズム手法入門、Alan B. Marcovitz および Earl J. Schweppe、Macmillan、1966 年。
- デジタル コンピューターと MAD 言語入門、Brice Carnahan、ミシガン大学。
- コンピュータの言語、Bernard A. Galler、ミシガン大学、McGraw-Hill、1962 年。
- ミシガン州の MAD: 機能と特徴、Arden, BW、Galler, BA、Graham, RM、pp27–28、Datamation、第 7 巻第 12 号 (1961 年 12 月)
- ミシガン アルゴリズム デコーダのフローチャート、GB Smith 著、SHARE 一般プログラム ライブラリ、SHARE 配布番号 1327 PA、1961
外部リンク
- Eric Raymond の MAD 用レトロコンパイラ
- MADプログラムの簡単な例
- Dave Pitts の IBM 7094 サポート – MIT バージョンの MAD を含む CTSS 環境を備えています。
