알골 68

ALGOL 68
알골 68
Algol68RevisedReportCover.jpg
알고리즘 언어에 관한 개정 보고서 - Algol 68 편집자: A. van Wijngaarden 외, 1973년 9월[1]
패러다임멀티패러다임:동시,필수
가족인식하다
설계자A. van Wijngaarden, B. J. Mailloux, J. E. L. Peck, C. H. A. 코스터
처음 등장한최종 보고서: 1968년, 54년 전(1968년)r0
안정된 릴리스
Algol 68/RR / 개정 보고서: 1973; 49년 전(1973년)r1
타이핑 분야정적, 강력, 안전, 구조
범위어휘
주요 구현
ALGOL 68C, Algol 68 Genie(최근), ALGOL 68-R, ALGOL 68RS, ALGOL 68S, FLACC, а 68 68 лl 68 лl / Lenegrine Unit, Odra ALGOL 68
사투리
ALGOL 68/FR (최종r0 보고서)
영향을 받다
알골 60, 알골 Y
영향받은
C,[3][5] C++,[6] Bourne 쉘, KornShell, Bash, Steelman, Ada, [7]Python, Seed7, Mary, S3

ALGOL 68(Algorithmic Language 1968의 줄임말)은 ALGOL 60 프로그래밍 언어의 후속으로 생각된 필수 프로그래밍 언어이며, 훨씬 더 넓은 응용 범위와 보다 엄격하게 정의된 구문 및 의미론을 목표로 설계되었습니다.

비표준 용어로 가득 찬 수백 페이지에 이르는 언어의 정의는 복잡하기 때문에 컴파일러 구현이 어려웠으며 "실장도 사용자도 없었다"고 알려져 있습니다.이것은 부분적으로만 해당되었습니다.ALGOL 68은 몇몇 틈새 시장, 특히 International Computers Limited(ICL) 기계와 교사 역할에서 인기가 높았던 영국에서 사용되었습니다.이러한 필드 이외에서는 사용이 상대적으로 제한되었습니다.

그럼에도 불구하고, 컴퓨터 과학 분야에 대한 ALGOL 68의 기여는 깊고 광범위하며 지속적이었지만, 이러한 기여의 대부분은 이후에 개발된 프로그래밍 언어로 다시 등장했을 때만 공개적으로 확인되었습니다.많은 언어들이 언어의 복잡성에 대한 반응으로 특별히 개발되었으며, 가장 주목할 만한 은 파스칼이거나 에이다와 같은 특정 역할을 위한 재실현이었다.

1970년대의 많은 언어들은 특정 역할에 대해 너무 복잡하거나 범위를 벗어난 것으로 여겨졌던 기능들을 버리고 일부 기능들을 선택하면서 그들의 디자인을 특별히 ALGOL 68로 추적하고 있다.에서도 특히 강력한 타이핑과 구조에 의해 ALGOL 68의 직접적인 영향을 받은 언어 C가 있다.대부분의 현대 언어들은 적어도 구문 중 일부를 C 또는 파스칼로 추적하고, 따라서 직간접적으로 ALGOL 68로 추적합니다.

개요

ALGOL68의 특징은 표현식 기반의 구문, 사용자가 선언한 유형 및 구조/태그 부착 유니온, 변수 및 참조 파라미터의 참조 모델, 문자열, 배열 및 매트릭스 슬라이싱 및 동시성을 포함한다.

ALGOL 68은 International Federation for Information Processing(IFIP) IFIP Working Group 2.1에 의해 알고리즘 언어와 계산 관련 설계되었습니다.1968년 12월 20일, 그 언어는 그룹에 의해 공식적으로 채택되었고, IFIP의 총회에 의해 출판이 승인되었다.

ALGOL 68은 Adrian van Vijngaarden에 의해 발명된 형식주의, 2단계 형식 문법을 사용하여 정의되었습니다.Van Wijngaarden 문법은 컨텍스트 프리 문법을 사용하여 특정 ALGOL 68 프로그램을 인식할 수 있는 무한한 생산 세트를 생성합니다.특히, 그들은 많은 다른 프로그래밍 언어 기술 표준에서 의미론이라고 라벨이 붙여지고 모호하기 쉬운 자연 언어 pr로 표현되어야 하는 일종의 요구사항을 표현할 수 있습니다.ose, 그 후 컴파일러에서 정식 언어 파서에 부가된 애드혹코드로 구현됩니다.

ALGOL 68은 구현되기 전에 완전한 정식 정의가 이루어진 최초의 (아마도 마지막) 메이저 언어입니다.

C. H. A. Koster[8]

ALGOL 68의 주요 목적과 설계 원칙은 다음과 같습니다.

  1. 설명의[9] 완전성과 명확성
  2. 설계[10] 직교성
  3. 보안[11]
  4. 효율성:[12]
    • 스태틱 모드 체크
    • 모드에 의존하지 않는 해석
    • 독립된 컴파일
    • 루프 최적화
    • 표현 – 최소 문자 또는 더 큰 문자 집합

ALGOL 68은 C와 같은 디자인 위원회의 일부 멤버들로부터 비판을 받아 왔습니다. A. R. HoareEdsger DijkstraALGOL 60의 단순함을 버리고 복잡하거나 지나치게 일반적인 아이디어를 위한 매개체가 되어 의도적으로 단순한 동시대의 ( 경쟁자)와 대조적으로 컴파일러 라이터의 작업을 쉽게 하기 위해 거의 노력하지 않았다.

1970년에 ALGOL 68-R은 ALGOL 68을 위한 최초의 컴파일러가 되었습니다.

1973년 개정에서는 절차, 꼼마[13]공식 경계와 같은 특정 기능이 [14]생략되었다.수정되지 않은 보고서의 언어입니다.r0

유럽 방위 기관(영국 왕립 신호레이더 확립(RSRE))은 예상되는 보안상의 이점을 위해 ALGOL 68의 사용을 장려했지만, 나토 동맹의 미국 측은 다른 프로젝트인 Ada를 개발하기로 결정하여 미국 방위 계약에 필수적으로 사용하기로 했다.

ALGOL 68은 소련에서도 현저한 영향을 미쳤으며, 자세한 내용은 안드레이 에르쇼프의 2014년 논문 "ALGOL 68과 그것이 소련과 러시아 프로그래밍에 미치는 영향"[15]과 "ALGOL 68과 그 영향"에서 확인할 수 있다.

ALGOL 68 개정 위원회의 멤버였던 Steve Bourne은 아이디어의 일부를 Bourne 쉘(그리고 Bash와 같은 Unix 쉘)과 C(그리고 C++와 같은 후예)에 가져갔다.

프로젝트의 전체 역사는 C. H. 린지의 A History of ALGOL [17][18]68에서 확인할 수 있습니다.

언어에 대한 전체 설명은 시안 마운트배튼 박사의 "AlgOL 68 Made Easy"[19] 또는 Marcel van der Veer의 "Learning ALGOL 68 Genie"[20]를 참조하십시오.

역사

오리진스

이름에서 알 수 있듯이 ALGOL 68은 1960년에 처음 공식화된 ALGOL 언어의 후속 버전입니다.같은 해 국제정보처리연맹(IFIP)은 ALGOL, 즉 WG2.1에 관한 워킹그룹을 결성하여 발족하였습니다.이 그룹은 1962년 4월에 업데이트된 ALGOL 60 사양을 로마에서 발표했습니다.1964년 3월 후속 회의에서 그룹은 두 가지 후속 표준인 ALGOL X와 LISP [21]스타일의 자체 프로그램을 수정할 수 있는 ALGOL Y에 대한 작업을 시작하기로 합의했다.

정의 프로세스

1965년 5월 프린스턴 대학에서 ALGOL X 그룹의 첫 회의가 열렸다.회의의 보고서는 두 가지 널리 뒷받침되는 주제, 즉 강력한 타이핑의 도입과 [22]수집을 다루는 '나무' 또는 '목록'의 오일러 개념에 대한 관심을 주목했다.

10월 프랑스에서 열린 두 번째 회의에서 니클라우스 비르트의 ALGOL W, Gerhard Seegmüler의 유사한 언어인 C.A.R. (토니) Hoare의 기록 구조에 대한 코멘트, Adrian van Wingaarden의 "직교 언어 설계 및 설명"이라는 세 가지 공식 제안이 제시되었다.후자는 거의 해독할 수 없는 "W-Grammar"로 쓰여졌고, 언어의 진화에 결정적인 변화를 가져왔다.회의는 W-Grammar를 [22]사용하여 Worth/Hoare의 제출서를 다시 작성하기로 합의하고 폐막했다.

단순해 보이는 이 작업은 결국 예상보다 더 어려운 것으로 판명되었고 후속 회의는 6개월 연기되어야 했다.1966년 4월 쿠트베이크에서 만났을 때, 반 빈가르덴의 초안은 미완성으로 남아 있었고, 워스와 호아레는 좀 더 전통적인 묘사를 사용한 버전을 제시했다.그들의 논문이 "잘못된 형식주의에서 올바른 언어"[23]라는 것에 일반적으로 동의하였다.이러한 접근법이 탐구됨에 따라 실제 효과가 있는 매개 변수가 기술되는 방식에 차이가 있다는 것이 분명해졌고, 워스와 호어는 더 이상의 지연이 끝이 없을 수 있다고 항의하는 동안 위원회는 반 빈가르덴의 버전을 기다리기로 결정했다.그 후 Worth는 현재의 정의를 ALGOL [24]W로 구현했습니다.

1966년 [25]10월 바르샤바에서 열린 다음 회의에서, 오크리지 국립 연구소와 일리노이 대학에서 만난 I/O 소위원회로부터 초기 보고서가 있었지만, 아직 큰 진전이 없었다.이전 회의의 두 가지 제안은 다시 검토되었고, 이번에는 포인터의 사용에 대한 새로운 논쟁이 일어났다. ALGOL W는 그것들을 레코드만을 참조하는 데 사용한 반면, van Wijngaarden의 버전은 어떤 물체도 가리킬 수 있었다.혼동을 더하기 위해 John McCarthy는 연산자 오버로드와 함께 연결하거나 구성할 수 있는 능력에 대한 새로운 제안을 제시했고, Klaus Samelson은 익명의 함수를 허용하기를 원했다.그 결과 혼란 속에서 모든 [24]노력을 포기하자는 논의가 있었다.1967년 [22]5월 잔드부트에서 ALGOL Y 회의가 열릴 예정이었던 것까지 혼란은 계속되었다.

출판

