| 狂った | |
|---|---|
| パラダイム | 手続き的、命令的、構造化された |
| 家族 | アルゴル |
| デザイン: | バーナード・ギャラー、ブルース・アーデン、ロバート・M・グラハム |
| 開発者 | ミシガン大学 |
| 初登場 | 1959 (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、後にIBM 709とIBM 7090メインフレームコンピュータ向けに開発されたコンパイラで、UMES( University of Michigan Executive System)とCTSS(Compatible Time-Sharing System )オペレーティングシステムが稼働していました。[ 7 ] [ 8 ] 1960年代半ばに、MADはメリーランド大学でUNIVAC 1108に移植されました。[ 9 ] MADのバージョンはPhilco 210-211とUNIVAC 1107でも利用可能でした。[ 9 ]
- MAD/Iは、ミシガン端末システム(MTS)上で動作するIBM System/360シリーズコンピュータ向けのMADの「拡張」版である。この新しいコンパイラの開発は、1965年にミシガン大学でARPAが後援するCONCOMPプロジェクトの一環として開始された。開発が進むにつれて、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と比較すると、広く普及することはなかった。[ 12 ]
GOMは本質的には7090 MAD言語を360/370アーキテクチャ用に修正・拡張したもので、現在のプログラミング方法や問題にうまく適合するように慎重に調整されています。[12] MTSメッセージシステムはGOMで書かれています。
MAD、マッド誌、アルフレッド・E・ニューマン

オリジナルのMADのプレリリース版では、MADの同名雑誌『マッド』にちなんで、プログラムにコンパイルエラーが多すぎると、コンパイラはASCIIアートでアルフレッド・E・ニューマンの画像を1ページ分印刷していました。キャプションには、「この人にあなたのプログラムについて相談してみましょう。彼は出版したいと思うかもしれません。彼は決して心配しません。しかし、あなたのプログラムを見る限り、あなたは出版すべきです。」と書かれていました。[ 9 ]この機能は最終的な公式版には含まれませんでした。[ 20 ]しかし、IBM 7040の製品版には含まれていました。
そしてバーニー・ギャラーは思い出す。
- 実現する価値があり、コンパイラも作れる言語を設計した頃には、もはやAlgolと呼ぶことはできなくなっていました。全く異なる言語だったのです。そこで、ミシガン・アルゴリズム・デコーダー(Michigan Algorithm Decoder)の頭文字をとってMADという名前を採用しました。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文字です。アスタリスク(*)で始まる行はコメント、プラス記号(+)で始まる行は継続行です。
名前
変数名、関数名、ステートメントラベルはすべて同じ形式で、文字1文字の後に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 )。
- ブール値(真の場合は1B、偽の場合は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)となります。
- 実行時に次元を変更したり、配列用に確保されているブロック全体内で配列の最初の要素の位置をプログラマが変更できるようにしたり、任意のストレージ マッピングを指定できるようにしたりする機能があります。
オペレーター
算術演算子
ポインタ演算子(GOMのみ)
| 関係演算子
ブール演算子
ビット演算子(GOMのみ)
|
宣言文
変数は暗黙的にも明示的にも宣言できます。デフォルトでは、暗黙的に宣言された変数はすべて浮動小数点型とみなされます。このデフォルトを変更するには、NORMAL MODE IS ステートメントを使用します。
|
|
実行可能ステートメント
|
|
入力および出力ステートメント
|
|
機能
関数名はピリオドで終わります。内部関数と外部関数がサポートされています。内部関数は、使用されるプログラムの一部としてコンパイルされ、メインプログラムと宣言と変数を共有します。外部関数は個別にコンパイルされ、宣言と変数を共有しません。内部関数は1つのステートメントで定義できます。再帰関数も使用できますが、必要な保存と復元の一部は関数自身で実行する必要があります。
|
|
演算子の定義と再定義
MADの最も興味深い機能の一つは、既存の演算子の再定義、新しい演算子の定義、あるいは新しいデータ型(モード)の定義によって言語を拡張できることです。これらの定義は、MAD宣言文と、宣言文に続くEND疑似命令(演算を実装する)までに含まれるアセンブリ言語ニーモニックを用いて行われます。
- 二項演算子の定義 defined-op、 PRECEDENCE rank existing-opモード構造mode-options
- DEFINE UNARY OPERATOR defined-op , PRECEDENCE rank existing-op MODE STRUCTURE 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). 『コンピュータの進歩』アカデミック・プレス143ページ. ISBN 0-12-012104-2。
- ^シュレーガー、ジェフ. 「ジョセフ・ワイゼンバウムのオリジナル・エリザ」 . 2021年8月13日時点のオリジナルよりアーカイブ。 2023年1月12日閲覧。
- ^技術メモ、ミシガン大学コンピューティングセンター出版物、1965-1999
- ^技術レポート、ミシガン大学コンピューティングセンター出版物、1965-1999
- ^トピカルファイル 1960-1986、ミシガン大学コンピューティングセンター記録、1952-1996
- ^ MAD (ミシガンアルゴリズムデコーダー) 1960-1979、ミシガン大学コンピューティングセンター記録、1952-1996
- ^ IBM 7090用ミシガンアルゴリズムデコーダ(MAD)ユーザーズリファレンスマニュアル、イリノイ大学大学院デジタルコンピュータ研究所、1962年、221ページ
- ^ a bミシガンアルゴリズムデコーダー(MADマニュアル)、ブルース・W・アーデン、改訂版1966
- ^ a b c George Gray (2002年6月). 「UNIVACとALGOL」 . Unisys History Newsletter . 6 (2). 2017年6月29日時点のオリジナルよりアーカイブ。
- ^ a b MAD/Iマニュアル、Bolas、Springer、Srodawa、CONCOMP技術レポート32、1970年、ミシガン大学、アナーバー、194ページ
- ^ MTS 第2巻:パブリックファイルの説明、ミシガン大学コンピューティングセンター、1990年、14ページ
- ^ a b c d GOMマニュアル、ドン・ボットナー、ミシガン大学コンピューティングセンター、アナーバー、1989年6月
- ^ a b cコンピュータ言語 - 原理と歴史
- ^ 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によるCTSS用RUNOFFのMADバージョンに基づいて、BCPLでMultics runoffを作成しました。」,「Multicsソフトウェア機能:セクション1.7.7」、Multicans Webサイト。2018年11月10日閲覧。
- ^互換タイムシェアリングシステム(1961-1973):50周年記念概要、David WaldenとTom Van Vleck(編)、2011年、IEEEコンピュータ協会。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 月。
- 『A Computer Primer for the Mad Language』、Elliott Irving Organick、1961 年。
- MADトランスレータの内部構成、Arden, BW、Galler, BA、Graham, RM、pp. 28–31、CACM Volume 4 No. 1(1961年1月)
- MAD 言語を使用したアルゴリズム手法入門、Alan B. Marcovitz および Earl J. Schweppe、Macmillan、1966 年。
- デジタル コンピューターと MAD 言語入門、Brice Carnahan、ミシガン大学。
- コンピュータの言語、バーナード A. ギャラー、ミシガン大学、マグロウヒル、1962 年。
- ミシガン州のMAD:その機能と特徴、Arden, BW、Galler, BA、Graham, RM、pp27–28、Datamation、第7巻第12号(1961年12月)
- ミシガンアルゴリズムデコーダのフローチャート、G.B.スミス著、SHARE一般プログラムライブラリ、SHARE配布番号1327 PA、1961年
外部リンク
- Eric Raymond による MAD 用レトロコンパイラ
- MADプログラムの簡単な例
- Dave Pitts の IBM 7094 サポート– MIT バージョンの MAD を含む CTSS 環境があります。