زبان برنامه نویسی **MAD** ( **رمزگشا الگوریتم میشیگان** ) یک زبان برنامه‌نویسی و کامپایلر برای IBM 704 و بعد از آن برای کامپیوترهای اصلی IBM 709 ، IBM 7090 ، IBM 7040 ، UNIVAC 1107 ، UNIVAC 1108 ، Philco 210- IBM و eventual 210. MAD که در سال 1959 توسط برنارد گالر ، بروس آردن و رابرت ام. گراهام در دانشگاه میشیگان ساخته شد ، نوعی از ALGOL است.این زبان این به طور گسترده ای برای آموزش برنامه نویسی در کالج ها و دانشگاه ها در طول دهه 1960 مورد استفاده قرار گرفت و نقش کوچکی در توسعه سیستم های اشتراک زمان سازگار (CTSS)، Multics و سیستم عامل های کامپیوتری سیستم ترمینال میشیگان ایفا کرد در واقع نتوانست به اندازه کافی موثر واقع شود.  نسخه اصلی چت بات ELIZA در MAD-SLIP نوشته شده بود. 

بایگانی‌های کتابخانه تاریخی بنتلی دانشگاه میشیگان حاوی مطالب مرجع در مورد توسعه MAD و MAD/I، از جمله سه فوت خطی چاپ با نمادهای دست‌نویس و دفترچه‌های راهنمای چاپی اصلی است.

**MAD، MAD/I، و GOM**
---------------------

سه عدد کامپایلر MAD وجود دارد:

1. **MAD** اصلی ، این کامپایلر در سال 1959 در دانشگاه میشیگان برای IBM 704 و بعداً رایانه‌های اصلی IBM 709 و IBM 7090 که سیستم‌های اجرایی دانشگاه میشیگان (UMES) و سیستم‌های عامل اشتراک‌گذاری زمان سازگار (CTSS) را اجرا می‌کنند.  در اواسط دهه 1960 MAD در دانشگاه مریلند به UNIVAC 1108 منتقل شد.  نسخه‌های MAD برای Philco 210-211 و UNIVAC 1107 نیز موجود بود .
2. **MAD/I** ، این نسخه «بسط یافته» MAD برای رایانه‌های سری IBM System/360 که تحت سیستم ترمینال میشیگان (MTS) اجرا می‌شوند. کار بر روی کامپایلر جدید در سال 1965 به عنوان بخشی از پروژه CONCOMP تحت حمایت ARPA در دانشگاه میشیگان آغاز شد. با پیشرفت کار، به تدریج مشخص شد که MAD/I یک زبان جدید مستقل از نسخه اصلی 7090 MAD است.
3. **GOM** (Good Old MAD)،این سری نسخه کامپایلر برای پیاده‌سازی مجدد 7090 MAD اصلی برای سری IBM System/370 از رایانه‌های اصلی که سیستم ترمینال میشیگان (MTS) را اجرا می‌کنند. GOM در اوایل دهه 1980 توسط Don Boettner در مرکز محاسبات دانشگاه میشیگان ایجاد شد

**تاریخچه**
-----------

نکته ی جالب این است در حالی که **MAD** توسط ALGOL 58 ایجاد شده بود ، به هیچ وجه شبیه به ALGOL 58 نیست. 

برنامه‌های نوشته شده در MAD شامل MAIL،  RUNOFF ،  یکی از اولین سیستم‌های پردازش متن، و چندین ابزار دیگر همگی تحت سیستم اشتراک‌گذاری زمان سازگار (CTSS) بودند.  کار روی طراحی یک کامپایلر MAD برای Multics انجام شد ، اما هرگز اجرا نشد. 

در زیر نقل قول جالبی از *مصاحبه با برایان کرنیگان*  است را مشاهده میکنید که از او پرسیده شد "چه چیزی شما را به برنامه نویسی جذب کرد؟"

فکر می‌کنم بیشترین لذتی که در برنامه‌نویسی داشتم، کار تابستانی در Project MAC در MIT در تابستان 1966 بود، جایی که من روی برنامه‌ای کار کردم که یک نوار کار برای GE 645 جدید در اولین روزهای Multics ایجاد کرد. من در MAD می نوشتم که بسیار راحت تر و دلپذیرتر از FORTRAN و COBOL بود که قبلاً نوشته بودم و از CTSS استفاده می کردم، اولین سیستم اشتراک زمانی که بی نهایت راحت تر و دلپذیرتر از کارت های پانچ بود.
MAD در مقایسه با برخی دیگر از کامپایلرهای زمان خود بسیار سریع بود. از آنجا که تعدادی از افراد علاقه مند به استفاده از زبان FORTRAN بودند و در عین حال می خواستند سرعت کامپایلر MAD را بدست آورند، سیستمی به نام MADTRAN (نوشته شده در MAD) توسعه یافت. MADTRAN به سادگی یک مترجم از FORTRAN به MAD بود که سپس کد ماشین را تولید کرد. MADTRAN از طریق SHARE توزیع شد. 

**MAD/I** ساختار نحوی مشابه ALGOL 60 همراه با ویژگی های مهم MAD اصلی و PL/I دارد.  MAD/I به عنوان یک زبان توسعه پذیر طراحی شد. برای استفاده تحت MTS در دسترس بود و بسیاری از ایده‌های جدید را ارائه کرد که به زبان‌های دیگر راه یافت، اما تلفیقی MAD/I کند بود و MAD/I در مقایسه با MAD اصلی 7090 هرگز به استفاده گسترده‌ای نرسید. 