보고서 초안은 1968년 2월에 마침내 출판되었다.이것은 "충격, 공포, 반대"[22]로 대부분 읽을 수 없는 문법과 이상한 용어들로 인해 충족되었다.찰스 H. 린지는 "언어가 그 안에 숨겨져 있다"[26]는 것을 알아내기 위해 노력했는데, 이 과정에는 6주의 노력이 필요했다.그 결과 나온 논문인 "눈물이 적은 ALGOL 68"이 널리 유포되었다.1968년 5월 취리히에서 열린 광범위한 정보처리 회의에서 참석자들은 그 언어가 그들에게 강요되고 있으며 회의가 대부분 닫혀 있고 공식적인 피드백 메커니즘이 없기 때문에 IFIP가 "이 불합리한 상황의 진정한 악당"이라고 불평했다.Worth와 Peter Naur는 그 [26]당시 WG2.1에서 공식적으로 작가직을 사임했다.

다음 WG2.1 회의는 1968년 6월 티레니아에서 열렸다.컴파일러의 발매나 그 외의 문제에 대해 논의하기로 되어 있었지만, 그 대신에 언어에 관한 논의로 옮겨졌습니다.이에 대해 반 빈가르덴은 한 가지 버전의 보고서만 더 발표하겠다고 답했다.이때쯤이면 나우르, 호아레, 워스는 노력을 떠났고,[27] 몇 명은 그렇게 하겠다고 위협하고 있었다.1968년 8월 노스베릭, 1969년 1월 공식 보고서를 발표했지만 논란의 여지가 있는 마이너리티 보고서가 작성되는 등 여러 회의가 이어졌다.마지막으로 1969년 9월 앨버타주 밴프에서는 프로젝트가 완료된 것으로 간주되어 주로 에라타와 대폭 확대된 [28]보고서 개요에 대해 논의했습니다.

그 노력은 5년이 걸렸고, 컴퓨터 공학계의 많은 위대한 명사들을 불태웠으며, 몇 번인가 정의와 그룹 전체의 문제로 교착 상태에 빠졌습니다.Hoare는 "AlgOL 68에 대한 비판"[29]을 거의 즉시 발표했는데, 이것은 많은 작품에서 널리 언급되어 왔다.워스는 ALGOL W 개념을 더욱 발전시켜 1970년 파스칼로 출시했다.

실장

알골 68-R

1968년 말 초안 보고서에 기초한 이 표준의 첫 번째 구현은 1970년 7월 영국 왕립 레이더 기구에 의해 ALGOL 68-R로 도입되었다.그러나 이것은 완전한 언어의 부분집합이었고, 이 보고서의 최종 편집자인 배리 메일은 "이것은 도덕성에 대한 질문이다.우리는 성경을 가지고 있고 당신은 죄를 짓고 있다![30]그럼에도 불구하고 이 버전은 ICL 기계에서 매우 인기를 끌었고 특히 영국에서 [31]군사 코딩에서 널리 사용되는 언어가 되었습니다.

68-R의 변경 사항 중에는 모든 변수를 처음 사용하기 전에 선언해야 하는 요건이 있었다.이것은 액티베이션레코드의 변수를 위한 공간이 사용되기 전에 확보되었기 때문에 컴파일러를 원패스할 수 있다는 큰 이점이 있었습니다.그러나 이 변경은 PROC를 두 번 선언할 것을 요구하는 부작용도 있었습니다.한 번은 형식 선언으로, 또 다시 코드 본문으로 선언할 것을 요구했습니다.또 다른 변경은 값을 반환하지 않는 표현인 가정된 VOID 모드를 제거하고(다른 언어로 된 문장으로 명명됨), 가정된 곳에 VOID라는 단어를 추가할 것을 요구하는 것이었다.또, 68-R은,[30] PAR근거하는 명시적인 병렬 처리 커맨드를 없앴다.

다른이들

이 언어의 완전한 구현은 1974년 CDC 네덜란드에 의해 제어 데이터 메인프레임 시리즈에 도입되었습니다.이것은 주로 독일과 [31]네덜란드에서 가르치면서 제한적으로 사용되었습니다.

68-R과 유사한 버전은 Carnegie Mellon University에서 68S로 1976년에 도입되었으며, 다시 원패스의 다양한 단순화에 기초한 원패스 컴파일러로, DEC PDP-11과 같은 소형 머신에 사용하기 위한 것입니다.그것 역시 대부분 교육 [31]목적으로 사용되었습니다.

IBM 메인프레임 버전은 1978년 캠브리지 대학에서 출시된 이후에야 사용할 수 있게 되었습니다.이것은 "거의 완성"이었다.린지는 [31]1984년 IBM PC를 포함한 소형 기계용 버전을 출시했다.

다음 3가지 오픈소스 Algol 68 구현이 [32]알려져 있습니다.

  • a68g, GPLv3, Marcel van der Veer에 의해 작성되었습니다.
  • ALGOL 68RS오픈소스 소프트웨어 포트인 algol68toc.
  • Jose E가 작성한 GCC용 실험용 Algol68 프론트 엔드.마르체이[33]

타임라인

연도 이벤트 투고자
1959년 3월 ALGOL 게시판 제1호 (최초) 피터 나우르 / ACM
1968년 2월 초안(DR) 보고서[34] 공개 IFIP 작업 그룹 2.1
1968년 3월 알골68 뮌헨 회의r0 최종 보고서 발표 IFIP 워킹 그룹 2.1
1968년 6월 이탈리아 티레니아에서의 미팅 IFIP 워킹 그룹 2.1
1968년 8월 스코틀랜드 노스베릭에서의 미팅 IFIP 워킹 그룹 2.1
1968년 12월 뮌헨 회의에서 ALGOL 68 최종r0 보고서 발표 IFIP 워킹 그룹 2.1
1970년 4월 ICL 1907GORGE 3 아래의 ALGOL 68-R(R)에프 로열 시그널과 레이더 에스트.
1970년 7월 다트머스 시간 공유[35][36] 시스템용 ALGOL 68 시드니 마셜
1973년 9월 Algol 68 개정[37]r1 보고서 발표 IFIP 워킹 그룹 2.1
1975 ALGOL 68C(C) – 트랜스포터블 컴파일러 (zcode VM) S. 본, 앤드류 버렐, 마이클 가이
1975년 6월 G.E. 헤드릭과 앨런 로버트슨.Oklahoma State ALGOL 68 Subset Compiler. 1975년 ALGOL 68에 관한 국제회의.
1977년 6월 Strathclyde ALGOL 68 회의(스코틀랜드 ACM
1978년 5월 ALGOL H – ALGOL[38] 68의 슈퍼 언어 제안 A. P. 블랙, V. J. 레이워드 스미스
1984 Sun, SPARC 및 PC용 풀 ALGOL 68S(S) 컴파일러 C. H. 린지 외 맨체스터
1988년 8월 ALGOL Bulletin 제52호 (최종) Ed. C. H. 린지 / ACM
1997년 5월 인터넷에[39] 공개된 Algol68(S) S 찰스 H. 린지
2001년 11월 인터넷에[40] 공개된 Algol 68(G) Genie (GNU GPL 오픈소스 라이선스) 마르셀 판 데르 베어

알고리즘 언어 ALGOL 68 보고서 및 작업 그룹 멤버

Van Wijngaarden은 4명의 저자를 Koster: transputter, Peck: synternatemer, Maillous: 실행자, Van Wijngaarden: 정당 이데올로기로 특징지었습니다.– Koster

표준화 일정

1968년: 1968년 12월 20일, "최종 보고서"(MR 101)는 작업 그룹에 의해 채택되었고, 그 후 유네스코 IFIP 총회에 의해 출판이 승인되었다.러시아어, 독일어, 프랑스어, 불가리아어, 일본어[46]중국어로 번역되었다.이 표준은 점자로도 제공되었다.

1984: TC97은 ALGOL 68을 "New Work Item" TC97/N1642[2][3]로 표준화를 검토하였다.서독, 벨기에, 네덜란드, 구소련 및 체코슬로바키아는 표준 마련에 기꺼이 참여했지만, 구소련과 체코슬로바키아는 "적절한 ISO 위원회의 올바른 구성원이 아니었다"며 알골 68의 ISO 표준화가 지연되었다.[5]

1988: 이후 ALGOL 68은 러시아에서 GOST 표준 중 하나가 되었습니다.

  • GOST 27974-88 프로그래밍 언어 ALGOL 68 – 프로그램 언어 ALGOL 68[47]
  • GOST 27975-88 Programming language ALGOL 68 extended – Язык программирования АЛГОЛ 68 расширенный[48]

주요 언어 요소

굵은 기호와 예약된 단어

표준어에는 보통 굵은 글씨로 표시된 약 60개의 예약어가 포함되어 있으며 일부는 "간단한 기호"에 해당합니다.

MODE, OP, PRIO, PROC, FLEX, HEAP, LOC, LONG, REF, SHORT, BITS, BOOL, BYTES, CHAR, COMPL, INT, REAL, SEMA, STRING, VOID, CHANNEL, FILE, FORMAT, STRUCT, UNION, AT "@", EITHERr0, IS ":=:", ISNT IS NOTr0 ":/=:" ":≠:", OF "→"r0, TRUE, FALSE, EMPTY, NIL "○", SKIP "~", CO "¢", COMMENT "¢", PR, PRAGMAT, CASE ~ IN ~ OUSE ~ IN ~ OUT ~ ESAC "( ~   ~  : ~   ~ ~)"~ FROM ~ ~ BY ~ WHILE ~ DO ~ OD, IF ~ THEN ~ ELIF ~ THEN ~ ELSE ~ FI ( ~ : ~ ),  BEGIN ~ END ( ~ ), GOTO, 출구 "□"r0경우.

단위: 식

기본 언어 구성은 단위입니다.단위는 공식, 동봉된 절, 루틴 텍스트 또는 기술적으로 필요한 여러 구성물(할당, 점프, 건너뛰기, 니힐) 중 하나일 수 있습니다.기술 용어 폐쇄 절은 다른 현대 언어에서 block, do 문, switch 문으로 알려진 본질적으로 괄호화된 구조 중 일부를 통합합니다.키워드를 사용하면 일반적으로 인클로저의 끝에는 도입 키워드의 역문자 시퀀스가 사용됩니다(: IF ~ THEN ~ ELSE ~ FI, CASE ~ IN ~ OUT ~ ESAC, FOR ~ WHILE ~ DO ~ OD).이 Guarded Command 구문은 공통 Unix Bourne 쉘에서 Stephen Bourne에 의해 재사용되었습니다.표현식은 또한 부수 절에 의해 다른 값으로부터 구성되는 다중 값을 산출할 수 있다.이 구성은 프로시저 호출의 파라미터 팩과 비슷합니다.

모드: 선언

기본 데이터 유형(호출)modes in Algol 68 paralance)는real,int,compl(복소수),bool,char,bits그리고.bytes. 예:

