알골 60
ALGOL 60패러다임 | 절차, 필수, 구조화 |
---|---|
가족 | 인식하다 |
설계자 | 배커스, 바우어, 그린, 카츠, 매카시, 나우르, 펄리스, 루티샤우저, 사멜슨, 반 빈가아든, 보쿠아, 웨그스타인, 우드거 |
처음 등장한 | 전 ( |
타이핑 분야 | 정적, 강력 |
범위 | 어휘 |
영향을 받다 | |
알골 58 | |
영향받은 | |
대부분의 후속 명령어(일명 ALGOL과 유사한 언어), 예를 들어 Simula, CPL, Pascal, Ada, C |
ALGOL 60(Algorithmic Language 1960의 줄임말)은 ALGOL 계열의 컴퓨터 프로그래밍 언어입니다.그것은 코드 블록과 ALGOL 58을 소개한 후begin
그리고.end
이를 구분하기 위한 쌍으로, 구조화된 프로그래밍의 상승에서 중요한 발전을 나타냅니다.ALGOL 60은 어휘적 범위를 가진 중첩 함수 정의를 구현하는 최초의 언어였다.그것은 CPL, Simula, BCPL, B, 파스칼, C를 포함한 많은 다른 프로그래밍 언어들을 탄생시켰다.사실상 그 시대의 모든 컴퓨터는 ALGOL 60 개념을 기반으로 한 시스템 프로그래밍 언어를 가지고 있었습니다.
Niklaus Worth는 Pascal을 개발하기 전에 ALGOL 60을 기반으로 자신의 ALGOL W를 개발했습니다.ALGOL-W는 차세대 ALGOL이 될 예정이었지만, ALGOL 68 위원회는 깔끔한 ALGOL 60이 아닌 보다 복잡하고 고급스러운 디자인을 결정했다.공식 ALGOL 버전은 처음 출판된 해의 이름을 따서 명명되었습니다.알골 68은 알골 60과 상당히 다른데, 부분적으로 그렇게 비판받았기 때문에 일반적으로 "알골"은 알골 60의 사투리를 가리킨다.
표준화
COBOL과 함께 ALGOL 60은 표준화를 추구한 최초의 언어입니다.
- ISO 1538: 1984 프로그래밍 언어– Algol 60 (안정화)
- ISO/TR 1672:1977 ALGOL 기본기호의 하드웨어 표현...(현재 철회)
역사
ALGOL 60은 주로 미국과 유럽의 연구 컴퓨터 과학자들에 의해 사용되었다.설명에 표준 입력/출력 설비가 없고 대형 컴퓨터 벤더의 언어에 대한 관심이 부족했기 때문에 상용 애플리케이션에서의 사용이 저해되었습니다.그러나 ALGOL 60은 알고리즘 출판의 표준이 되었고 미래의 언어 발달에 지대한 영향을 미쳤다.
John Backus는 특별히 ALGOL 58을 위해 프로그래밍 언어를 기술하는 Backus 정규형 방식을 개발했습니다.이것은 피터 나우르에 의해 ALGOL 60용으로 수정되고 확장되었으며, 도널드 크누스의 제안에 따라 바커스-나우르 [1]형태로 개명되었다.
Peter Naur: "ALGOL Bulletin의 편집자로서 저는 ALGOL Bulletin의 국제적인 토론에 참여했고 1959년 11월에 유럽 언어 디자인 그룹의 멤버로 선정되었습니다.저는 1960년 [2]1월 파리에서 열린 ALGOL 60 회의의 결과로 작성된 ALGOL 60 보고서의 편집자였습니다."
파리 회의(1월 11일~16일)에 참석한 사람은 다음과 같다.
- Friedrich L. Bauer, Peter Naur, Heinz Rutishauser, Klaus Samelson, Bernard Vauquois, Adrian van Wijgaarden, Michael Woodger(유럽 출신)
- John W. Backus, Julien Green, Charles Katz, John McCarthy, Alan J. Perlis, Joseph Henry Wegstein (미국 출신)
Alan Perlis는 그 회의에 대해 생생하게 묘사했다: "회의는 지치고, 끝이 없고, 흥분되었다.자신의 좋은 아이디어가 다른 사람의 나쁜 아이디어와 함께 버림받았을 때 사람들은 화가 났다.그럼에도 불구하고, 근면은 전체 기간 동안 지속되었다.13명의 궁합은 훌륭했다.
이 언어에는 원래 재귀가 포함되어 있지 않았습니다.그것은 위원회 [3]일부의 희망에 반하여 막판에 명세서에 삽입되었다.
ALGOL 60은 그 뒤를 잇는 많은 언어에 영감을 주었습니다.토니 호어는 다음과 같이 말했다. "이 언어는 그 시대에 너무 앞서서 이전 언어뿐만 아니라 거의 모든 [4][5]후속 언어들에 대한 개선이었다."
ALGOL 60 구현 일정
지금까지 알골 [6]60의 증가, 확장, 파생 및 하위 언어들이 최소 70건 있었다.
이름. | 연도 | 작가. | 주 | 묘사 | 타깃 CPU | ||
---|---|---|---|---|---|---|---|
X1 ALGOL 60 | 1960년 8월[7] | 에드저 W. 다이크스트라와 야프 A. 조네벨드 | 네덜란드 | ALGOL[8] 60의 최초 구현 | 일렉트로지카 X1 | ||
알골 | 1960년[9] | 에드거 T.다리미 | 미국 | 알골 60 | CDC 1604 | ||
버로스 알골 (몇 가지 종류) | 1961 | Burroughs Corporation (Hoare, Dijkstra 등 참여) | 미국 | Burroughs(현재는 Unisys MCP 기반) 컴퓨터의 기반 | Burroughs 대형 시스템 미드레인지에도 대응하고 있습니다. | ||
케이스 ALGOL | 1961 | 미국 | Simula는 원래 케이스 ALGOL의 시뮬레이션 확장으로 계약되었다. | 유니백 1107 | |||
고골 | 1961 | 윌리엄 M.맥키먼 | 미국 | ODIN 시분할 시스템용 | PDP-1 | ||
다스크알골 | 1961 | 피터 나우르, 예른 젠슨 | 덴마크 | 알골 60 | 레지센트랄의 DASK | ||
SMIL 알골 | 1962 | 토르길 에크만, 칼에릭 프뢰베르크 | 스웨덴 | 알골 60 | 룬드 대학교 SMIL | ||
GIER 알골 | 1962 | 피터 나우르, 예른 젠슨 | 덴마크 | 알골 60 | 레지센트랄의 GIER | ||
다트머스 알골 30[10] | 1962 | 토마스 유진 커츠, 스티븐 갈랜드, 로버트 F.Hargraves, Anthony W. Knapp, Jorge LLacer | 미국 | 알골 60 | LGP-30 | ||
알코르 마인츠 2002 | 1962 | 우르술라 힐-사멜슨, 한스 랑마크 | 독일. | 지멘스 2002 | |||
알코르 일리노이 7090 | 1962 [11][12] | 만프레드 파울, 한스 뤼디거 비엘, 다비드 그리스와 루돌프 바이어 | 미국, 서독 | 알골 60 일리노이 및 TH Munnchen에서 1962-1964년 실시 | IBM 7090 | ||
USS 90 알골 | 1962 | L. 페트론 | 이탈리아 | ||||
엘리엇 알골 | 1962 | C. A. R. 호어 | 영국 | 1980년 튜링상 강연에서 논의되었다. | 엘리엇 803 & 엘리엇 503 | ||
알골 60 | 1962 | 롤랑[13] 스트로벨 | 동독 | 응용수학연구소 베를린 독일과학아카데미 실시 | Zeiss-Rechenautomat ZRA 1 | ||
알골 번역기 | 1962 | G. van der Mey와 W.L. van der Poel | 네덜란드 | Staatsbedrijf der Posterijen, Telegrafie en Telefonie | 얼룩말 | ||
키즈그로브 알골 | 1963 | F. G. 던컨 | 영국 | 영국 전기 회사 KDF9 | |||
스칼프[14] | 1963 | 스티븐 J. 갈랜드, 앤서니 W. 냅, 토마스 유진 커츠 | 미국 | Algol 60의 서브셋용 자급식 ALgol 프로세서 | LGP-30 | ||
밸브 | 1963 | 발 쇼레 | 미국 | META II 컴파일러 테스트 | |||
FP6000 알골 | 1963 | 로저 무어 | 캐나다 | Saskatchewan Power Corporation용으로 작성 | FP6000 | ||
숫돌 | 1964 | 브라이언 랜델과 로포드 존 러셀 | 영국 | 영국 전기 회사의 원자력 부문Ferranti Pegasus, 국립 물리 연구소 ACE 및 English Electric DEUCE 구현의 선구자. | 영국 전기 회사 KDF9 | ||
알골 60 | 1964 | 장클로드 부사르[15] | 프랑스. | Institute d'informatique et mathématiques applies de Grenoble | IBM 7090 | ||
알골 60 | 1965 | 클로드 페어[16] | 프랑스. | Calculate de la Asoulé des Sciences de Nancy | IBM 1620 | ||
다트머스 알골 | 1965 | 스티븐 J. 갈랜드, 사르 블럼슨, 론 마틴 | 미국 | 알골 60 | GE 235를 위한 다트머스 타임셰어링 시스템 | ||
알골 | 1965 | 노르웨이 | 유니백 | ||||
알골 60 | 1965년[17] | F.E.J. 크루즈먼 아레츠 | 네덜란드 | EL-X8용 MC 컴파일러 | 일렉트로지카 X8 | ||
알헤크 | 1965 | 구소련 | 민스크-22 | ALGOL-60 및 COBOL 지원 기반 경제 태스크용 аа ,а 。 | |||
말골 | 1966 | publ. A.Viil, M Kotli & M. Rakhendi, | 에스토니아 SSR | 민스크-22 | |||
알감스 | 1967 | GAMS group (ГАМС, группа автоматизации программирования для машин среднего класса), cooperation of Comecon Academies of Science | 코메콘 | Minsk-22, 이후 ES EVM, BESM | |||
알골/잠 | 1967 | 폴란드 | 폴란드 ZAM 컴퓨터 | ||||
중국 알골 | 1972 | 중국 | 기호 체계로 표현되는 한자 | ||||
DG/L | 1972 | 미국 | DG Eclipse 컴퓨터 제품군 | ||||
나세 | 1990 | 에릭 쇤펠더 | 독일. | 통역사 | Linux 및 MS Windows | ||
마스트 | 2000 | 앤드류 마코린 | 러시아 | Algol-60에서 C로의 변환기 | GNU 컴파일러 컬렉션에서 지원되는 모든 CPU. MARST는 GNU 프로젝트의 일부입니다. |
버로스 방언은 ESPOL과 NEWP와 같은 특별한 시스템 프로그래밍 사투리를 포함했다.
특성.
공식적으로 정의된 ALGOL 60에는 I/O 설비가 없습니다. 구현은 서로 거의 호환되지 않는 방식으로 자체 정의되었습니다.대조적으로, ALGOL 68은 광범위한 전송량 라이브러리(입출력용 ALGOL 68) 기능을 제공했습니다.
ALGOL 60은 파라미터 전달을 위한 두 가지 평가 전략, 즉 값별 공통 콜과 이름별 콜을 제공했습니다.사용하는 각 형식 파라미터에 대해 지정된 프로시저 선언: 값별로 지정된 값, 이름별로 지정된 값에는 생략된 값.이름에 의한 콜은 참조에 의한 콜과는 대조적으로 일정한 효과가 있습니다.예를 들어 매개 변수를 값 또는 참조로 지정하지 않으면 전달되는 실제 매개 변수가 정수 변수와 동일한 정수 [18]변수에 의해 인덱싱된 배열인 경우 두 매개 변수의 값을 스왑하는 절차를 개발할 수 없습니다.(i, A[i])를 함수에 스왑하기 위한 포인터를 전달한다고 합니다.이제 스왑이 참조될 때마다 재평가됩니다.i := 1 및 A [i] := 2라고 하면 스왑이 참조될 때마다 값의 다른 조합([1,2], [2,1], [1,2] 등)이 반환됩니다.랜덤 함수가 실제 인수로 전달되는 경우에도 유사한 상황이 발생합니다.
Call-by-name은 많은 컴파일러 설계자에 의해 구현에 사용되는 흥미로운 "Thunks"로 알려져 있습니다.Donald Knuth는 "재귀 참조와 로컬 참조가 아닌 참조"를 올바르게 구현한 컴파일러를 분리하기 위해 "인간 또는 소년 테스트"를 고안했습니다.이 테스트에서는 이름에 의한 콜의 예를 나타냅니다.
ALGOL 60 예약된 단어 및 제한된 식별자
표준 Burroughs 대형 시스템 하위 언어에는 이러한 예약 단어가 35개 있습니다.
|
|
|
|
|
표준 Burroughs 대형 시스템 하위 언어에는 다음과 같은 제한된 식별자가 71개 있습니다.
|
|
|
|
|
그리고 모든 본질적인 기능들의 이름들도요.
표준 연산자
우선 순위. | 교환입니다. | |
---|---|---|
첫번째 산술적 | 첫번째 | ↑(전원) |
둘째 | ×, /(실제), ((실제) | |
셋째 | +, - | |
둘째 | <, =, >, >, >, ≠ | |
셋째 | § (비탑재) | |
네 번째 | § (및) | |
다섯 번째의 | § (또는) | |
6번째 | § (복제) | |
일곱 번째 | § (인텐스) |
예와 휴대성 문제
코드 샘플 비교
알골 60
절차 Absmax(a) 크기:(n, m) 결과:(y) 첨자:(i, k); 값 n, m; 배열 a; 정수 n, m, i, k; 실수 y; 주석 행렬 a의 절대 최대 요소는 y로 전송되며, 이 요소의 첨자는 i 및 k, p= 정수로 시작됩니다.p 1 ~ m do if abs(a[p, q]) > y의 경우 y := abs(a[p, q]), i := p; k := q end Absmax
굵은 글씨로 된 텍스트를 쓰는 방법은 구현마다 다릅니다.일부 구현에서는 위의 정수 대신 따옴표를 포함하여 'INTEGER'라는 단어를 사용해야 하므로 특수 키워드로 지정해야 합니다.
다음은 엘리엇 803 ALGOL을 [19]사용하여 표를 작성하는 방법의 예입니다.
부동 소수점 ALGOL 테스트' A:= 0.0 D단계에 대해 실제 A,B,C,D'를 시작합니다. 6.3 인쇄를 시작할 때까지, €L? B:= SIN(A)'C:= COS(A)' 인쇄,SAMELINEALIGNED(1,6)C'끝,B.'
ALGOL 60 패밀리
ALGOL 60에는 I/O 설비가 없었기 때문에, ALGOL에는 휴대용 hello world 프로그램이 없습니다.다음 프로그램은 Unisys A-Series 메인프레임용 ALGOL 구현을 컴파일하여 실행할 수 있으며, 미시간 대학교 Dearborn Computer and Information Science Department Hello world의 Language[20] Guide에서 인용한 코드를 단순화한 것입니다.ALGOL 예제 프로그램 페이지.[21]
시작 파일 F(KIND=REMOTE), EBCDIC 어레이 E[0:11], E를 "HELLO WORLD!"로 대체, 쓰기(F, *, E), 종료.
여기서 * 등은 FORTRAN에서 사용되는 형식 사양을 나타냅니다.[22]
인라인 형식을 사용하는 보다 단순한 프로그램:
시작한다. 파일 F(친절한=원격의); 기입하다(F, < >"HELLO WORLD!">); 끝..
Display 문을 사용하여 더욱 심플한 프로그램:
시작한다. 디스플레이("HELLO WORLD!") 끝..
Elliott Algol I/O를 사용하는 다른 예는 다음과 같습니다.엘리엇 알골은 "열린 문자열 따옴표"와 "닫힌 문자열 따옴표"에 다른 문자를 사용했습니다. ' 및 ' 입니다.
프로그램. 하이폴크스; 시작한다. 인쇄물 ‘안녕 세계’ 끝.;
다음은 엘리엇 803 Algol(A104)용 버전입니다. 표준 엘리엇 803은 5홀 종이 테이프를 사용했기 때문에 대문자만 사용되었습니다.코드에는 따옴표 문자가 없기 때문에 £(파운드 기호)는 따옴표로, ?(물음표)는 따옴표로 사용되었습니다.특수 시퀀스는 큰따옴표로 묶었다(예: £L??는 텔레프린터에 새로운 라인을 생성했다).
HIFOLKS의 BEGINT 프린트 helloHELLO WORLD l?끝'
ICT 1900 시리즈 Algol I/O 버전에서는 종이 테이프 또는 펀치 카드로부터의 입력이 가능했습니다.용지 테이프의 「풀」모드로 소문자를 사용할 수 있습니다.출력은 라인 프린터.'('', ')' 및 '%'[23]의 사용에 유의하십시오.
'프로그램'(HELLO) '코멘트' 열기 따옴표는 '(', '닫기'), 인쇄 가능 공간은 공백이 무시되므로 %로 작성해야 합니다. 텍스트('HELLO%WORLD')'; '종료'
「 」를 참조해 주세요.
레퍼런스
- ^ Knuth, Donald E. (December 1964). "Backus normal Form vs Backus Naur Form". Comm. ACM. 7 (12): 735–6. doi:10.1145/355588.365140. S2CID 47537431.
- ^ ACM상 표창 / Peter Naur, 2005
- ^ van Emden, Maarten (2014). "How recursion got into programming: a tale of intrigue, betrayal, and advanced programming-language semantics". A Programmer's Place.
- ^ Hoare, C.A.R. (December 1973). "Hints on Programming Language Design" (PDF). p. 27. (이 스테이트먼트는, 최초의 ALGOL 60 컴파일러의 실장에도 관여하고 있는 Edsger W. Dijkstra에 의해서 잘못 해석되는 경우가 있습니다).
- ^ Abelson, Hal; Dybvig, R. K.; et al. Rees, Jonathan; Clinger, William (eds.). "Revised(3) Report on the Algorithmic Language Scheme, (Dedicated to the Memory of ALGOL 60)". Retrieved 2009-10-20.
- ^ The Encyclopedia of Computer Languages 2011년 9월 27일 웨이백 머신에서 아카이브
- ^ Daylight, E. G. (2011). "Dijkstra's Rallying Cry for Generalization: the Advent of the Recursive Procedure, late 1950s – early 1960s". The Computer Journal. 54 (11): 1756–1772. doi:10.1093/comjnl/bxr002.
- ^ Kruseman Aretz, F.E.J. (30 June 2003). "The Dijkstra-Zonneveld ALGOL 60 compiler for the Electrologica X1" (PDF). Software Engineering. History of Computer Science. Amsterdam: Centrum Wiskunde & Informatica.[영구 데드링크]
- ^ Irons, Edgar T., ALGOL 60용 구문 지시 컴파일러, Communications of the ACM, Vol.4, 페이지 51. (1961년 1월)
- ^ Kurtz, Thomas E. (1978). "BASIC". History of programming languages. pp. 515–537. doi:10.1145/800025.1198404. ISBN 0127450408.
- ^ Gries, D.; Paul, M.; Wiehle, H. R. (1965). "Some techniques used in the ALCOR ILLINOIS 7090". Communications of the ACM. 8 (8): 496–500. doi:10.1145/365474.365511. S2CID 18365024.
- ^ Bayer, R.; Gries, D.; Paul, M.; Wiehle, H. R. (1967). "The ALCOR Illinois 7090/7094 post mortem dump". Communications of the ACM. 10 (12): 804–808. doi:10.1145/363848.363866. S2CID 3783605.
- ^ Rechenautomaten mit Trommelspeicher, Förderverein der Technischen Sammlung 드레스덴
- ^ 커츠, 517쪽, op. cit.
- ^ Jean-Claude Boussard (June 1964). Design and implementation of a compiler Algol60 on electronic calculator IBM 7090/94 and 7040/44 (phdthesis). Institut d'informatique et mathématiques appliquées de Grenoble : Université Joseph-Fourier - Grenoble I.
{{cite thesis}}
: CS1 유지보수: 위치(링크) - ^ Claude Pair (27 April 1965). Description d'un compilateur ALGOL. European Région 1620 Users Group. IBM.
- ^ Kruseman Aretz, F.E.J. (1973). An Algol 60 compiler in Algol 60. Mathematical Centre Tracts. Amsterdam: Mathematisch Centrum.
- ^ Aho, Alfred V.; Ravi Sethi; Jeffrey D. Ullman (1986). Compilers: Principles, Techniques, and Tools (1st ed.). Addison-Wesley. ISBN 978-0-201-10194-2., 섹션 7.5 및 참조사항
- ^ "803 ALGOL", 엘리엇 803 ALGOL 매뉴얼
- ^ "The ALGOL Programming Language". www.engin.umd.umich.edu. Archived from the original on 9 February 2010. Retrieved 11 January 2022.
- ^ "Hello world! Example Program". www.engin.umd.umich.edu. Archived from the original on 4 February 2010. Retrieved 11 January 2022.
- ^ 포트란 번호"Hello, World!"의 예.
- ^ "ICL 1900 series: Algol Language". ICL Technical Publication 3340. 1965.
추가 정보
- Dijkstra, Edsger W. (1961). "ALGOL 60 Translation: An ALGOL 60 Translator for the X1 and Making a Translator for ALGOL 60 (PDF) (Technical report). Amsterdam: Mathematisch Centrum. 35.
- Randell, Brian; Russell, Lawford John (1964). ALGOL 60 Implementation: The Translation and Use of ALGOL 60 Programs on a Computer. Academic Press. OCLC 526731. Whetstone 컴파일러의 설계입니다.컴파일러 구현에 대한 초기 공개 설명 중 하나입니다.관련 문서를 참조하십시오.Whetstone Algol Revisited와 The Whetstone KDF9 Algol Translator by Brian Randell
외부 링크
- Peter Naur 등의 Algorithmic Language Algol 60 개정 보고서ALGOL 정의
- ALGOL 60의 BNF 구문 요약
- "황제의 낡은 옷" – 1980년 Hoare의 ACM Turing Award 연설로 ALGOL의 역사와 그의 관여에 대해 설명
- MARST, Algol-to-C 무료 번역기
- Wayback Machine 토론에서 FP6000 아카이브된 2020-07-25를 위한 ALGOL 60의 구현에 관한 몇 가지 구현 문제
- Naur, Peter (August 1978). "The European Side of the Last Phase of the Development of ALGOL 60". ACM SIGPLAN Notices. 13 (8): 15–44. doi:10.1145/960118.808370. S2CID 15552479.
- Edinburgh University는 Atlas에서 KDF-9로 부트스트랩된 Atlas Autocode 컴파일러를 기반으로 Algol60용 컴파일러(나중에 Algol60M용으로 업데이트됨)를 작성했습니다.Edinburgh 컴파일러는 ICL1900, ICL4/75(IBM360 클론) 및 ICL2900용 코드를 생성했습니다.다음은 Wayback Machine에서 Archived 2020-05-15의 Algol60용 BNF와 Wayback Machine에서 Archived 2020-05-15의 ICL2900 컴파일러 소스, Wayback Machine에서 Archive 2020-05-15의 라이브러리 문서 및 Wayback Machine에서 Archive 2020-05-15의 상당한 테스트 스위트입니다.Wayback Machine에서 보관 2020-05-15 Wayback Machine에서 Atlas 자동 코드 소스 레벨 번역기 보관 2020-05-15도 있습니다.
- Eric S. Raymond's Retrocomputing Museum, 특히 C로 작성된 NACE Algol-60 통역관 링크.
- NACE 인터프리터
- B5000과 거기에 있었던 사람들의 이야기: 전용 ALGOL 컴퓨터 [1], [2]
- Hermann Bottenbruch (1961). "Structure and Use of ALGOL 60". doi:10.2172/4020495. OSTI 4020495.
{{cite journal}}
:Cite 저널 요구 사항journal=
(도움말) - NUMAL A ALGOL 60의 수치 절차 라이브러리는 Stichting Centrum Wiskunde & Informatica (Stichting Mathisch Centrum의 법적 후계자)법적 소유자에서 개발되었습니다.
- Algol 60 리소스: 번역자, 문서, 프로그램
- 알골-60은 라켓에 포함되어 있습니다.