**GOM** اساساً این زبان 7090 MAD است که برای معماری 360/370 اصلاح شده و توسعه یافته است و با برخی از خیاطی های عاقلانه متناسب با شیوه ها و مشکلات برنامه نویسی فعلی است.  سیستم پیام MTS در GOM نوشته شده است.

**MAD، مجله Mad، و Alfred E. Neuman**
-------------------------------------

در نسخه پیش از انتشار زبان MAD اصلی، به عنوان ارجاع به همنام MAD، مجله *Mad* ، زمانی که یک برنامه حاوی خطاهای زمان کامپایل بیش از حد بود، کامپایلر یک تصویر تمام صفحه از Alfred E. Neuman را با استفاده از هنر ASCII چاپ می کرد. کپشن این بود: "این مرد را در مورد برنامه خود ببینید - ممکن است بخواهد آن را منتشر کند. او هرگز نگران نیست - اما از نظر ظاهر برنامه شما باید."  این ویژگی در نسخه رسمی نهایی گنجانده نشده است.  با این حال، در نسخه تولیدی IBM 7040 گنجانده شد.

و برنی گالر در مصاحبه ایی به یاد می آورد که:

زمانی که زبانی را طراحی کردیم که فکر می‌کردیم ارزش انجام آن را دارد و می‌توانستیم برای آن یک کامپایلر بسازیم، دیگر نمی‌توانیم آن را الگول بنامیم. واقعا متفاوت بود این زمانی بود که ما نام MAD را برای رمزگشای الگوریتم میشیگان انتخاب کردیم. زمانی که اجازه استفاده از نام MAD را خواستیم، تعامل جالبی با افراد مجله Mad داشتیم. در یک نامه بسیار خنده دار به ما گفتند که ما را به دادگاه و هر چیز دیگری می برند، اما تهدید را با یک PS در پایین پایان دادند - "حتماً، ادامه دهید." متأسفانه آن نامه گم شده است

**تعریف و بازتعریف اپراتور**
----------------------------

یکی از جالب‌ترین ویژگی‌های زبان برنامه نویسی MAD، امکان گسترش زبان با تعریف مجدد عملگرهای موجود، تعریف عملگرهای جدید یا تعریف انواع داده‌های جدید (حالت‌ها) است. تعاریف با استفاده از عبارات اعلان MAD و یادداشت های زبان اسمبلی که پس از اعلان تا شبه دستورالعمل END که عملیات را اجرا می کند، ساخته شده اند.

* DEFINE OPERATOR باینری *تعریف شده-op* , PRECEDENCE *رده بندی موجود-op* MODE SRUCTURE *حالت-گزینه ها*
* DEFINE UNARY OPERATOR *تعریف شده-op* , PRECEDENCE *rank موجود-op* MODE STRUCTURE- *گزینه های حالت*
* MODE STRUCTURE *mode-no* = *mode-no موجود-op mode-no*
* حالت ساختار *حالت-خیر* = *حالت-بدون حالت -عملیات موجود -بدون* دنباله مشابه *حالت-بدون حالت -عملیات موجود -خیر*

جایی که:

* *رتبه* یکی از همان رتبه، پایین تر از، یا بالاتر از. و
* *mode-option ها* گزینه هایی هستند که در عبارت MODE Structure ظاهر می شوند.

سه بسته از پیش تعریف شده از تعاریف (MATRIX، DOUBLE PRECISION و COMPLEX) برای گنجاندن در برنامه های منبع MAD با استفاده از عبارت INCLUDE در دسترس هستند.

همچنین مشاهده کنید:
-------------------

* ALGOL 58
* ALGOL 60

ارجاع:
------

* *An Abbreviated description of the MAD compiler language*, Fernando J. Corbató, Jerome H. Saltzer, Neil Barta, and Thomas N. Hastings, M.I.T. Computation Center Memorandum CC-213, June 1963.
* *CLSYS, a program to facilitate the use of the MAD translator for large (class-size) batches*, Jerome H. Saltzer, M.I.T. Computation Center Memorandum CC-204. February 1963.
* *A Computer Primer for the Mad Language*, Elliott Irving Organick, 1961.
* *Internal organization of the MAD translator*, Arden, B. W. Galler, B. A. and Graham, R. M. pp. 28–31, CACM Volume 4 No. 1 (Jan 1961)
* *An Introduction To Algorithmic Methods Using The MAD Language*, Alan B. Marcovitz and Earl J. Schweppe, Macmillan, 1966.
* *An Introduction to Digital Computers and the MAD Language*, Brice Carnahan, University of Michigan.
* *The Language of Computers*, Bernard A. Galler, University of Michigan, McGraw-Hill, 1962.
* *MAD at Michigan: its function & features*, Arden, B. W. Galler, B. A. and Graham, R. M. pp27–28, Datamation, Volume 7 No. 12 (Dec 1961)
* *Flow Charts of The Michigan Algorithm Decoder*, by G. B. Smith, SHARE General Program Library, SHARE Distribution Number 1327 PA, 1961

پیوند های خارجی:
----------------

* Eric Raymond's retrocompiler for MAD
* A trivial example of a MAD program
* Dave Pitts' IBM 7094 support – Has a CTSS environment that includes the MIT version of MAD.

الگو:ALGOL programming