INT n = 2; CO n은 2의 상수로 고정된다. CO n은 CO INT m : = 3; CO m은 새로 생성된 국소 변수이며, 값은 처음에 3으로 설정되었다. CO CO CO CO CO CO 이것은 ref m = loc int : = 3; CO REAL Avogadro = 6.0221415 23, CO Avogadro의 긴 실수의 약자이다.-1의 루트 = 0 ÷ 1;

단, 선언은REAL x;통사당일 뿐이다REF REAL x = LOC REAL;.그것은,x는 새로 생성된 로컬 REAL 변수에 대한 참조의 상수 식별자입니다.

게다가, 양쪽 모두를 정의하는 것이 아니라float그리고.double, 또는int그리고.long그리고.short, 등, ALGOL 68은 수식자를 제공하므로, 현재 공통인double 예를 들어 LONGREAL 또는 LONGREAL로 표기됩니다.전주 상수 max real그리고.min long int다양한 구현에 맞게 프로그램을 조정하기 위해 제공됩니다.

모든 변수를 선언해야 하지만 처음 사용 전에 선언할 필요는 없습니다.

primitive-declarer: INT, REAL, COMPLEXG, BOOL, CHAR, String, BITS, BYTS, FORMAT, FILE, 파이프G, 채널, SEMA

  • BITSBOOL의 '팩 벡터'
  • 바이트CHAR의 '팩 벡터'
  • STRINGCHAR플렉시블 배열.
  • SEMA오퍼레이터 레벨로 초기화할 수 있는 SEMAphore.

다양한 유형 생성자를 사용하여 단순한 유형에서 복합 유형을 생성할 수 있습니다.

  • REF 모드– C/C++ Pascal의 REF와 유사한 유형 모드의 값을 참조합니다.
  • STRUCT – C/C++의 STRUCT Pascal의 RECORD와 같은 구조를 구축하는 데 사용됩니다.
  • UNION – C/C++ 및 Pascal과 같은 유니언 구축에 사용
  • PROC – C/C++의 함수 및 Pascal의 프로시저/함수 등의 프로시저를 지정하는 데 사용됩니다.

일부 예에 대해서는 ALGOL 68과 C++비교를 참조하십시오.

기타 선언 기호: FLEX, HEAP, LOC, REF, LONG, SHORT, EVENTS

  • 유연성 – 어레이는 유연성이 뛰어나며 필요에 따라 길이를 늘릴 수 있습니다.
  • [HEAP] : 글로벌히프에서 변수를 빈 공간으로 할당합니다.
  • LOC: 변수에 로컬스택의 빈 공간을 할당합니다.
  • 길이 – INT, REAL 또는 COMP가 긴 크기임을 선언합니다.
  • SHORTINT, REAL 또는 COMP가 더 짧은 크기임선언합니다.

모드(유형)의 이름은 모드 선언을 사용하여 선언할 수 있습니다. 모드 선언은 C/C++의 TYPEF 및 Pascal의 TYPE과 유사합니다.

INT max=99; MODE new mode = [0:9][0:max]구조(LONG REAL a, b, c, SHORT INT i, j, k, REF REAL r );

이는 다음 C 코드와 유사합니다.

  컨스턴트 인트 맥스.=99;   유형화된 구조 {       이중으로 하다 a, b, c; 짧다 i, j, k; 흘러가다 *r;   } 새로운 모드[9+1][맥스.+1]; 

ALGOL68은 등호 왼쪽에 NEWMODE 모드 표시만 나타나며, 가장 주목할 만한 것은 우선순위에 관계없이 왼쪽에서 오른쪽으로 구성이 이루어져 읽을 수 있다.또한 Algol 68 배열의 하한은 기본적으로 1이지만 -max int ~ max int의 임의의 정수일 수 있습니다.

모드 선언을 사용하면 유형을 재귀화할 수 있습니다. 직접 또는 간접적으로 그 자체로 정의할 수 있습니다.여기에는 몇 가지 제한이 따릅니다.예를 들어, 다음과 같은 선언은 불법입니다.

모드 A = REF A 모드 A = 구조(A, B) 모드 A = PROC(A) A

다음 항목이 유효한 경우:

모드 A = 구조(참조 A, B) 모드 A = PROC(참조 A) REF A

강압: 캐스팅

강압은 세 가지 기준에 따라 강압으로부터 강압을 생산한다: 강압의 적용 전 강압의 선험적 모드, 강압의 후순적 모드, 강압의 구문적 위치 또는 "정렬".강압은 계단식으로 진행될 수 있습니다.

가능한 6가지 강압을 디프로세싱, 디프로세싱, 디레퍼런스, 통합, 확대, 조정, 배뇨라고 한다.결합을 제외한 각 강요는 관련된 값에 대응하는 동적 효과를 규정한다.그러므로, 많은 원시적인 행동들은 강압에 의해 암묵적으로 프로그램될 수 있다.

콘텍스트 강도– 허용 강제:

  • 소프트 – 절차 해제
  • 약한 – 비논리적이거나 절차 해제되어 이름 붙임성
  • meek – 회의 또는 절차 해제
  • 단단함 – 온순함, 그 후 단결함
  • 강한 – 단단하고 그 뒤에 확폭, 노 젓기 또는 배뇨가 뒤따른다.

예가 있는 강제 계층

ALGOL68은 프로그램 내의 특정 포인트에서 이용 가능한 강압의 종류를 결정하는 콘텍스트의 계층을 가진다.다음의 콘텍스트가 있습니다.

맥락
컨텍스트 위치 강제 사용 가능 콘텍스트에서의 강제 예시
부드러운
약한
미크
회사.
강한.
강한.
오른쪽:
  • 아이덴티티 선언(~)은 다음과 같습니다.REAL x = ~
  • 초기화('~'로 표시):REAL x := ~

기타:

  • 에서 "~"와 같은 콜의 실제 파라미터:PROC: sin(~)
  • 다음에서 "~"와 같이 캐스트 절을 동봉합니다.REAL(~)
  • 루틴 텍스트 단위
  • VOID를 산출하는 스테이트먼트
  • 균형 절의 모든 부분(하나 제외)
  • 아이덴티티 관계의 일면(다음에서 "~"로 표시: ~ IS ~
절차 해제
모든 SOFT 및 Weak Derferencing(디레퍼런스 또는 디프로시저링, 이름 생성)
모두 WEARK 후 회의 해제(회의 해제 또는 절차 해제)
모든 MICK 후 통합
모든 것이 단단해진 후 확폭, 조정 또는 배뇨

정밀도 손실이 없는 경우 확폭구간이 발생합니다.예를 들어 다음과 같습니다.INTREAL로, REALLONG REAL로 강제됩니다.하지만 그 반대는 아니다.예:

  • INT에서 Long INT로
  • INT to Real
  • 고객님께는 진짜
  • BITS to [ ]B울다
  • 바이트문자열

변수를 길이 1의 배열로 강제(행)할 수도 있습니다.

예를 들어 다음과 같습니다.

  • INT to [1]인트
  • REAL to [1]REAL 등
회사.
  • 수식의 연산자 "~"는 다음과 같습니다.OP: ~ * ~
  • 트랜스포트 콜의 파라미터
예:

UNION(INT,REAL) var := 1

미크
  • Trimscripts(INT 실행)
  • 문의: 아래 예: "~"

IF ~ THEN ... FI그리고.FROM ~ BY ~ TO ~ WHILE ~ DO ... OD etc

  • 콜의 프라이머리(예: sin(x)의 sin)
예:
  • Ref Ref BOOL에서 BOOL로
  • 참조 참조 INT에서 INT로
약한
  • 슬라이스의 주: "~"와 같이~[1:99]
  • 2차 선택 항목(다음에서 "~"로 표시:value OF ~
예:
  • Ref BOOL에서 Ref BOOL로
  • 참조 INT에서 참조 INT로
  • REF REF REAL REF REAL
  • REF REF 구조물과 REF 구조체 연결
부드러운
할당의 LHS(~)는 다음과 같습니다.~ := ... 예:
  • 절차 해제:PROC REAL random: e.g. random

프라이머리, 세컨더리, 제3 및 제4의 상세한 것에 대하여는, 오퍼레이터의 우선 순위를 참조해 주세요.

PR & co: 프래그마트와 코멘트

플러그매트는 프로그램 내의 지시어로 컴파일러에 대한 힌트입니다.새로운 언어에서는 "pragmas"('t' 없음)라고 부릅니다.

PRUGMAT 힙=32 PRUGMAT PR 힙=32 PR

코멘트는 다양한 방법으로 삽입할 수 있습니다.

① 프로그램에 2센트 상당의 코멘트를 추가하는 원래의 방법  코멘트 「대담한」코멘트 코멘트 i 코멘트 CO# Style i 코멘트 # Style i 코멘트 # £ 이것은 영국 키보드의 해시/파운드 코멘트입니다.

통상은, 코멘트는 ALGOL 68 에 네스트 할 수 없습니다.다른 코멘트 딜리미터를 사용하면 이 제한을 회피할 수 있습니다(예를 들어 일시적인 코드 삭제에만 해시 사용).

표현식 및 복합문

ALGOL68은 표현 지향 프로그래밍 언어이며, 할당문에 의해 반환되는 값은 수신처에 대한 참조이다.따라서 유효한 ALGOL 68 코드는 다음과 같습니다.

REAL 하프 파이, 1 파이, 1 파이 : = 2 * ( 하프 파이 : = 2 * 아크 태닝 (1) )

이 개념은 특히 CPerl에 존재합니다.Algol 60 및 FORTRAN 등의 이전 언어에서와 마찬가지로 식별자에 공백이 허용되므로half pi단일 식별자입니다(밑줄낙타 대 소문자 대 소문자모든 문제를 회피합니다).

또 다른 예로, 합계의 수학적 아이디어를 표현하기 위해f(i)i=1에서 n까지는 다음 ALGOL 68 정수식으로 충분하다.

(INT sum : = 0, FOR i TO n DO sum +:= f(i) OD, sum)

정수 표현식이기 때문에 이전 코드 블록은 정수 값을 사용할 수 있는 모든 컨텍스트에서 사용할 수 있습니다.코드 블록은 마지막으로 평가한 식 값을 반환합니다. 이 아이디어는 다른 언어 중에서도 리스프에 있습니다.

복합문은 모두 고유한 닫힘 괄호로 끝납니다.

  • IF 선택 절:
IF 조건 THEN 스테이트먼트 [ELSE 스테이트먼트]FI "개요" 형식: ( condition 스테이트먼트)
IF condition 1 THEN 스테이트먼트 ELIF condition 2 THEN 스테이트먼트 [ELSE 스테이트먼트]FI "개요" 형식: ( condition 1 스테이트먼트: condition 2 스테이트먼트)

이 스킴은, 행잉 하는 그 외의 문제를 회피할 뿐만 아니라,BEGIN그리고.END내장 스테이트먼트시퀀스에 포함되어 있습니다.

  • CASE 선택 조항:
케이스 스위치 입력 문, 문...[OUT 스테이트먼트] ESAC "개요" 형식: ( switch 스테이트먼트, 스테이트먼트 등)스테이트먼트)
케이스 스위치1 입력문, 문...OUSE 스위치2 IN 문, 문...[OUT 스테이트먼트] ESAC의 CASE 스테이트먼트의 "개요" 형식: ( switch1 스테이트먼트, 스테이트먼트 등): switch2 문, 문...스테이트먼트)

