MAD(프로그래밍 언어)
MAD (programming language)패러다임 | 명령적 |
---|---|
개발자 | 갤러, 아르덴, 그레이엄 |
첫 등장 | 1959 |
OS | UMES, MTS, CTSS, 기타 |
주요 구현 | |
IBM 704, IBM 7090, UNIVAC 1108, Philco 210-211, IBM S/360 및 IBM S/370 | |
방언 | |
MAD, MAD/I, GOM | |
영향을 받은 | |
일알, 알골 58 |
MAD(Michigan Algorithm Decoder)는 IBM 704 이상, IBM 709, IBM 7090, IBM 7040, UNIVAC 1107, UNIVAC 1108, Philco 210-211 및 최종적으로 IBM S/370 메인프레임 컴퓨터의 프로그래밍 언어 및 컴파일러다.1959년 버나드 갤러, 브루스 아든, 로버트 M. 그레이엄에 의해 미시간 대학에서 개발된 MAD는 ALGOL 언어의 변종이다.1960년대에는 대학이나 대학에서 프로그래밍을 가르치는 데 널리 사용되었고, CTSS, Multics, 미시간 터미널 시스템 컴퓨터 운영체제의 개발에 작은 역할을 했다.[1]
미시간 대학의 벤틀리 역사 도서관의 자료실에는 손으로 쓴 표기와 원본 인쇄 매뉴얼이 있는 3개의 선형 인쇄물을 포함하여 MAD와 MAD/I의 발전에 관한 참고 자료가 포함되어 있다.[2][3][4][5]
MAD, MAD/I, GOM
다음 세 가지 MAD 컴파일러가 있다.
- Original MAD, 컴파일러는 1959년 IBM 704용 미시간 대학교에서 개발되었으며 이후 IBM 709 및 IBM 7090 메인프레임 컴퓨터가 미시간 대학교 경영진 시스템(UMES)과 CTSS(Compatible Time-Sharing System) 운영 체제를 운영하고 있다.[6][7]1960년대 중반 MAD는 메릴랜드 대학교에서 UNIVAC 1108로 항만되었다.[8]MAD 버전은 필코 210-211과 UNIVAC 1107에도 제공되었다.[8]
- MAD/I는 미시간 터미널 시스템(MTS)에서 실행되는 IBM 시스템/360 시리즈 컴퓨터용 MAD의 "확장" 버전이다.새로운 컴파일러에 대한 작업은 1965년 ARPA가 미시간 대학에서 CONCOMP 프로젝트를 후원하면서 시작되었다.작업이 진행될수록 MAD/I는 원래의 MAD 7090 버전과는 무관한 새로운 언어라는 것이 점차 분명해졌다.[9]
- GOM(Good Old MAD)은 미시간 터미널 시스템(MTS)을 실행하는 IBM 시스템/370 시리즈 메인프레임 컴퓨터의 원래 7090 MAD를 재구성한 것이다. GOM은 1980년대 초 미시간 대학교 컴퓨터 센터의 돈 보트너에 의해 만들어졌다.[10][11]
역사
MAD가 ALGOL 58에 의해 동기부여를 받았으나, 어떠한 의미 있는 면에서 ALGOL 58과 닮지 않았다.[12][13]
MAD로 작성된 프로그램에는 MAIL,[14] LOULEM,[15] 최초의 텍스트 처리 시스템 중 하나 및 CTSS(Compatible Time-Sharing System)에 따른 여러 다른 유틸리티가 포함되었다.[16]MAD 컴파일러 for Multics의 설계에 대한 작업이 수행되었지만, 실행되지 않았다.[17]
다음은 브라이언 케르니건과의 인터뷰(An Interface with Brian Kernigan[18])에서 "프로그래밍에 무엇이 걸렸나?"라는 질문을 받았을 때 나온 흥미로운 인용구다.":
- 내가 프로그래밍을 가장 재미있게 한 것은 1966년 여름 MIT의 Project MAC에서 여름 아르바이트를 한 것으로, 멀티크스 초창기 GE 645라는 브랜드의 직업 테이프를 만드는 프로그램을 작업한 것이었던 것 같다.아까 썼던 FORTRAN, COBOL보다 훨씬 쉽고 즐거운 MAD로 글을 쓰고 있었고, 펀치카드보다 훨씬 쉽고 즐거운 최초의 공유 시스템인 CTSS를 사용하고 있었다.
MAD는 그 시대의 다른 컴파일러들에 비해 상당히 빨랐다.많은 사람들이 FORTRAN 언어 사용에 관심이 있었지만 MAD 컴파일러의 속도를 얻고자 했기 때문에 MADTRAN(MAD로 표기)이라는 시스템이 개발되었다.MADTRAN은 단순히 FORTRAN에서 MAD로 번역한 것으로, 그 후 기계코드를 생산했다.MADTRAN은 Share를 통해 배포되었다.[12]
MAD/I는 원래 MAD와 PL/I의 중요한 특징과 함께 ALGOL 60과 유사한 구문 구조를 가지고 있다.[9] MAD/I는 확장 가능한 언어로 설계되었다.그것은 MTS에서 사용할 수 있었고 다른 언어로 발전한 많은 새로운 아이디어들을 제공했지만, MAD/I 컴파일이 느렸고 MAD/I 컴파일이 원래 7090 MAD와 비교할 때 결코 널리 쓰이지 않았다.[11]
GOM은 본질적으로 360/370 아키텍처에 맞게 변형되고 확장된 7090 MAD 언어로서, 현재의 프로그래밍 관행과 문제에 더 잘 맞도록 일부 현명한 맞춤화가 가능하다.[11]MTS 메시지 시스템은 GOM으로 작성되었다.
MAD, MAD Magazine, Alfred E.네우만
원본 MAD의 발매 전 버전에서, MAD의 네임스케이크인 MAD 매거진에 대한 참조로서, 컴파일러는 컴파일에 너무 많은 시간 오류를 포함했을 때 알프레드 E의 전체 페이지 사진을 인쇄할 것이다. 아스키 아트를 사용하는 Neuman.자막에는 이렇게 적혀 있었다. "당신 프로그램에 대해 이 남자를 보라. 그는 그것을 출판하고 싶어할 것이다.그는 결코 걱정하지 않는다. 하지만 당신의 프로그램을 보면, 당신은 그렇게 해야 한다."[8]이 기능은 최종 공식 버전에 포함되지 않았다.[19]그러나, IBM 7040의 생산 버전에 포함되었다.
그리고 버니 갤러는 다음과 같이 기억한다.
- 우리가 할 가치가 있다고 생각하고 컴파일러를 할 수 있는 언어를 디자인했을 때, 우리는 그것을 더 이상 알골이라고 부를 수 없었다; 그것은 정말 달랐다.그때 우리는 MAD라는 이름을 미시간 알고리즘 디코더로 채택했다.우리가 MAD라는 이름을 사용할 수 있는 허가를 요청했을 때, 우리는 MAD Magazine 사람들과 재미있는 상호작용을 했다.아주 재미있는 편지에서 그들은 우리를 법정과 다른 모든 것으로 데려가겠다고 우리에게 말했지만, 맨 아래 P.S.로 협박을 끝냈다. "그럼, 어서 가봐."불행히도 그 편지는 분실되었다.[20]
"Hello, world" 예
"Hello, world" 예제 프로그램은 "Hello, world"라는 문자열을 터미널 또는 화면 디스플레이에 인쇄한다.
인쇄 형식 헬로우 벡터 값 헬로우=$13h0 Hello, 월드*$ 프로그램 끝
선의 첫 번째 문자는 논리적 캐리지 제어로 취급되며, 이 예에서는 이중 스페이스 선을 인쇄하도록 하는 문자 "0"을 사용한다.
또는 수축을 사용할 수 있으며, 컴파일러는 목록에서 수축을 확장한다.
P'T HELLOW V'S HELLOW=$13h0 Hello, world*$ E'M
언어 요소
MAD/I가 아닌 MAD와 GOM은 다음과 같은 요소로 구성된다.[7][11][12]
입력 형식
MAD 프로그램은 펀치된 카드에 쓰여진 일련의 문장으로, 한 문장이 여러 개의 카드로 이어질 수 있지만 일반적으로 카드당 하나의 문장이 된다.1-10열에는 선택적 문구 라벨이 있고, 11열의 문자 "R"를 사용하여 주석 또는 비고가 플래그 지정되며, 73-80열은 사용되지 않으며 시퀀스 식별자를 포함할 수 있다.공백은 문자 상수 내 이외의 다른 곳에서는 중요하지 않다.GOM 입력은 자유 형식이며 시퀀스 필드가 없고 라인은 최대 255자까지 될 수 있으며 별표(*)로 시작하는 라인은 주석이며 더하기 기호(+)로 시작하는 라인은 연속 라인이다.
이름
변수 이름, 함수 이름 및 문 라벨은 형식이 동일하며, 문자 뒤에 0-5자 또는 숫자가 나타난다.함수 이름은 마침표로 끝난다.모든 이름은 첨자(이름 뒤에 괄호, 여러 개의 첨자를 쉼표로 구분)로 구분할 수 있다.GOM 이름의 경우 최대 24자까지 사용할 수 있으며 밑줄(_) 문자를 포함할 수 있다.
대부분 6자 이상 길거나 마침표로 둘러싸여 있기 때문에 언어의 키워드는 예약 단어인 경우가 거의 없다.긴 단어를 대체하는 데 사용할 수 있는 표준 약어 세트가 있다.이들은 AVERRO가 사이에 있는 키워드의 첫 번째 문자와 마지막 문자로 구성된다. 예를 들어, W'R for NEW와 DIME의 D'N이다.
데이터 유형
MAD는 데이터 유형에 "모드"라는 용어를 사용한다.다음과 같은 5가지 기본 모드가 지원된다.
- 척도 계수(1, +1, -1, 1K10, 1K) 또는 8진수(77777777777777K)로 또는 포함하지 않고 작성된 정수
- 지수(0, 1.5, -0.05, +100.4, -4, 0.05E-2, -.05E2, 5E02, 5)를 사용하거나 사용하지 않고 작성된 부동 소수점.E2);
- 부울(true의 경우 1B, false의 경우 0B);
- 문 레이블 및
- 이름 뒤에 마침표(SQRT)로 쓰여진 함수 이름.
상수의 모드는 상수의 끝에 문자 M에 이어 한 자릿수를 추가하면 다시 정의할 수 있으며, 여기서 0은 부동소수점, 정수 1개, 부울 2개, 함수 이름 3개, 문 라벨 4개를 나타낸다.
GOM의 경우 문자, 짧은 정수, 바이트 정수, 긴 정수, 포인터, 동적 기록 등 6개의 모드가 추가된다.
알파벳 또는 문자 상수는 정수로 저장되며 진정한 달러 기호($.56$는 56센트)를 입력하는 데 사용되는 이중 달러 기호가 있는 구분 기호($ABCDEF$)로 달러 기호를 사용하여 작성된다.6자 이상의 문자열은 배열을 사용하여 표현된다.
배열 및 행렬
- 치수에는 제한이 없다.
- 음과 0은 물론 부동 소수점 첨자도 허용된다.
- 행렬은 가장 오른쪽 첨자를 먼저 변경하여 결정된 순서대로 연속 메모리 위치에 저장된다.
- 행렬은 각 차원의 첨자 NAME을12 사용하거나 단일3 첨자인 NAME을1 사용하여 참조할 수 있다.
- 입력-출력 목록, VECTOR VALUES 문 및 일부 서브루틴에서는 블록 표기법을 사용할 수 있으며, 이 표기법은 A,..., B 또는 A 형식을 가지고 있다.B, A부터 B까지를 포함한 전 지역을 가리키는 말이다.벡터(Vector)의 측면에서 A(1)는...A(N)는 A(1), A(2), A(3), ..., A(N)가 될 것이다.
- 런타임에 치수를 변경할 수 있는 시설이 있고, 프로그래머가 배열을 위해 따로 마련된 전체 블록 내에서 배열의 초기 요소의 위치를 변경할 수 있으며, 임의의 스토리지 매핑을 지정할 수 있다.
연산자
산술 연산자
포인터 연산자(GOM만 해당)
| 관계 연산자
부울 연산자
비트 연산자(GOM만 해당)
|
선언문
변수들은 은연중에 또 명시적으로 공표된다.기본적으로 모든 암시적으로 선언했다 변수가 될 부동 소수 점으로 추정한다.그 NORMAL 모드 성명을 변경하는 데 사용될 수 있다.
|
|
실행 명령문
|
|
입력 및 출력 문
|
|
기능들
함수 이름은 마침표로 끝난다.내부 및 외부 기능이 지원된다.내부 기능은 사용하는 프로그램의 일부로 편성되어 선언서와 변수를 메인 프로그램과 공유한다.외부 기능은 별도로 컴파일되며 선언과 변수를 공유하지 않는다.내부 기능에 대한 하나의 문장이 허용된다.재귀 기능은 필요한 저장 및 복원 작업 자체의 일부를 수행해야 하지만 허용된다.
|
|
연산자 정의 및 재정의
MAD에서 가장 흥미로운 특징 중 하나는 기존 연산자를 재정의하거나, 새로운 연산자를 정의하거나, 새로운 데이터 유형(모드)을 정의하여 언어를 확장하는 능력이다.이 정의는 작업을 구현하는 END 의사 지시까지 선언에 따라 포함된 MAD 선언문과 조립 언어 니모닉을 사용하여 작성된다.
- 바이너리 연산자 정의-op, 우선순위 순위 기존-op 모드 옵션
- 단일 연산자 정의-op, 우선순위 순위 기존-op 모드 옵션 정의
- MODE STRUCTURICE 모드-no = mode-no 기존-op 모드-no
- 모드 구조 모드-아니오 = 모드-기존-op 모드-동일한 시퀀스 AS 모드-기존-op 모드-아니오
여기서:
- 등급은 같음, 낮음 또는 높음 중 하나임.
- 모드 옵션은 MODE STRUCTURE 문에 나타나는 옵션이다.
사전 정의된 세 가지 정의 패키지(MATrix, Double Precision, COMPLECTION)를 ENFER 문구를 사용하여 MAD 소스 프로그램에 포함할 수 있다.
- 포함 패키지
참고 항목
메모들
- ^ Alt, Franz (1967). Advances in Computers. Academic Press. p. 143. ISBN 0-12-012104-2.
- ^ 기술 메모, University of Michigan Computing Center 출판물, 1965-1999
- ^ 기술 보고서, University of Michigan Computing Center 출판물, 1965-1999
- ^ 주제 파일 1960-1986, University of Michigan Computing Center 레코드, 1952-1996
- ^ MAD(Michigan Algorithm Decoder) 1960-1979, University of Michigan Computing Center 레코드, 1952-1996
- ^ 미시간 알고리즘 디코더(MAD) 사용자 참조 매뉴얼 IBM 7090, Digital Computer Laboratory, University of Illinois, 1962, 221페이지
- ^ a b 미시간 알고리즘 디코더(The MAD Manual), 브루스 W.아르덴, 1966년 개정판
- ^ a b c George Gray (June 2002). "UNIVAC and ALGOL". Unisys History Newsletter. 6 (2). Archived from the original on June 29, 2017.
- ^ a b MAD/I 설명서, Bolas, Springer 및 Srodawa, CONCOMP 기술 보고서 32, 1970, University of Michigan, Ann Arbor, 194페이지
- ^ MTS 제2권: 미시간 대학교 컴퓨팅 센터, 1990, 페이지 14
- ^ a b c d GOM Manual, Don Boettner, University of Michigan Computing Center, Ann Arbor, 1989년 6월
- ^ a b c 컴퓨터 언어 - 원리 및 역사
- ^ 2010년 8월 브루스 아든은 "MAD가 ALGOL 58을 어떤 의미심장한 면에서 닮지 않았다"는 진의 새밋의 진술에 대한 질문에 "장 새밋과 관련하여 그녀는 IAL(58과 60)의 두 가지 버전을 혼동했을지도 모른다"고 썼다.이후 버전과 달리 58 버전은 조건부 식별 및 전달 문구를 식별하기 위해 어떤 단어(또는 언어)를 사용해야 하는지에 대해 아무런 언급도 하지 않았고, 그 때문에 NEWY와 같은 단어로 구문 분석하게 되었다.또한 58개 사양을 넘어선 MAD에도 몇 가지 추가 특징이 있었다."
- ^ Tom Van Vleck, Early Electronic Mail and Messaging 문서 및 소스
- ^ "... 더그 매킬로이와 밥 모리스는 제리 솔처(Jerry Saltzer)의 CTSS용 MAD 버전을 바탕으로 BCPL에서 멀티크스 결선투표를 작성했다.", "멀티픽스 소프트웨어 특징: 섹션 1.7.7", 멀티칸스 웹 사이트.2018년 11월 10일 회수.
- ^ 호환 가능한 시간 공유 시스템(1961-1973): 2011년 IEEE 컴퓨터 협회, David Walden과 Tom Van Vleck (Eds), 50주년 기념 개요.2018년 11월 10일 회수.
- ^ 멀티칸스 웹 사이트인 Tom Van Vleck, "Multics 두문자어와 용어"
- ^ 브라이언 커니건과의 인터뷰: 작은 언어들을 길러내는 앨런 노렌, 2009
- ^ Shneiderman, Ben; Plaisant, Catherine (2004-05-07). Designing the user interface (4th ed.). Addison Wesley. ISBN 978-0-321-19786-3.
- ^ Bernard A. Galler; Enid H. Galler (January 2001). "A Career Interview with Bernie Galler". IEEE Annals of the History of Computing. 23 (1): 22–33. doi:10.1109/85.910847. ISSN 1058-6180.
참조
- MAD 컴파일러 언어, 페르난도 J. 코르바토, 제롬 H. 솔처, 닐 바르타, 토마스 N에 대한 축약된 설명.헤이스팅스, M.I.T. 연산 센터 비망록 CC-213, 1963년 6월
- CLSYS는 대형(클래스 사이즈) 배치용 MAD 변환기, 제롬 H. 솔처, M.I.T. 연산 센터 비망록 CC-204의 사용을 촉진하는 프로그램이다.1963년 2월.
- 미친 언어를 위한 컴퓨터 입문서 엘리엇 어빙 오르간릭, 1961.
- MAD 번역기 아르덴, B. W. 갤러, B. A. 및 그레이엄, R. M., 페이지 28–31, CACM 제4권 제1호 (1961년 1월)의 내부 조직
- MAD 언어를 사용한 알고리즘 방법의 소개, Alan B.마르코비츠와 얼 J. 슈베페, 맥밀란, 1966.
- Brice Carnahan, 미시건 대학교의 디지털 컴퓨터와 MAD 언어 소개
- 컴퓨터의 언어 버나드 A.1962년 맥그로우 힐 미시간 대학교 갤러.
- MAD at Michigan: 그 기능 & 특징, Arden, B. W., Galler, B. A. 및 Graham, R. M., pp27–28, Datamisation, 제7권 제12호 (1961년 12월)
- G. B. Smith, Share General Program Library, Share Distribution Number 1327 PA, 1961에 의한 미시건 알고리즘 디코더 흐름도
외부 링크
- Eric Raymond의 MAD 복고 파일러
- MAD 프로그램의 사소한 예
- Dave Pitts의 IBM 7094 지원 – MAD의 MIT 버전을 포함하는 CTSS 환경.