간단한 기호가 있는 선택 절 예제:

의 PROC 일수 = (INT 년, )INT: (31번째 달, (year××4=0 ∧ year××10000 ∨ year××400=0 29 28), 31, 30, 31, 31, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 31, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30

굵은 기호가 있는 선택 절 예제:

의 PROC 일수 = (INT 년, )INT: 사례월 31일 MOD 4 EQ 0  연도 MOD 100 NE 0 또는 연도 MOD 400 EQ 0에 이어 29 기타 28 FI, 31, 30, 30, 30, 30, 31, 31, 31 ESAC;

굵은 글씨 기호와 간단한 기호를 혼합한 선택 절 예제:

의 PROC 일수 = (INT 년, )INT: CASE month IN 「Jan」31 「Feber」(연식 MOD 4 = 0 AND year MOD 100 0 0 OR year MOD 400 0 0 29 28 ), 「Mar」31, 30, 31, 30, 31, 31, 31, 31, 31, 31, 12월~12월 ESAC.

Algol68에서는 스위치를 INT 타입 또는 (고유한) UNION 타입 중 하나로 할 수 있습니다.후자를 사용하면 UNION 변수(예: 아래 c.f. union)에 강력한 입력을 적용할 수 있습니다.

  • do loop 구:
[ 색인] [처음부터] [증분 기준] [마지막까지] [WHEN 조건] DO  OD "루프 절"의 최소 형식은 다음과 같습니다: DO  OD

이것은 「범용」루프로 간주되어 완전한 구문은 다음과 같습니다.

i의 경우 i×i do4444 DO ~ OD 동안 -22 ~ -333까지

이 구조에는 몇 가지 특이한 측면이 있습니다.

  • DO ~ OD 부분만 필수이며, 이 경우 루프가 무기한 반복됩니다.
  • 따라서 TO 100 DO ~ OD는 100회만 반복됩니다.
  • WHILE "통사적 요소"를 통해 프로그래머는 FOR 루프에서 조기에 벗어날 수 있었습니다.
INT sum sq:=0, FOR i WHIRE print("지금까지:",i,newline), sq≠70↑2 DO sum sq+=i↑2 OD

표준 Algol68에 대한 후속 "확장"을 통해 TO 구문 요소UPTO로 대체하고 DOWNTO를 통해 작은 최적화를 달성할 수 있었다.같은 컴파일러에도 다음 컴파일러가 포함되어 있습니다.

  • [TIL] : 레이트루프 종료용(C).
  • FOREACH(S) – 어레이 병렬 작업용.

그 외의 예는, 다음의 코드 예제는 다음과 같습니다.

구조, 조합 및[:]: 구조, 유니언 및 어레이

ALGOL68은 임의의 수의 치수를 가진 배열을 지원하며 전체 또는 일부 행 또는 열을 슬라이스할 수 있습니다.

모드 벡터 = [1:3] REAL, # 벡터 모드 선언(표준) # 모드 매트릭스 = [1:3, 1:3]REAL; # 매트릭스 모드 선언(정렬 정의) # VECTER v1 := (1,2,3) # []REAL v2 = (4,5,6) # 상수 배열, VECTER와 동등유형, 경계가 암묵적 # OP + = (Vector a,b) 벡터 정의자 #2진수 OPVE #ut); MATrix m : = (v1, v2, v1+v2); print ((m[,2:]); # 두 번째 및 세 번째 열의 슬라이스

행렬은 어떤 방식으로든 슬라이스할 수 있습니다. 예:

REF 벡터 행 = m[2,]; # 두 번째 행에 대한 REF(영역) 정의 # REF 벡터 col = m[,2]; # 두 번째 열에 대한 REF(영역) 정의 #

ALGOL 68은 다중 필드 구조(STRUCT) 및 통합 모드를 지원합니다.참조 변수는 배열 슬라이스 및 구조 필드를 포함한 모든 MODE를 가리킬 수 있습니다.

예를 들어 기존의 링크드리스트 선언을 다음에 나타냅니다.

MODE NODE = UNION (VOID, REAL, INT, CONF, STRING), 목록 = 구조(NODE val, REF LIST 다음);

NODEUNION CASE 사용 예:

1968년 최종 보고서와 같은 Algol68r0 1973년 개정 보고서와 같은 Algol68r1
노드 n := "1234"; REAL r; INT i; CONF c; STRING s CASE r,i,c:=n IN print("real:",r), print("int("int:",i), print("com:), c)), print("clint("cling:", c)), print("string("string:", s"), s)Out(?, s) 출력 출력(?, s) ES.
노드 n : = "1234"; # 또는 n : = EMTY; # CASE n IN (VOID) : print ("class:", "EMPTY"), (REAL r) : print ("real:", r), (INT i) : print ("int ("int:), (compled) , cring S , string

proc: 절차

프로시저(PROC) 선언에는 파라미터와 결과 모두에 대한 유형 지정이 필요합니다(없을 경우 VOID).

실제의 PROC 최대값 = (REAL a, b) REAL: a > b이면 ELSE b FI;

또는 조건문의 "displicate" 형식을 사용하여 다음을 수행합니다.

실제의 PROC 최대치 = (REAL a, b) REAL: (a>b a);

의 반환값proc는 절차에서 평가된 마지막 식 값입니다.절차(ref proc)에 대한 참조도 허용된다.참조에 의한 콜 파라미터는 참조를 지정함으로써 제공됩니다(예:ref real)를 참조해 주세요.다음 예제에서는 배열의 각 요소에 함수(파라미터로 지정)를 적용하는 절차를 정의합니다.

PROC 적용 = (참조 [] REAL a, PROC (REAL) REAL f): i의 경우 LWB a에서 DO a[i] : = f(a[i] OD

ALGOL 68의 이전 ALGOL 60에서는 이러한 간단한 코드를 달성할 수 없었습니다.

op: 연산자

프로그래머는 새로운 연산자를 정의할 수 있으며, 이들 연산자와 미리 정의된 연산자 모두 오버로드되어 코더에 의해 우선순위가 변경될 수 있습니다.다음으로 연산자를 정의하는 예를 나타냅니다.MAX(배열 요소 전체에 걸쳐) 쌍방향 버전과 단방향 버전을 모두 포함합니다.

PRIO MAX = 9; OP MAX = (INT a,b) INT: (a,b) OP MAX = (a,b) REAL: (a>b); OP MAX = (COMP a,b) COMP: (AB); OP MAX = (real)

배열, 절차, 참조 해제 및 강제 작업

우선 순위 조작 +Algol68r0 +Algol68G
효과적으로 12
(프라이머리)
역참조, 절차 해제(~,~), 첨자화[~], 조정[~,], 슬라이스[~~], 크기 표시 LONG & SHORT 절차 카레링(~...), DIAG, TRNSP, ROW, COL
효과적으로 11
(세컨더리)
OF (선택사항), LOC & HEAP (제너레이터) →(수직) 신규(제너레이터)

이들은 기술적으로 연산자가 아니라 "이름과 관련된 단위"로 간주됩니다.

모나치 연산자

우선 순위
(일기)
알골68 "가치있는 캐릭터[6]"r0&r1 +Algol68r0&r1 +Algol68C,G +Algol68r0
10 ~, , 아래, LWB, , 가 아닙니다.

-, ABS, ARG, BIN, ENTIER, LENG, LEVEL, ODD, REPR, 원형, 단축

¬, ↑, ↓, ⌊, ⌈ 노름, 트레이스, T, DET, INV LWS, UPS, ,, ,, ,, BTB, CTB

연관된 우선순위가 있는 이진 연산자

우선 순위
(일기)
알골68 "가치있는 캐릭터"r0&r1 +Algol68r0&r1 +Algol68C,G +Algol68r0
9 +*, I +×, ⊥ !
8 SHL, SHR, **, 위, 아래, LWB, ↑, ↓, ⌊, ⌈ ××, ^, LWS, UPS, ,, ⎧
7 *, /, %, OVER, %*, MOD, ELEM ×, ÷, ÷×, ÷*, %×, □ ÷:
6 -, +
5 <, LT, <=, LE, >=, GE, >, GT ≤, ≥
4 EQ =, NE ~= /= ≠, ¬=
3 &, /\
2 또는 \/
1 MINUSAB, PLUSAB, TIMESAB, DIVAB, OVERAB, MODAB, PLUSTO,

-:=, +:=, *:=, /:=, %:=, %*:=, +=:

×:=, ÷:=, ÷×:=, ÷*:=, %×:= 마이너스, 플러스, DIV, OVERB, MODB, §:=, PRUS

특정 상세:

  • Tertiary에는 NIL 및 ○ 이름이 포함됩니다.
  • LWS: Algol68에서는r0 어레이 치수의 하한 상태가 수정되면 LWS와 ... 모두 TRUE를 반환합니다.
  • UPS 연산자와 are 연산자는 상부 상태에서도 유사합니다.
  • LWBUPB 연산자는 배열 순서가 다른 UNION( MODE)에서 자동으로 사용할 수 있습니다.예: 유니언의 UPB([]int, [,]real, flex[....,]char)

양도·신분관계 등

이들은 기술적으로 연산자가 아니라 "이름과 관련된 단위"로 간주됩니다.

우선 순위
(4진수)
알골68 "가치있는 캐릭터"r0&r1 +Algol68r0&r1 +Algol68C,G,R +Algol68r0
사실상 0 :=, IS :=:, ISNT :/=:~=:, AT @, ":", ";" :≠: :¬=: :=CR:=, =:= ..=, .=, CT, ::, CTAB, ::=, ..는 "..", "가 아닙니다.

주의: 4진수에는 SKIP 및 ~라는 이름이 포함됩니다.

":=:"(대체로 "IS")는 두 포인터가 동일한지 테스트하고, ":/=:"(대체로 "ISNT")는 서로 다른지 테스트합니다.

:=: 및 :/=:가 필요한 이유:포인터 투 정수로서 선언된 다음 변수와 같은2개의 포인터 값을 비교하는 것을 검토해 주세요.

REF INT ip, jp

이제 이 두 개가 같은 위치를 가리키고 있는지 또는 둘 중 하나가 NIL을 가리키고 있는지 여부를 결정하는 방법을 검토합니다.다음 식

ip = jp

= 연산자는 INT에 대해 정의되지만 REF INT에 대해서는 정의되지 않으므로 두 포인터를 INT 유형의 으로 참조 해제하고 비교합니다.적용 가능한 암묵적 강제 때문에 호출이 모호해지기 때문에 REF INT와 INT 유형의 피연산자에 대해 "="를 동시에 정의하는 것은 합법적이지 않습니다. 피연산자는 REF INT로 남겨두고 호출된 연산자 버전은 그대로 두어야 합니까?아니면 INT와 그 버전을 더 참조해야 합니까?따라서 다음 표현은 결코 합법화될 수 없습니다.

ip = NIL

따라서 운영자에 대한 오퍼랜드에 대한 일반적인 강제 규칙의 적용을 받지 않는 개별 구조의 필요성.하지만 거기엔 잡혔어.다음 표현은 다음과 같습니다.

ip :=: jp
ip :=: NIL

합법적이긴 하지만, 아마 예상대로는 하지 않을 겁니다.변수의 실제 주소를 비교하고 있기 때문에 항상 FALSE를 반환합니다.ip그리고.jp그들이 지적하는 것 보다.올바른 효과를 얻으려면 다음과 같은 글을 써야 합니다.

ip :=: REF INT(jp)
ip :=: REF INT(NIL)

특수 문자

APL 기호가 있는 IBM 2741 키보드

Algol의 "특수" 문자 대부분은 IBM a 2741 키보드에서 찾을 수 있습니다( most, ,, ,, ,, ,, ↓, ↑, ,, □, ,, ), □).이러한 문자는 Unicode 표준의 일부이기도 하며, 대부분의 문자는 몇 가지 일반적인 글꼴로 사용할 수 있습니다.

전송량:입출력

Transput은 ALGOL 68의 입출력 설비를 가리키는 용어입니다.여기에는 비정형, 포맷 및 바이너리 전송량에 대한 사전 정의된 절차가 포함됩니다.파일 및 기타 전송 장치들은 일관되고 기계에 의존하지 않는 방식으로 처리됩니다.다음으로 표준 출력 디바이스에 포맷되지 않은 출력을 출력하는 예를 나타냅니다.

print (new page, "Title", "newline", "i 값", "x[i]는 ", x[i], newline)

사전 정의된 절차를 메모합니다.newpage그리고.newline인수로 통합니다.

서적, 채널 및 파일

TRANSPUTBOOKS, CHANNELFILE로 간주됩니다.

  • 은 페이지, 행, 문자로 구성되며 파일로 백업될 수 있습니다.
    • 특정 책을 이름으로 찾을 수 있습니다.match.
  • CHANNEL은 카드 펀치 및 프린터와 같은 물리적 장치에 해당합니다.
    • 스탠드 인 채널, 스탠드 아웃 채널, 스탠드 백 채널의 세 가지 표준 채널이 있습니다.
  • 파일(FILE)은 특정 채널을 통해 열린 프로그램과 책 사이의 통신 수단입니다.
    • 파일의 MOOD는 읽기, 쓰기, char, bin 및 열 수 있습니다.
    • 트랜스포트 순서는 다음과 같습니다.establish, create, open, associate, lock, close, scratch.
    • 위치 문의:char number, line number, page number.
    • 레이아웃 루틴에는 다음이 포함됩니다.
      • space,backspace,newline,newpage.
      • get good line, get good page, get good book,그리고.PROC set=(REF FILE f, INT page,line,char)VOID:
    • 파일에는 이벤트 루틴이 있습니다.on logical file end, on physical file end, on page end, on line end, on format end, on value error, on char error.

포맷된 전송량

ALGOL 68의 트랜스포트 중 "Formatted transput"은 고유한 구문과 패턴(기능)을 가지고 있으며 두 개의 $ 문자 사이에 [49]FORMAT이 포함되어 있습니다.

예:

printf ( ( $ 2l " ) prints 、 " x , g ( 0 ) 、 m + n ) ; prints는 다음과 같이 인쇄합니다. ( ( new line , new line , " the sum is : ) , space , ( ( ( m + n , 0 )

par: 병렬 처리

ALGOL68은 병렬처리의 프로그래밍을 지원한다.키워드 PAR를 사용하여 부수구병렬구로 변환하고 여기서 동작의 동기화를 세마포어를 사용하여 제어한다.A68G에서는 병렬 액션이 호스팅 운영 체제에서 사용 가능한 경우 스레드에 매핑됩니다.A68S에서는 병렬 처리의 다른 패러다임이 구현되었습니다(아래 참조).

PROC eat = VoID: (머핀-:=1; 인쇄("염!", 새 라인), 말 = VOID: (words-:=1; 인쇄("야크...", 새 라인), INT 머핀:= 4, 단어: = 8; SEMA houth = LEVEL 1; PAR BOINS > 0 DOUND, MUSPINGE: (WINSE: 0: 0: 0)

사용 예

코드샘플

이 샘플 프로그램은 100보다 작은 모든 소수를 찾기 위해 에라토스테네스의 를 구현합니다.NIL은 다른 언어의 늘 포인터의 ALGOL 68 아날로그입니다.x OF y 표기STRUCT y멤버 x에 액세스합니다.

BEGIN#Algol-68 소수 능력 기능 스타일)제안된 작전 운영 요구 능력 오류#(sSTRING)VOID:(인쇄((newline,"오류:", s, 줄 바꿈));GOTO 정류장), 제안된 작전 운영 요구 능력 하나 =(INTn)목록:(제안된 작전 운영 요구 능력 f)(INTm,n)목록:(m>, nAA는 찬반(m, f(m+1,n)));f(1,n). 모드 LIST)REFNODE, 모드 NODE)STRUCT(INTh, LISTt), 제안된 작전 운영 요구 능력에 대한 장단점=(절대 말 안 할 거야, LIST. l=목록:  노드: = (n,l), PROC hd = (l IS NIL 오류"hd NIL") INT: (l) SKIP h, PROC tl = (l) 목록: (l IS NIL 오류"hd NIL"); PROC = (l) 목록: (l)(l) THEN cons(hd(l), filter(p, tl(l)) FI; PROC 체 = (LIST l) LIST: lNIL일 경우 NIL LESS ROC는 다중이 아닌 = (INT n) BOOL: n MOD hd(l) = 0gl(l)(hd), cons; conscene filter(l)

ALGOL 68로 작성된 운영 체제

  • 캠브리지 CAP 컴퓨터 – 운영체제를 구성하는 모든 절차는 ALGOL 68C로 작성되었지만 페이지 관리자 등 밀접하게 연관된 다른 몇 가지 보호 절차는 BCPL로 [50]작성되어 있습니다.
  • Eldon 3 – ICL 1900용으로 리즈 대학에서 개발ALGOL 68-R.[51]
  • Flex Machine – 하드웨어는 커스텀 및 마이크로프로그래밍이 가능하며 운영체제, (모듈러형) 컴파일러, 에디터, 가비지 콜렉터 및 파일링 시스템이 모두 ALGOL 68RS로 작성되었습니다.명령[52] 셸 Curt는 Algol-68 모드와 유사한 입력 데이터에 액세스하도록 설계되었습니다.
  • VMES3operating system VME의 실장 언어입니다.S3는 ALGOL 68에 근거하고 있었지만, ICL 2900 시리즈가 제공하는 데이터 타입과 연산자에 대응하고 있습니다.

주의: 소련 시대의 컴퓨터 【Elbrus-1】와 【Elbrus-2】는, 종래의 어셈블리가 아니고, 고도의 언어인 【Elbrus-76】(AL-76)를 사용해 작성되었습니다.л--76은 Algol-68과 비슷합니다.주요 차이점은 하드웨어 수준에서 지원되는 ль-76의 다이내믹바인딩 타입입니다.응용 프로그램, 작업 제어, [53]시스템 프로그래밍에 사용됩니다.

적용들

ALGOL 68CALGOL 68-R은 모두 ALGOL 68로 쓰여져 있어 ALGOL 68은 사실상 그 자체로 응용된다.기타 응용 프로그램에는 다음이 있습니다.

라이브러리 및 API

  • NAG 수치 라이브러리– 수치 분석 루틴의 소프트웨어 라이브러리.1980년대에 ALGOL 68에서 공급되었습니다.
  • TORIX – S. G. van der Meulen 및 M.의 가변 크기 및 임의 필드의 벡터 및 행렬 연산을 위한 프로그래밍 시스템.벨드호스트.[55]

프로그램 표현

ALGOL 68의 특징은 ALGOL의 전통을 계승한 것으로, 그 표현 방법이 다릅니다.인쇄물의 알고리즘을 기술하기 위해 사용되는 표현 언어, 엄격한 언어(보고서에서 엄격하게 정의) 및 컴파일러 입력에 사용되는 공식 참조 언어가 있습니다.이 예에는 굵은 글씨체 단어가 포함되어 있습니다.이것은 STRICT 언어입니다.ALGOL 68의 예약된 단어는 효과적으로 식별자와 다른 네임스페이스에 존재하며 식별자에 공백이 허용되므로 다음 조각은 합법입니다.

INT a real int = 3 ;

실행 가능한 코드를 쓰는 프로그래머가 항상 굵은 글씨 또는 밑줄 옵션을 선택할 수 있는 것은 아닙니다.이것은 하드웨어 및 문화적인 문제에 따라 다를 수 있습니다.이러한 식별자를 나타내는 다른 방법이 고안되었습니다.이것은 스트로핑 체제라고 불립니다.를 들어, 다음 중 일부 또는 전부를 사용할 수 있습니다.

INT a real = 3; # strict language # 'INT'A REAL INT = 3; # Quote stropping style #.INT A REAL INT = 3; # POINT 스트로핑 스타일 # INT a = 3; # UPER 스트로핑 스타일 # int a_real_int = 3; # RES 스트로핑 스타일, 61개의 허용되는 예약 단어가 있습니다.

모든 구현은 PRUGMAT 섹션 내에서 적어도 POINT, UPER 및 RES를 인식해야 합니다.이 중 POINT 및 UPER 스트로핑은 매우 일반적인 반면 RES 스트로핑은 사양에 위배됩니다(예약된 단어가 없기 때문에).원래 권장사항은 견적(단일 아포스트로피 인용)이었지만 ALGOL 60에서는 일반적으로 사용되는 일치 아포스트로피 인용은 ALGOL [56]68에서는 많이 사용되지 않습니다.

Wayback Machine에서 Archived 2014-01-02의 Algol 68 표준 하드웨어 표현에 관한 보고서에서는 휴대성을 위해 다음 문자를 권장하고 "가치 있는 문자"로 명명했습니다.

  • ^ 적절한 문자: ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "#$%'()*+///:;<=>@[]_

이는 1960년대 일부 하드웨어가 소문자를 지원하지 않거나 다른 비ASC를 지원하지 않는 문제를 반영하고 있습니다.실제로 1973년 보고서에는 "4개의 가치 있는 문자 - ", ", ", " ", ", " "-"라고 쓰여져 있었다. 명목상 동일한 문자 집합을 사용하는 설치에서도 종종 다르게 코드화된다.

  • 기본 문자: "가치 있는 문자"는 "기본 문자"의 하위 집합입니다.

다양한 프로그램 표현 예시

표현 코드
Algol68 "엄격"
통상적으로 출판된 바와 같이
 밑줄 또는 굵은 글씨체 mode MODE XINT = INT; XINT sum sq:=0; FOR WHIEN sum sq7070×70 DO sq+:=i↑2 OD
견적 스트로핑
(Wikitext 등)
'pr' 따옴표 'mode' 'xint' = 'int'; 'xint' 합 sq:=0; 'while' i 'while' 합 sqc470×70 'do' sq+↑i↑2 'od'
7비트 문자 코드 컴파일러의 경우
.PR UPER.PR 모드 XINT = INT; XINT 합계 sq:=0; i WHIENT 합계 sq/=70*70 DO 합계 sq+:=i**2 OD
6비트 문자 코드 컴파일러의 경우
.PR POINT.PR.MODE.XINT = .INT; .XINT SUM SQ:=0;SUM SQ를 위해.NE 70*70.DO SUM SQ.PLUSAB I.UP 2 .OD
RES 스트로핑을 사용한Algol68
(단어)
.PR RES.PR 모드 .xint = int; .xint sum sq:=0, sq7070×70의 경우 sq+=i=2 od

ALGOL 68은 모든 자연어가 자체 키워드 Algol-68을 정의할 수 있도록 합니다.그 결과 프로그래머는 모국어의 키워드를 사용하여 프로그램을 작성할 수 있습니다.다음은 "다음 날"을 계산하는 간단한 절차의 예입니다. 코드는 두 가지 언어로 구성되어 있습니다.영어와 독일어.[citation needed]

#다음 날 date-영어 변종)모드 작업)STRUCT(INT날, STRING 달 INT년), 제안된 작전 운영 요구 능력은 다음 날)( 날자))일자:만약 날의 x<, 길이의 한달(x의 달, x의 해)한다면(x+1의 날, x의 달, x의 해)ELIF 달의 x)"12월"한다면(x의 1,"1월", 1년+1)ELSE(1, 후임.nth(OF x월), OF x년) FI;
#Nachfolgetag-도이치 Variante#MENGE DATUM)TUPEL(GANZ 태그 WORT monat, GANZ jahr), FUNKTIONnaechster 태그 nach)(DATUM))DATUM:WENN태그 VON)<>monatslaenge(monat VON),jahr VON))DANN(태그 VON x+1,monat VON),jahr VON))WENNABER monat VON)="Dezember"DANN(1,"Januar",jahr VON x+. 1)ANSONSTEN (1, nachfolgemonat (monat VON x), jahr VON x) ENDEWEN;

러시아/소련의 예:영어 Algol68의 케이스스테이트먼트에서는 CASE ~IN ~OUT ~ESAC, 키릴어에서는 CASE ~ ~ ~ ~ ~ , ~ и ~ и ~ ы ~ ы ~ ы ~ ы ~ ы ~ ы ~ ы ~ in in case case case case case case case case case로 되어 있습니다.

일부 Vanitas

ALGOL 68은 기술적인 복잡성으로 인해 어떤 것의 존재를 부정하기 위한 다양한 방법이 필요합니다.

SKIP, "~" 또는 "?"C – 정의되지 않은 값은 항상 구문적으로 유효하며, UNION, VOID에서 VOID를 선택하는 데 필요한 유일한 값이며, MODE와 같이 구문적으로 필요한 값이지만, NIL 또는 "○"는 하나, 지정되지 않은 기준 모드의 아무 것도 나타내지 않는 이름() 또는 구체적으로 [1:0]입니다.INT진공은 빈 어레이입니다(여기서는 MODE []INT).undefined – 런타임시스템에서 예외를 발생시키는 절차를 표준에서 보고합니다.§ – SEMA 등 특정 유형의 자기성찰을 금지하기 위해 표준 보고서에서 사용

§의 다른 예에 대해서는 아래의 c.f.를 참조해 주십시오.

NIL IS var라는 용어는 항상 모든 변수에 대해 TRUE로 평가되지만(IS :/=:의 올바른 사용에 대해서는 위의 항목을 참조), 어떤 정수 x에 대해 비교 x < SKIP가 평가하는지 알 수 없습니다.

ALGOL68은 정수 오버플로우 시 발생하는 일, 정수 비트 표현 및 부동 소수점 수치 정밀도를 의도적으로 정의하지 않은 상태로 둔다.이와는 대조적으로 자바 언어는 후자를 지나치게 지정한다는 비판을 받아왔다.

두 공식 보고서 모두 표준 언어의 일부가 아닌 몇 가지 고급 기능을 포함했습니다.이것들은 「」로 표시되어 사실상 비공개라고 생각됩니다.예를 들어 템플릿의 경우 """ 및 """, 조잡한 덕 타이핑의 경우 OUTTYPE/INTYPE, 중첩된 배열 및 구조를 "스트레이트"하기 위한 STRAYOUTSTRAYTIN 연산자가 있습니다.

1973년 보고서에서 발췌:

§10.3.2.2.전송 모드 a) MODE  SIMPLEOUT = UNION (  intINT 、 ≯ REAL 、  CONF 、 BOOL 、 ℒ≯≯≯≯≯≯≯≯≯≯≯≯≯≯≯≯≯≯≯≯≯≯≯≯≯≯≯≯≯≯≯≯≯≯≯≯≯ trans trans trans); b) MODE ℵtype OUTTYPE = 충분한 모드 세트를 지정하지 않은 실제 디클라어를 지정합니다.INT", "REF "REAL", "REF " CONF", "REF BOOL", "REF " BITS", "REF CHAR", "REF [] CHAR, REF STRING"); d) MODE " INTYPE ="...¢;   §10.3.2.3.직선화 a) OP straight STRAYOUT = (OUTTYPE x) [ ] SIMPLUT: the "rengthing" 'x' ¢ b) OP straight STRAYIN = (INTYPE x) [ ] 심플린: "x" ; ; ; ¢ ¢ ¢ ¢ straight ¢ straight straight straight straight straight straighteningening ening straight straight straight straight straight ening ening straight ening ening straight straight straight straight straight ening ening ening ening straight

다른 언어와의 비교

리비전

특별한 언급이 없는 한 (와 함께) 상기의 언어는 "개정(r1) 보고서"의 언어입니다.

수정되지 않은 보고서의 언어

원래 언어('최종 보고서'r0에 따라)는 모드 캐스트의 구문이 다르며, 용어의 값을 평가하는 절차로 강제하는 절차적 특징이 있다.절차는 평가를 게을리하게 하기 위한 것이다.가장 유용한 애플리케이션은 부울 연산자의 단락 평가일 수 있습니다.입력:

OP ANDF = (BOOL a, PROC BOOL b)BOOL: (a FALSE), OP ORF = (BOOL a, PROC BOOL b)BOOL: (A TRUE b);

b는 a가 참일 경우에만 평가됩니다.

ALGOL 68에서 정의한 바와 같이 다음 코드 등에서는 정상적으로 동작하지 않았습니다.

FALSE ANDF CO proc bool: CO ("실행하면 안 됩니다"); True경우... 

프로그래머의 순진한 기대와는 달리 인쇄는 ANDF 이후 상세하게 정리된 조항의 만 적용되기 때문에 실행됩니다.코멘트 아웃된 PROC BOOL: 를 텍스트로 삽입하면 동작합니다.

일부 구현에서는 언어를 확장함으로써 이 특별한 경우에 예상되는 동작을 에뮬레이트합니다.

수정 전에 프로그래머는 콤마(gommas) 대신 세미콜론을 사용하여 콜레라 대신 프로시저의 인수를 순차적으로 평가하도록 결정할 수 있습니다.

예를 들어 다음과 같습니다.

PROC 테스트 = (REAL a; REAL b) :... 테스트 (x PLUS 1, x);

테스트하는 첫 번째 인수는 두 번째 인수가 되기 전에 반드시 평가됩니다.다만, 통상은 다음과 같습니다.

PROC 테스트 = (REAL a, b) :... 테스트 (x PLUS 1, x);

그러면 컴파일러는 어떤 순서로든 주장을 평가할 수 있습니다.

IFIP WG 2.1로부터의 확장 제안

보고서 개정 후 적용 범위를 넓히기 위해 언어의 일부 확장이 제안되었습니다.

  • 부분 매개 변수(일명 Currying): 호출에 대한 모든 매개 변수(예: base와 인수)의 함수 로그는 자연 로그, 이진 로그 또는 십진 로그로 특화할 수 있지만 일부 지정에 의한 함수(일명 Currying)를 생성한다.
  • 모듈 확장: 외부 링크의 지원을 위해 두 가지 메커니즘이 제안되었습니다.하향식 정의 모듈, ALGOL 68-R하향식 홀에서 보다 강력한 버전의 설비입니다.ENVIRON그리고.USINGALGOL 68C[58] 조항
  • 모드 파라미터: 제한된 파라미터 다형성 구현(리스트, 트리 또는 기타 데이터 컨테이너와 같은 데이터 구조에 대한 대부분의 조작은 유료 부하에 영향을 주지 않고 지정할 수 있습니다).

지금까지 Algol 68 Genie에서는 부분 파라미터화만 구현되었습니다.

진정한 ALGOL 68s 사양 및 구현 일정

이름. 연도 목적 묘사 타깃 CPU 라이선스 구현 언어
일반화된 ALGOL 1962 과학적인 NL 일반 문법용 ALGOL
알골 YY 1966 제안서 초안 국제 알골 68의 첫 번째 버전 사양 ACM
알골DR 68 1968 제안서 초안 국제 IFIP WG 2.1 초안 보고서 사양 – 3월 ACM
알골r0 68 1968 표준. 국제 IFIP WG 2.1 최종 보고서 사양 – 8월 ACM
알골 68-RR 1970 군사의 영국 ICL 1900 알골 60
EPOS 알골E 1971 과학적인
알골 68RSRS 1972 군사의 영국 휴대용 컴파일러 시스템 ICL 2900/시리즈 39, 멀티픽스, VMS 및 C 제너레이터(1993) 크라운 저작권 알골 68RS
알골 68(지역 포함) 1972 실험 및 기타 영국 Algol 68에 영역 추가
미니 알골 68 1973 조사. NL "심플한 Algol 68 프로그램용 인터프리터" 2011-07-18 Wayback Machine 아카이브 휴대용 인터프리터 마티슈 센트룸 알골 60
오레가노 1973 조사. 미국 "실장 모델의 중요성" UCLA
알골 68CC 1975 과학적인 영국 케임브리지 알골 68 ICL, IBM 360, PDP 10 및 Unix, Telefunken, Tesla 및 Z80(1980)[59] 케임브리지 알골 68C
ALGOL 68 개정 보고서r1 1975 표준. 국제 IFIP WG 2.1 개정 보고서 사양 ACM
알골 HH 1975 실험 및 기타 영국 Algol 68 모드 시스템 확장 제안 사양 알골 W
오드라 알골 68 1976 실용. 소련/폴란드 오드라 1204/IL 소비에트 알골 60
오클라호마 알골 68 1976 프로그래밍 명령 미국 오클라호마 주립 대학교 구현[60] IBM 1130시스템/370/158 알 수 없는 ANSI Fortran 66.
베를린 알골 68 1977 조사. DE "베를린 ALGOL 68의 [61]실장" Abstract ALGOL 68 머신– 머신에 의존하지 않는 컴파일러 베를린 공과대학교 CDL 2
플래시F 1977 다목적 CA 수정 보고서 디버깅 기능을 사용한 완전한 구현 시스템/370 시온 주식회사 리스 어셈블러
알골 68-RTRT 1979 과학적인 영국 병렬 ALGOL 68-R
RS 알골rs 1979 과학적인 영국
알골 68 이상 1980 과학적인 NL ALGOL[62] 68의 슈퍼 언어 제안 언어
M-220 알골 68 구소련 M-220 소비에트 엡실론
레닌그라드 알골 68L 1980 전기 통신 구소련 풀 언어 + 모듈 IBM, DEC, CAMCOH, PS 1001 및 PC 소비에트
인터랙티브 ALGOL 68I 1983 영국 증분 컴파일 PC 비상업적 공유 소프트웨어
알골 68SS 1985 과학적인 국제 ALGOL 68의 Sun 버전 Sun-3, Sun SPARC(SunOS 4.1 및 Solaris 2 사용), Atari ST(GEMDOS 사용), Acon Archimedes(RISC OS 사용), VAX-11(Ultrix-32 사용)
Algol68toC[63](ctrans) 1985 일렉트로닉스 영국 ELLA ALGOL 68RS로부터의 ctrans 휴대용 C 제너레이터 오픈 소스 소프트웨어 1995 알골 68RS
MK2 인터랙티브 ALGOL 68 1992 영국 증분 컴파일 PC 비상업적[64] 공유 소프트웨어
알골 68 지니G 2001 완전한 언어 NL 표준 담보 조항 포함 휴대용 인터프리터 GPL C
Algol 68 Genie 버전 2010 완전한 언어 NL 휴대용 인터프리터, 선택한 유닛의 컴파일(옵션 GPL C

ICL 2900 시리즈에서 ICL VME 운영 체제 및 기타 많은 시스템 소프트웨어를 작성하기 위해 사용된 S3 언어는 Algol 68의 직접 파생 언어입니다.다만, 보다 복잡한 기능의 대부분은 생략하고, 2900 시리즈의 하드웨어 아키텍처에 직접 매핑되는 데이터 타입의 세트로 기본 모드를 대체했습니다.

구현 고유의 확장

RRE의 ALGOL 68R은(R) ICL 1900에서 실행되는 최초의 ALGOL 68 서브셋 구현입니다.원래의 언어에 근거해, 주된 서브셋의 제한은, 사용전에 정의되어 병렬 처리가 없는 것이었습니다.이 컴파일러는 1970년대 영국 대학에서 인기를 끌었으며, 많은 컴퓨터 공학 학생들이 ALGOL 68을 첫 프로그래밍 언어로 배웠다. 이 컴파일러는 좋은 오류 메시지로 유명했다.

RSRE의 ALGOL 68RS는(RS) ALGOL 68RS(ALGOL 68R에서 부트스트랩됨)로 작성된 휴대용 컴파일러 시스템으로 ICL 2900/시리즈 39, Multics 및 DEC VAX/VMS를 포함한 다양한 시스템에 구현되었습니다. 이 언어는 개정 보고서에 기반했지만 ALGOL 68RS와 유사한 제한이 있었습니다.이 컴파일러는 Algol68-to-C 컴파일러 형태로 유지됩니다.

Carnegie Mellon University의 ALGOL 68S에서는(S) 직교 확장 기능을 추가하여 병렬 처리 능력을 향상시켰습니다.키워드 EVENT를 포함한 변수 선언은 이 변수에 대한 할당을 병렬 평가 대상으로 합니다.즉, 오른쪽이 C.mp 멀티프로세서 시스템의 프로세서 중 하나로 이동된 절차로 지정되었습니다.할당 종료 후 이러한 변수에 대한 액세스가 지연되었습니다.

Cambridge ALGOL 68C(C) ALGOL 68의 서브셋을 구현한 휴대용 컴파일러로 연산자 정의를 제한하고 가비지 수집, 유연한 행 및 포맷된 전송량을 생략했습니다.

Algol 68(G) Genie by M. van der Veer는 오늘날의 컴퓨터와 운영체제를 위한 ALGOL 68 구현입니다.

"좋은 의도에도 불구하고 프로그래머가 실수로 로컬 내선번호를 사용함으로써 휴대성을 위반할 수 있습니다.이를 방지하기 위해 각 실장에서는 PORTCHECK 플러그매트옵션을 제공해야 합니다.이 옵션이 유효한 동안 컴파일러는 일부 휴대성 [65]제약 조건을 위반했다고 인식되는 각 구성 요소에 대해 메시지를 출력합니다."

견적서

  • C가 채택한 유형 구성 방식은 알골 68에 상당한 빚을 지고 있지만, 알골의 추종자들이 승인할 만한 형태로 나타나지는 않았을 것이다. 내가 알골에서 포착한 중심 개념은 원자형(구조 포함)에 기초한 유형 구조였고 배열, 포인터(참조), 함수(절차)로 구성되었다. 알골68의 조합과 배역 개념도 나중에 나타난 영향을 미쳤다.Dennis Ritchie 1993년 [2]4월.
  • ...C는 알골 68에서 내려온 것은 사실이지만, 영향이 너무 미묘해서 아무리 생각해도 회복하기 어렵다. 특히 조합 유형(C에 늦게 추가된 것)은 A68에 대해 어떠한 세부사항도 아니지만 그러한 유형을 갖는다는 개념에서 의무가 있다. 좀 더 깊이 있게 말하면, 일반적인 활자 구조와 심지어 어떤 이상한 방법으로 선언 구문(활자-구성자 부분)은 A68에서 영감을 얻었다. 네, 물론 "길어요"데니스 리치, 1988년 6월[4] 18일
  • "축하합니다. 마스터가 해냈습니다." – Niklaus[66] Worth
  • 보면 볼수록 불행해진다 - E. W. Dijkstra, 1968[67]
  • A68의 인기는 암스테르담과의 거리에 반비례했다고 한다. - 귀도로섬[68]
  • [...] 우리가 할 수 있는 최선의 방법은 소수 보고서를 함께 보내는 것입니다.이 보고서에는, 「...고도의 프로그램을 신뢰성 있게 작성하기 위한 툴로서 언어는 실패였습니다.」라고 기재되어 있습니다.[...] - 1980년 10월 튜링상[69] 강연에서 C. A. R. Hoare는
  • "..." 그 어느 때보다 적절한 프로그래밍 툴로부터 필요한 것은 프로그래머가 업무에서 가장 어려운 부분인 고도의 프로그램을 안정적으로 만들 수 있도록 구조적으로 지원하는 것입니다. 이 점에서 우리는 여기서 제안된 언어가 어떻게 중요한 진전인지 알 수 없습니다.반대로 프로그래머의 과제에 대한 암묵적인 견해는 예를 들어 10년 전과 매우 비슷하다고 생각합니다. 이것은 프로그래밍 도구로 간주되는 언어는 구식으로 간주되어야 한다는 결론을 강요한다.[...][70] 1968년 12월 23일 작업 그룹의 소수 보고.

「 」를 참조해 주세요.

레퍼런스

인용문

  1. ^ van Wijngaarden, Adriaan; Mailloux, Barry James; Peck, John Edward Lancelot; Koster, Cornelis Hermanus Antonius; Sintzoff, Michel; Lindsey, Charles Hodgson; Meertens, Lambert Guillaume Louis Théodore; Fisker, Richard G., eds. (1976). Revised Report on the Algorithmic Language ALGOL 68 (PDF). Springer-Verlag. ISBN 978-0-387-07592-1. OCLC 1991170. Archived (PDF) from the original on 2019-04-19. Retrieved 2019-05-11.
  2. ^ a b Dennis Ritchie (April 1993). "The Development of the C Language" (PDF). Archived from the original (PDF) on 2005-11-06. Retrieved 2007-04-26.
  3. ^ C에 대한 영향: 유형, 구조, 배열, 포인터 및 프로시저– Dennis Ritchie[2]
  4. ^ a b Dennis Ritchie (June 1988). "C and Algol 68". Retrieved 2006-09-15.
  5. ^ C에 미치는 영향: 조합, 구조, 구문 및 정밀도– Dennis Ritchie[4]
  6. ^ "A History of C++: 1979−1991" (PDF). March 1993. Page 12, 2nd paragraph: Algol68 [gave] operator overloading(§3.3.3), references (§3.3.4), and the ability to declare variables anywhere in a block (§3.3.1). Retrieved 2008-05-06.
  7. ^ "Interview with Guido van Rossum". July 1998. Archived from the original on 2007-05-01. Retrieved 2007-04-29.
  8. ^ "A Shorter History of ALGOL 68". Archived from the original on 2006-08-10. Retrieved 2006-09-15.
  9. ^ 2013-03-17 Wayback Machine에 보관된 설명의 완전성과 명확성
  10. ^ Wayback Machine에 보관된 2013-03-17 직교 설계
  11. ^ 2013-03-17 Wayback Machine에 보관된 보안
  12. ^ 2013-03-17년 웨이백 머신에서 효율성 아카이브
  13. ^ "Gommas?".
  14. ^ Algorithmic Language Algol 68 Archived 2013-03-17에 관한 개정 보고서(jmvdveer.home.xs4all.nl).2013-07-21에 회수.
  15. ^ Terekhov, Andrey (2014). "ALGOL 68 and Its Impact on the USSR and Russian Programming". 2014 Third International Conference on Computer Technology in Russia and in the Former Soviet Union. pp. 97–106. doi:10.1109/SoRuCom.2014.29. ISBN 978-1-4799-1799-0. S2CID 16097093.
  16. ^ http://toc.proceedings.com/25445webtoc.pdf '68' - 336 및 342 페이지
  17. ^ 린지 1996년
  18. ^ a b Lindsey, Charles H. (1996). Bergin, T. J.; Gibson, R. G. (eds.). A History of ALGOL 68. ACM SIGPLAN Notices. History of Programming Languages-II. Vol. 28. also in ACM SIGPLAN Notices 28(3), March 1993 (includes a comprehensive bibliography of the meetings and discussions before, during and after development of ALGOL 68). ACM Press. pp. 97–132. doi:10.1145/155360.155365. ISBN 978-0-201-89502-5.
  19. ^ 프로그래밍 Algol 68을 쉽게
  20. ^ ALGOL 68 Genie 학습
  21. ^ 린지 1993, 7페이지
  22. ^ a b c d 린지 1993, 페이지 9
  23. ^ 린지 1993, 페이지 24
  24. ^ a b 린지 1993, 페이지 10
  25. ^ "The Algol Bulletin".
  26. ^ a b 린지 1993, 페이지 12
  27. ^ 린지 1993, 13페이지
  28. ^ 린지 1993, 페이지 15
  29. ^ Hoare, C. a. R. (November 1968). "Critique of ALGOL 68". ALGOL Bulletin. 29: 27–29.
  30. ^ a b Peck, J. E. L., ed. (1970), Proceedings of the IFIP working conference on ALGOL 68 Implementation, Munich: North-Holland, ISBN 0-7204-2045-8
  31. ^ a b c d Koster, C. H. A. "A Shorter History of Algol 68". Archived from the original on 2007-12-17.
  32. ^ van der Veer, Marcel. "Open source Algol 68 implementations". algol68.sourceforge.net.
  33. ^ E. Marchesi, Jose. "Algol68 frontend for GCC". jemarch.net.
  34. ^ 초안(DR) 보고서 공개
  35. ^ Sidney Marshall, "ALGOL 68 Implementation", "ALGOL 68 Implementation on the IFIP Working Conference, 뮌헨, 1970년 7월 20-24일", North Holland, 편집자 J. E. L. Peck, 239-243페이지.
  36. ^ 시드니 마샬, 1972년 다트머스 대학 박사 논문, ALGOL 68의 구현에 대하여
  37. ^ Algol 68 개정 보고서
  38. ^ ALGOL H – ALGOL 68의 슈퍼 언어 제안
  39. ^ "Algol68 S(S) published on the internet". Archived from the original on 2005-12-03. Retrieved 2004-08-30.
  40. ^ 알골 68 지니(G)
  41. ^ "Draft Report on the Algorithmic Language ALGOL 68". March 1968. Archived from the original on 2007-09-30. Retrieved 2007-06-22.
  42. ^ "Penultimate Draft Report on the Algorithmic Language ALGOL 68 – Chapters 1-9" (PDF). October 1968. Retrieved 2007-06-22.[영구 데드링크]
  43. ^ "Penultimate Draft Report on the Algorithmic Language ALGOL 68 – Chapters 10-12" (PDF). October 1968. Retrieved 2007-06-22.[영구 데드링크]
  44. ^ "Report on the Algorithmic Language ALGOL 68" (PDF). December 1968. Archived from the original (PDF) on 2008-04-06. Retrieved 2007-12-30.
  45. ^ "Revised Report on the Algorithmic Language Algol 68". September 1973. Archived from the original on 2007-09-27. Retrieved 2007-04-30.
  46. ^ Lu Hu-quan (1971). "The Translation of Algol 68 into Chinese" (PDF). Peking, China: Institute of Mathematics, Academia Sinica. Retrieved 2012-08-17.
  47. ^ "GOST 27974-88 Programming language ALGOL 68 – Язык программирования АЛГОЛ 68" (PDF) (in Russian). GOST. 1988. Archived from the original (PDF) on 2008-11-15. Retrieved 2008-11-15.
  48. ^ "GOST 27975-88 Programming language ALGOL 68 extended – Язык программирования АЛГОЛ 68 расширенный" (PDF) (in Russian). GOST. 1988. Archived from the original (PDF) on 2011-04-29. Retrieved 2008-11-15.
  49. ^ ALGOL 68GWayback Machine에서 아카이브된 2008-01-09 형식 구문
  50. ^ Needham, R. M.; Wilkes, M. V. (January 1979). "The Cambridge CAP Computer and its Operating System" (PDF). Microsoft Research.
  51. ^ David Holdsworth (Winter 2009–2010). "KDF9 Time Sharing: Eldon 2 is not EGDON!". Computer Resurrection – Number 49. Computer Conservation Society. Retrieved 2010-10-03.
  52. ^ http://www.vitanuova.com/dist/doc/rsre-3522-curt.pdf[베어 URL PDF]
  53. ^ 펜티엄 펜티엄펜티엄펜티엄펜티엄펜티엄펜티엄펜티엄펜티엄펜티엄펜티엄펜티엄펜티엄펜티엄펜티엄펜티엄펜티엄펜티엄펜티엄펜티엄펜티엄펜티엄펜티엄펜Ixbt.com 를 참조해 주세요.2013-07-21에 회수.
  54. ^ Oliver, J. R.; Newton, R. S. (1979). "Practical experience with ALGOL 68-RT". The Computer Journal. 22 (2): 114–118. doi:10.1093/comjnl/22.2.114.
  55. ^ 응용 프로그램, 라이브러리 테스트 스위트 - 소프트웨어 보존 그룹.Softwarepreservation.org 를 참조해 주세요.2013-07-21에 회수.
  56. ^ 개정 보고서, 123페이지, 각주
  57. ^ "Vrije Universiteit Amsterdam" (PDF).
  58. ^ Lindsey, C. H.; Boom, H. J. (December 1978). "A Modules and Separate Compilation facility for ALGOL 68". ALGOL Bulletin (43): 19–53. Retrieved 2020-01-29. 평. 에러타
  59. ^ "Archived copy" (PDF). Archived from the original (PDF) on 2010-04-15. Retrieved 2010-03-20.{{cite web}}: CS1 maint: 제목으로 아카이브된 복사(링크)
  60. ^ http://htportal.acm.org/ft_gateway.cfm?id=803425&type=pdf[영구 데드링크]
  61. ^ 추상적인 ALGOL 68 머신과 머신에 의존하지 않는 컴파일러 - Springer.Springerlink.com 를 참조해 주세요.2013-07-21에 회수.
  62. ^ "Archived copy". Archived from the original on 2011-03-10. Retrieved 2010-03-20.{{cite web}}: CS1 maint: 제목으로 아카이브된 복사(링크)
  63. ^ 오픈 소스 Algol 68 구현– [파일 참조(Browse FilesSourceforge.net 를 참조해 주세요.2013-07-21에 회수.
  64. ^ [1] 2006-08-29 Wayback Machine에서 아카이브 완료
  65. ^ "Archived copy" (PDF). Archived from the original (PDF) on 2014-01-02. Retrieved 2005-08-27.{{cite web}}: CS1 maint: 제목으로 아카이브된 복사(링크)
  66. ^ C. H. A. Koster (1993). "The Making of Algol 68". Lecture Notes in Computer Science. CiteSeerX 10.1.1.76.2072.
  67. ^ Dijkstra, E. W. "To the Editor ALGOL 68 Mathematische Centrum". Archived from the original on 2007-04-21. Retrieved 2007-04-28.
  68. ^ van Rossum, Guido (June 2005). "Python-Dev Wishlist: dowhile". Retrieved 2007-04-28.
  69. ^ Hoare, C. A. R. (February 1981) [based on his 1980 Turing Award lecture]. "The emperor's old clothes". Communications of the ACM. 24 (2): 75–83. doi:10.1145/358549.358561. S2CID 97895. Archived from the original on 2013-05-08. Alt URL 2017-10-02 Wayback Machine에 보관
  70. ^ "ALGOL Bulletin (referred to in AB30.1.1.1)". March 1970. Archived from the original on 2007-09-30. Retrieved 2007-03-01.

인용된 작품

  • Brailsford, D. F. and Walker, A. N., Ellis Horwood/Wiley, 1979년 ALGOL 68 Programming 입문
  • C. H. 린지 및 S. 판 데르 뮬런, 노스홀랜드 ALGOL 68 비공식 소개, 1971년
  • Lindsey, C. H. (1993-03-02). "A History of ALGOL 68". ACM SIGPLAN Notices. 28 (3): 97–132. doi:10.1145/155360.155365.
  • McGettrick, A.D., ALGOL 68, 캠브리지 대학교 제1코스제2코스프레스, 1978
  • 1971년 10월 브리티시컬럼비아 대학 ALGOL 68 Companion, J. E. L. 펙
  • Tanenbaum, A. S., A Tutorial on ALGOL 68, Computing Survices 8, 155-190, 1976년 6월 9, 255-256, 1977년 9월 [9][permanent dead link]
  • 영국 런던, P. M. 및 본드, S. G., ALGOL 68-Rsic 사용자 가이드, 영국 여왕의 문구 사무실, 1972년

외부 링크