맨위로가기

알골 (프로그래밍 언어)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

알골(ALGOL)은 1950년대 후반 유럽 학자들이 개발한 세계 공통의 프로그래밍 언어이다. 1958년에 제안된 ALGOL은 reference syntax, publication syntax, implementation syntax의 3가지 구문을 가지며, ALGOL 58과 ALGOL 60으로 발전했다. ALGOL 60은 배커스-나우어 표기법(BNF)으로 문법을 기술하고 절차적 언어 최초로 재귀 호출을 지원했으며, 이후 여러 언어에 영향을 미쳤다. 1968년에는 ALGOL 68이 개발되었지만, 복잡한 사양으로 인해 널리 사용되지 못했다. ALGOL은 하드웨어 특성을 고려하지 않고 추상적인 알고리즘 기술을 목표로 했으며, 값 호출과 이름 호출 방식을 모두 정의했다.

더 읽어볼만한 페이지

  • 1958년 개발된 프로그래밍 언어 - 리스프
    리스프는 1958년 존 매카시가 개발한 람다 대수 기반의 프로그래밍 언어로, 아톰과 리스트 데이터 형식을 사용하여 인공지능 분야를 중심으로 발전해왔으며, 현재는 커먼 리스프, 스킴 등의 여러 변종을 통칭하는 용어로 사용된다.
  • 알골 프로그래밍 언어 계열 - C++
    C++는 비야네 스트롭스트룹이 개발한 다중 패러다임 프로그래밍 언어로, C를 기반으로 객체 지향 프로그래밍과 제네릭 프로그래밍을 지원하며 다양한 분야에 사용되고, 꾸준한 표준 업데이트를 통해 기능이 확장되었지만 복잡한 문법으로 높은 학습 곡선을 가진다.
  • 알골 프로그래밍 언어 계열 - 알골 60
    알골 60은 1960년에 발표된 프로그래밍 언어이며, 바쿠스-나우르 표기법을 사용하여 재귀를 포함하고, 이후 많은 언어에 영향을 미쳤지만 입출력 기능 부재로 이식성에 문제가 있었다.
  • 구조적 프로그래밍 언어 - CPL (프로그래밍 언어)
    CPL은 1960년대에 개발된 프로그래밍 언어로, ALGOL 60의 영향을 받아 과학 및 상업 프로그래밍을 아우르는 넓은 응용 분야를 지향했으나 복잡성으로 인해 널리 보급되지는 못했고, BCPL, B, C 언어에 영향을 주어 현대 프로그래밍 언어 발전에 기여했다.
  • 구조적 프로그래밍 언어 - 베릴로그
    베릴로그는 디지털 시스템 모델링 및 설계를 위한 하드웨어 기술 언어로서, IEEE 표준으로 발전해 왔으며, 모듈 계층 구조, 동시성, 순차적 구문, 다양한 연산자, 4치 논리 등의 특징과 C 언어와 유사한 문법 구조를 갖는다.
알골 (프로그래밍 언어) - [IT 관련 정보]에 관한 문서
기본 정보
1965년 ALGOL-20 언어 매뉴얼 표지
1965년 ALGOL-20 매뉴얼
종류프로그래밍 언어
패러다임절차적 프로그래밍, 명령형 프로그래밍, 구조적 프로그래밍
계열ALGOL
개발자바우어
보텐브루흐
루티샤우저
사멜손
배커스
카츠
펄리스
웨그스타인
나우어
보쿠아
판 베인하르던
우저
그린
매카시
발표일1958년
자료형정적, 강한 자료형, 약한 자료형
유효 범위어휘적
영향 받은 언어대부분의 후속 명령형 언어 (소위 "ALGOL과 유사한" 언어 포함)
예: PL/I, 시뮬라, 파스칼, C, Scheme
방언ALGOL 60
ALGOL 68
발음
영어 발음 (IPA)/ˈælgɒl, -gɔːl/

2. 역사

ALGOL은 1950년대 후반, 미국에서 만들어진 FORTRAN 등의 언어에 대항하여 유럽의 학술 연구자들이 세계 공통의 프로그래밍 언어로서 개발했다. 1958년 취리히 연방 공과대학교에서 열린 국제회의에서 제안된 것이 그 기원으로 여겨진다.[9] 현대 프로그래밍 언어와 비교하여 다른 점 중 하나는 reference syntax, publication syntax, implementation syntax라는 3가지 종류의 구문이 있다는 점이다. 당시에는 문자 코드의 표준화 이전이었고, 수학의 수식처럼 인쇄하고 싶다는 요구가 있었기 때문이다. 이를 통해 키워드 이름이나 소수점에 사용하는 기호(쉼표 또는 마침표)를 선택하는 것도 가능했다.[5]

ALGOL은 주로 구미의 계산 과학자들이 알고리즘 연구 개발에 사용했다. 상용 애플리케이션에는 그다지 채택되지 않았는데, 그 이유는 입출력 기능이 표준 사양에 포함되어 있지 않았고, 배로스 이외의 대형 컴퓨터 제조업체가 이 언어에 관심을 보이지 않았기 때문이다.[13]

존 바커스는 ALGOL 58을 주된 대상으로 프로그래밍 언어의 문법을 기술하는 바커스 정규 표기법 (Bakus normal form)을 개발했다. 피터 나우어는 그것을 ALGOL 60용으로 확장・개정했으며, 도널드 커누스가 바커스-나우어 표기법 (Bakus-Naur Form)으로 개칭할 것을 제안했다.[10]

ALGOL 60은 그 후의 다수의 언어에 영향을 주었다. 앤서니 호어는 ALGOL 60을 "시대를 앞서갔으며, 이전 언어의 개선이었을 뿐만 아니라, 그 후 거의 모든 후계자의 선구자가 된 언어"라고 평가하고 있다. Scheme이라는 Lisp 방언의 설계자는, 정적 스코프가 ALGOL의 영향이라고 말하고 있다. 또한 Scheme의 사양 명칭 "Revised Report on the Algorithmic Language Scheme"도 ALGOL에 대한 오마주이다.

언어의 표준화로서는, IFIP TC2/WG2.1에서 ALGOL 60이 제정되었다. 그 후, 표준화 작업이 진행되지 않아, 1984년이 되어서야 ISO에서 ALGOL 60 상당의 언어가 표준화되었을 뿐이다. 일본에서는, 한때 ALGOL 60의 언어 규격과 입출력 라이브러리 규격을 각각 JIS 규격으로 제정했지만 (JIS C 6210-6219), 1983년 9월 1일자로 폐지되었다.

2. 1. 초기 개발 (1958-1960)

1958년 취리히 연방 공과대학교(ALGOL 58)에서 열린 유럽 및 미국의 컴퓨터 과학자 위원회 회의에서 알골이 공동으로 개발되었다.[9] 초기에는 IAL (International Algebraic Language)로 불렸으나, 이후 ALGOL 58로 불리게 되었다.[9]

ALGOL 58은 참조, 출판, 구현의 세 가지 구문을 정의하여 서로 다른 언어에 대해 서로 다른 키워드 이름과 소수점 규칙(쉼표 vs 마침표)을 사용할 수 있도록 하였다.[5] 이는 당시 문자 코드 표준화 이전이었고, 수학 수식처럼 인쇄하고 싶다는 요구가 있었기 때문이다.

존 바커스는 ALGOL 58을 위해 프로그래밍 언어를 설명하는 ''바커스 정규 형식'' 방법을 개발했다.[10] 이는 피터 나우르에 의해 ALGOL 60으로 수정 및 확장되었고, 도널드 커누스의 제안에 따라 바커스-나우르 표기법으로 이름이 변경되었다.[10]

피터 나우르는 "ALGOL 게시판의 편집자로서 이 언어에 대한 국제적인 토론에 참여하게 되었고 1959년 11월 유럽 언어 설계 그룹의 구성원으로 선정되었습니다. 이 자격으로 1960년 1월 파리에서 열린 ALGOL 60 회의의 결과로 제작된 ALGOL 60 보고서의 편집자를 맡았습니다."라고 회고했다.[11]

1960년 1월 11일부터 16일까지 파리에서 ALGOL 60 회의가 개최되었으며, 다음 인물들이 참석했다.[5]

유럽미국



앨런 제이 펄리스는 회의에 대해 "회의는 지치고, 끝이 없고, 유쾌했습니다. 자신의 좋은 아이디어가 다른 사람들의 나쁜 아이디어와 함께 버려질 때 화가 났습니다. 그럼에도 불구하고, 이 기간 동안 부지런함은 지속되었습니다. 13명의 화학적 반응은 훌륭했습니다."라고 묘사했다.[12]

2. 2. ALGOL 60 (1960-1968)

1960년 파리 회의에서 ALGOL 60이 발표되었다. 피터 나우르는 존 바커스가 ALGOL 58을 위해 개발한 ''바커스 정규 형식''을 확장 및 개선하여 배커스-나우르 표기법(BNF)을 만들었다.[10] ALGOL 60은 BNF 표기법으로 문법이 기술되었고, 구조화된 프로그래밍 형태를 갖추었으며, 재귀 호출을 지원하는 최초의 절차형 언어였다.[13]

ALGOL 60은 PL/I, 파스칼, C 언어 등 이후 언어 발전에 큰 영향을 주었지만, 널리 사용되지는 않았다.[13] 그 이유는 표준 설명에 입출력 기능이 없었고, 배로스를 제외한 대형 컴퓨터 제조업체들이 이 언어에 관심을 갖지 않았기 때문이다.[13]

피터 나우르는 ''ALGOL 게시판''의 편집자로서 이 언어에 대한 국제적인 토론에 참여했으며, 1959년 11월 유럽 언어 설계 그룹의 구성원으로 선정되었다. 그는 1960년 1월 파리에서 열린 ALGOL 60 회의 결과로 제작된 ALGOL 60 보고서의 편집자를 맡았다.[11]

1960년 1월 11일부터 16일까지 열린 파리 회의 참석자는 다음과 같다:[5]

유럽미국



앤서니 호어는 ALGOL 60을 "시대를 앞서갔으며, 이전 언어의 개선이었을 뿐만 아니라, 그 후 거의 모든 후계자의 선구자가 된 언어"라고 평가했다.

2. 3. ALGOL 68 (1968 이후)

1968년 ALGOL 68이 개발되었다. ALGOL 68에서는 2단계 문법인 Wijngaarden 표기법으로 문법이 기술되었다. 파스칼을 설계한 Wirth의 ALGOL W를 비롯한 여러 후계 언어 후보가 있었지만, 결국 ALGOL 68이 후계자로 지정되었다. 그러나 너무 복잡하고 방대한 사양을 요구했기 때문에 ALGOL 68 컴파일러는 실제 구현이 어려웠고, Wijngaarden 표기법 또한 난해하여 실용적으로 보급되지 못했다.

3. 규격

ALGOL은 시대와 구현에 따라 다양한 규격을 가지고 있다. 다음 세 가지 주요 사양이 존재하며, 뒤에 붙은 숫자는 처음 발표된 해를 나타낸다.


  • 알골 58 - 본래 IAL (International Algebraic Language, 국제 대수 언어)이라는 이름으로 제안되었다.
  • 알골 60 - 1960년대 중반부터 1963 개정 시까지 X1 ALGOL 60이라는 이름으로 처음 구현되었다.[65][66]
  • 알골 68 - 1973년 개정[67]


IAL (ALGOL 58)은 이후 다양한 프로그래밍 언어(소위 ALGOL계 언어)에 큰 영향을 미쳤으며, 일반적으로 이들의 조상으로 여겨진다. 또한 ALGOL 사양으로 제시된 중간 코드는 '''ALGOL object code'''라고 불리며, 단순하고 컴팩트한 스택 기반의 명령 집합 아키텍처로, 컴퓨터 과학 분야에서 컴파일러 구축 교육과 다른 고급 언어의 구현에 사용되었다.

3. 1. ALGOL 58

알골 58은 처음에 '''IAL''' ('''I'''nternational '''A'''lgebraic '''L'''anguage, 국제 대수 언어)라는 명칭으로 제안되었다.[39] ALGOL 58은 입출력 기능을 갖추고 있지 않았다.

3. 2. ALGOL 60

알골 60은 1960년대 중반에 X1 ALGOL 60이라는 이름으로 처음 구현되었으며, 1963년에 개정되었다.[65][66]

3. 3. ALGOL 68

1968년에 발표되었고, 1973년에 개정되었다.[42] 가변 배열, 슬라이스, 병렬성, 연산자 식별 등 기타 확장 가능한 기능들이 새롭게 도입되었다.

4. 특징

ALGOL은 동시대의 FORTRAN, COBOL과 비교했을 때, 이들 언어가 특정 하드웨어에서 특정 목적을 효율적으로 수행하기 위한 일종의 도메인 특화 언어에서 시작한 반면, ALGOL은 하드웨어 특성을 고려하지 않고 추상적인 알고리즘을 절차로 기술하는 것을 목표로 했다.[5] ALGOL 60은 절차형 언어로서 재귀 호출이 가능한 최초의 프로그래밍 언어였다. 공식 ALGOL 60에는 입출력 기능이 정의되지 않아 구현체 간 호환성이 부족했지만,[13] ALGOL 68은 다양한 ''transput''(입출력) 기능을 제공했다.[53]

ALGOL 60은 매개변수 전달에 두 가지 평가 전략을 허용했다. 일반적인 값 호출과 이름 호출이 그것이다.[16] 이름 호출은 구현이 복잡하지만, 지연 평가 등 유용한 기능을 제공한다. 도널드 커누스재귀 및 비지역 참조를 올바르게 구현하는 컴파일러를 구별하기 위해 "man or boy test"를 고안했는데, 여기에는 이름 호출의 예시가 포함되어 있다.[16]

5. 영향 및 유산

ALGOL은 프로그래밍 언어 연구에 큰 영향을 미쳤다. 특히 블록 구조, 정적 유효 범위, 재귀 호출 등의 개념은 후대 언어에 큰 영향을 미쳤다.[14] ALGOL의 문법과 의미론적 순수성은 프로그래밍 언어 의미론 연구의 주요 대상이 되었다.[47]

ALGOL 60은 절차형 언어로는 최초로 재귀 호출이 가능한 프로그래밍 언어였다.[13] 또한 PL/I, 파스칼, C 언어 등 이후 언어의 발전에 큰 영향을 주었으나, 현재는 거의 이용되지 않고 있다. 인자 전달에 있어서 ALGOL에 특징적이었던 "이름 전달" 방식도 이후의 언어에서는 거의 찾아볼 수 없게 되었다.

ALGOL 60은 이후 많은 언어에 영감을 주었다. 토니 호어는 "이 언어는 시대를 너무 앞서 나가서 이전 언어뿐만 아니라 거의 모든 후속 언어보다 개선되었다."라고 말했다.[14] Scheme 프로그래밍 언어는 Lisp의 변종으로 ALGOL의 블록 구조와 어휘 범위를 채택했으며, ALGOL에 경의를 표하기 위해 표준 문서에 "알고리즘 언어 Scheme에 대한 개정 보고서"라는 문구를 채택했다.[15]

ALGOL은 Peter Landin|피터 란딘영어이 지적했듯이, 명령형 부작용과 (이름 호출) 람다 계산을 결합한 최초의 언어이다. 이 언어의 가장 훌륭한 공식화는 아마도 John C. Reynolds|존 C. 레이놀즈영어에 의한 것으로, 그의 문법과 의미론의 순수성을 잘 나타낸다. 레이놀즈의 "이상화된" ALGOL은 또한 이름 호출 언어의 맥락에서 "로컬" 부작용의 적절성에 대한 설득력 있는 방법론적 주장을 펼치며, ML과 같이 값 호출 언어가 사용하는 "글로벌" 부작용과 대비된다. ALGOL의 개념적 완전성으로 인해 Programming Computable Functions|PCF영어와 ML과 함께 의미론 연구의 주요 대상이 되었다.[47]

ALGOL은 동시대의 FORTRAN, COBOL과 비교했을 때, 이들 언어가 특정 하드웨어에서 특정 목적을 효율적으로 수행하기 위한 일종의 도메인 특화 언어에서 시작한 반면, ALGOL은 하드웨어의 특성을 고려하지 않고 추상적인 알고리즘을 절차로 기술하는 것을 목표로 했다. 초기 알골 60 사양에서는 입출력 절차조차 표준화되지 않았다. FORTRAN, COBOL이 직계 자손 외에는 별로 분화되지 않은 데 반해, ALGOL 계열이 큰 다양성을 획득한 것도 이러한 추상성 때문이다. 따라서 ALGOL의 제정을 통해 소프트웨어의 모듈화, 컴퓨터의 범용화가 시작된 순간이라고 봐도 무방할 것이다.

공식적인 ALGOL 60에서는 입출력 기능이 정의되지 않았기 때문에, 실제 처리 시스템에서는 각기 호환되지 않는 방법으로 구현되었다. 그에 반해, ALGOL 68에서는 `transput`[53]을 위한 풍부한 라이브러리가 제공되었다.

ALGOL 60에서는 인수 전달에 2가지 종류의 평가 전략이 정의되어 있다. 일반적인 '''값 전달'''과 ALGOL에 특징적인 '''이름 전달'''이다. 이름 전달은 실제로 절차적 언어에서는 다루기가 상당히 어렵다. 예를 들어, 두 인수의 값을 바꾸는 절차를 작성했을 때, 어떤 정수 변수와 그 정수 변수를 첨자로 하는 배열 요소를 그 인수로 전달할 수 없다.[54]

ALGOL의 영향으로, 후대의 언어 중 가장 많은 영향을 준 것은 BEGIN/END(C 언어 등에서는 { })의 중첩에 의한 블록 구조화이다. 속칭 "알골 문법"이라고 하는 경우에는, 이 블록 구조화 표기를 가리키는 경우가 있다.

6. 예제

알골 60과 알골 68은 각 버전마다 고유한 특징과 문법을 가지고 있어 코드 예제를 통해 두 언어의 차이점을 비교할 수 있다. 알골 60은 입출력 기능이 표준화되지 않아 구현체마다 다른 방식을 사용했지만, 알골 68은 'Transput'이라 불리는 표준 입출력 기능을 제공했다.

다음은 헬로 월드 프로그램의 예시를 통해 알골의 다양한 구현 방식을 보여준다.


  • Burroughs Extended Algol
  • 실행되는 대화형 터미널에 직접 출력


```algol

BEGIN

FILE F(KIND=REMOTE);

EBCDIC ARRAY E[0:11];

REPLACE E BY "HELLO WORLD!";

WRITE(F, *, E);

END.

```

  • 인라인 형식


```algol

BEGIN

FILE F(KIND=REMOTE);

WRITE(F, <"HELLO WORLD!">);

END.

```

  • `DISPLAY` 문 사용


```algol

BEGIN DISPLAY("HELLO WORLD!") END.

```

  • Elliott Algol


```algol

program HiFolks;

begin

print ‘Hello world’

end;

```

  • Elliott 803 Algol (A104)


```algol

HIFOLKS'

BEGIN

PRINT £HELLO WORLD£L??'

END'

```

  • ICT 1900 시리즈 Algol


```algol

'BEGIN'

WRITE TEXT('('HELLO%WORLD')');

'END'

```

  • '''ALGOL 68'''


```algol

'''begin'''

printf(($gl$,"Hello, world!"))

'''end'''

6. 1. ALGOL 60 예제

다음은 n×m의 2차원 배열에서 절댓값이 가장 큰 요소를 찾아, 그 절댓값을 y에, 첨자를 i와 k에 저장하는 프로시저이다.

```

PROCEDURE Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k) ;

VALUE n, m ; ARRAY a ; INTEGER n, m, i, k ; REAL y ;

COMMENT 행렬 a의 크기가 n x m인 절대값 가장 큰 요소를 y에 전달하고, 이 요소의 첨자를 i와 k에 전달한다 ;

BEGIN

INTEGER p, q ;

y := 0 ; i := k := 1 ;

FOR p := 1 STEP 1 UNTIL n DO

FOR q := 1 STEP 1 UNTIL m DO

IF abs (a[p, q]) > y THEN

BEGIN y := abs (a[p, q]) ;

i := p; k := q

END

END Absmax

```

다음은 Elliott 803 ALGOL[56]로 표를 생성하는 예이다.

```

FLOATING POINT ALGOL TEST'

BEGIN REAL A,B,C,D'

READ D'

FOR A:= 0.0 STEP D UNTIL 6.3 DO

BEGIN

PRINT PUNCH(3),££L??'

B := SIN(A)'

C := COS(A)'

PRINT PUNCH(3),SAMELINE,ALIGNED(1,6),A,B,C'

END'

END'

```

PUNCH(3)은 종이 테이프 펀칭 장치가 아닌 텔레타이프 단말기의 프린터로 출력을 보내는 것이다. SAMELINE은 인수 간에 일반적으로 수행되는 캐리지 리턴 및 줄 바꿈을 억제한다. ALIGNED(1,6)은 출력을 소수점 위 1자리, 소수점 아래 6자리로 형식 지정한다.

6. 2. ALGOL 68 예제

다음은 n×m의 2차원 배열 중 절댓값이 가장 큰 요소를 찾아, 그 절댓값을 y에, 첨자를 i와 k에 저장하는 함수의 예시이다.

  • 알골 68


```algol68

PROC ABS max = ([,]real a, REF real y, REF int i, k)real:

COMMENT The absolute greatest element of the matrix a, of size ⌈a by 2⌈a

is transferred to y, and the subscripts of this element to i and k; COMMENT

BEGIN

real y := 0; i := ⌊a; k := 2⌊a;

FOR p FROM ⌊a TO ⌈a DO

FOR q FROM 2⌊a TO 2⌈a DO

IF ABS a[p, q] > y THEN

y := ABS a[p, q];

i := p; k := q

FI

OD

OD;

y

END # abs max #

```

알골 60 코드 샘플을 알골 68 버전으로 변환한 것이다. ALGOL 68 구현은 스트로핑에 대한 ALGOL 60의 접근 방식을 사용했다. ALGOL 68의 경우 굵은 글꼴의 토큰은 예약어, 유형(모드) 또는 연산자이다.

배열의 하한(⌊) 및 상한(⌈)과 배열 슬라이싱은 프로그래머가 직접 사용할 수 있다.

  • 부동 소수점 algol68 테스트:


```algol68

(

real a,b,c,d;

printf(($pg$,"Enter d:"));

read(d);

FOR step FROM 0 WHILE a:=step*d; a <= 2*pi DO

printf($l$);

b := sin(a);

c := cos(a);

printf(($z-d.6d$,a,b,c))

OD

)

```

`printf`는 `stand out` 파일에 출력을 보낸다. `printf($p$);`는 페이지 넘김, `printf($l$);`은 개행이다. `printf(($z-d.6d$,a,b,c))`는 소수점 이상을 1자리, 소수점 이하를 6자리로 포맷하여 출력한다.

6. 3. 헬로 월드 프로그램

ALGOL 60에는 입출력(I/O) 기능이 정의되지 않아 이식 가능한 헬로 월드 프로그램이 존재하지 않는다. 그러나 몇 가지 예시를 통해 ALGOL의 다양한 구현 방식을 살펴볼 수 있다.

  • Burroughs Extended Algol


다음은 실행되는 대화형 터미널에 직접 출력하는 예시이다.

```algol

BEGIN

FILE F(KIND=REMOTE);

EBCDIC ARRAY E[0:11];

REPLACE E BY "HELLO WORLD!";

WRITE(F, *, E);

END.

```

인라인 형식을 사용하면 더 간단하게 표현할 수 있다.

```algol

BEGIN

FILE F(KIND=REMOTE);

WRITE(F, <"HELLO WORLD!">);

END.

```

`DISPLAY` 문을 사용하면 더욱 단순화된다. 출력은 시스템 콘솔('SPO')에 표시된다.

```algol

BEGIN DISPLAY("HELLO WORLD!") END.

```

  • Elliott Algol


Elliott Algol은 "열린 문자열 따옴표"와 "닫힌 문자열 따옴표"에 서로 다른 문자를 사용했다. (예: ‘, ’)

```algol

program HiFolks;

begin

print ‘Hello world’

end;

```

  • Elliott 803 Algol (A104)


Elliott 803은 5홀 종이 테이프를 사용했으므로 대문자만 사용할 수 있었다. 따옴표 문자가 없어 £(영국 파운드 기호)가 여는 따옴표, ?(물음표)가 닫는 따옴표로 사용되었다.

```algol

HIFOLKS'

BEGIN

PRINT £HELLO WORLD£L??'

END'

```

  • ICT 1900 시리즈 Algol


ICT 1900 시리즈 Algol I/O 버전은 종이 테이프 또는 펀치 카드에서 입력을 허용했다. 종이 테이프 '전체' 모드는 소문자를 허용했다. 출력은 라인 프린터로 전송되었다. 여는 따옴표와 닫는 따옴표는 '('와 ')'를 사용하여 표시했고 공백은 %로 표시했다.[18]

```algol

'BEGIN'

WRITE TEXT('('HELLO%WORLD')');

'END'

```

  • '''ALGOL 68'''


'''ALGOL 68''' 코드는 일반적으로 소문자로 예약어를 사용했지만, 굵게 표시하거나 밑줄을 긋기도 했다. "알골 68 보고서"의 언어에서 입출력 시설은 통칭하여 "Transput"이라고 불렸다.

```algol

'''begin'''

printf(($gl$,"Hello, world!"))

'''end'''

7. 구현체

에츠허르 W. 데이크스트라와 야프 A. 조네벨트가 1960년 8월에 일렉트로로지카 X1을 대상으로 ALGOL 60의 첫 번째 구현을 완료했다.[30] 이후, 다양한 시스템을 대상으로 ALGOL 60 구현체들이 개발되었다. 다음은 ALGOL 60의 주요 구현체 목록이다.

ALGOL 60 구현체 목록
이름연도저자국가설명대상 CPU
ZMMD 구현1958프리드리히 L. 바우어, 하인츠 루티샤우저, 클라우스 사멜슨, 헤르만 보텐브루흐독일ALGOL 58 구현Z22, 추제의 Z23[28]
X1 ALGOL 601960년 8월[29]에츠허르 W. 데이크스트라, 야프 A. 조네벨트네덜란드ALGOL 60의 첫 번째 구현[30]일렉트로로지카 X1
엘리엇 알골1960년대C. A. R. 호어영국1980년 튜링상 강연 주제[31]엘리엇 803, 엘리엇 503, 엘리엇 4100 시리즈
조비얼1960줄스 슈와르츠미국DOD HOL로 에이다 이전다양한 기종 (해당 문서 참조)
버로스 알골
(여러 변종)
1961버로스사 (호어, 데이크스트라 등 참여)미국버로스사(현재 유니시스 MCP 기반) 컴퓨터의 기반버로스 대형 시스템 및 미드레인지
케이스 알골1961케이스 공과대학[32]미국시뮬라는 원래 케이스 알골의 시뮬레이션 확장으로 계약됨UNIVAC 1107
고골1961윌리엄 M. 맥키먼미국ODIN 시분할 시스템용[33]PDP-1
레Г네센트랄렌 알골1961페터 나우어, 요른 옌센덴마크완전한 알골 60 구현레그네센트랄렌의 DASK
다트머스 알골 301962토머스 유진 커츠 외미국LGP-30
USS 90 알골1962L. 페트론이탈리아
알골 번역기1962G. 반 데르 메이와 W.L. 반 데르 포엘네덜란드국립 우체국, 전신 및 전화국ZEBRA
키즈그로브 알골1963F. G. 던컨영국잉글리쉬 일렉트릭 KDF9
VALGOL1963발 슈로어미국META II 컴파일러 컴파일러 테스트
웻스톤1964브라이언 란델 및 L. J. 러셀영국잉글리쉬 일렉트릭사의 원자력 부서. 페란티 페가수스, 국립 물리 연구소 ACE 및 잉글리쉬 일렉트릭 DEUCE 구현의 전조잉글리쉬 일렉트릭사 KDF9
NU ALGOL1965노르웨이UNIVAC
ALGEK1965소련АЛГЭК, 경제적 업무를 위해 ALGOL-60 및 코볼 지원 기반민스크-22
알골 W1966니클라우스 비르트미국ALGOL 60의 후속 버전 제안IBM System/360
MALGOL1966A. 빌, M. 코틀리 & M. 라켄디에스토니아민스크-22
ALGAMS1967GAMS 그룹(ГАМС, 중간급 컴퓨터용 프로그래밍 자동화 그룹), 코메콘 과학 아카데미 협력코메콘민스크-22, 나중에 ES EVM, BESM
ALGOL/ZAM1967폴란드폴란드 ZAM 컴퓨터
시뮬라 671967올레-요한 달 및 크리스텐 니가드노르웨이클래스를 갖춘 알골 60UNIVAC 1107
트리플렉스-알골 카를스루에1967/1968독일 카를스루에구간 산술을 위한 삼중 숫자를 사용한 ALGOL 60 (1963)[35]
[https://web.archive.org/web/20080722231533/http://hopl.murdoch.edu.au/showlanguage.prx?exp=7288&language=Chinese%20Algol 중국 알골]1972중국심볼 시스템을 통해 표현된 중국어 문자
DG/L1972미국DG 이클립스 컴퓨터 제품군
S-알골1979론 모리슨영국교육용 언어로 사용하기 위해 의도된 직교 데이터 유형 추가PDP-11과 이후 자바 VM에서 구현



버로스 방언에는 ESPOL 및 NEWP와 같은 특수 부트스트래핑 방언이 포함되어 있으며, NEWP는 여전히 유니시스 MCP 시스템 소프트웨어에 사용된다.

참조

[1] 웹사이트 Algol 60 http://www.masswerk.[...] 2007-06-25
[2] 웹사이트 Collected Algorithms of the ACM http://calgo.acm.org[...] Association for Computing Machinery 2011-10-17
[3] 웹사이트 Algol-like languages, Introduction http://www.eecs.qmul[...] 2011-11-14
[4] 웹사이트 The ALGOL Programming Language http://groups.engin.[...] University of Michigan-Dearborn 2016-10-06
[5] 간행물 Report on the Algorithmic Language ALGOL 60 1960-05
[6] 웹사이트 Revised Report on the Algorithmic Language Algol 60 http://www.masswerk.[...] 2007-06-08
[7] 웹사이트 An ALGOL 60 Translator for the X1 https://www.cs.utexa[...] 2021-01-07
[8] 웹사이트 Revised Report on the Algorithmic Language ALGOL 68 https://www.cs.ru.nl[...] 2014-09-13
[9] 웹사이트 History of ALGOL — Software Preservation Group https://www.software[...] 2024-03-14
[10] 간행물 Backus Normal Form vs Backus Naur Form
[11] 웹사이트 ACM Award Citation: Peter Naur http://awards.acm.or[...] 2012-04-02
[12] 서적 History of programming languages https://en.wikipedia[...] 1978
[13] 웹사이트 A Politico-Social History of Algol https://www.software[...] 2024-08-09
[14] 웹사이트 Hints on Programming Language Design http://www.eecs.umic[...] 2009-09-15
[15] 웹사이트 Revised(3) Report on the Algorithmic Language Scheme, (Dedicated to the Memory of ALGOL 60) http://groups.csail.[...] 2009-10-20
[16] 서적 Compilers: Principles, Techniques, and Tools Addison-Wesley
[17] 웹사이트 803 ALGOL http://www.billp.org[...] 2010-05-29
[18] 웹사이트 ICL 1900 series: Algol Language http://www.icl1900.c[...] ICL Technical Publication 3340
[19] 웹사이트 How ASCII Got Its Backslash http://www.bobbemer.[...] Bob Bemer 2014-07-11
[20] 웹사이트 iron/runic cross https://www.fileform[...]
[21] 웹사이트 Decimal Exponent Symbol http://mailcom.com/u[...]
[22] 간행물 ALGOL Manual of the ALCOR Group, Part 1 1961-10
[23] 간행물 ALGOL Manual of the ALCOR Group, Part 2 1961-12
[24] 간행물 ALGOL Manual of the ALCOR Group, Part 3 1962-04
[25] 웹사이트 GOST 10859 standard http://homepages.cwi[...] 2007-06-05
[26] 웹사이트 Revised proposal to encode the decimal exponent symbol https://www.unicode.[...] ISO/IEC JTC 1/SC 2/WG 2 2008-01-22
[27] 웹사이트 The Encyclopedia of Computer Languages http://hopl.murdoch.[...] 2012-01-20
[28] 웹사이트 Computer Museum History http://www.computerh[...] 2010-08-20
[29] 간행물 Dijkstra's Rallying Cry for Generalization: the Advent of the Recursive Procedure, late 1950s – early 1960s http://www.dijkstras[...]
[30] 서적 Software Engineering http://oai.cwi.nl/oa[...] Centrum Wiskunde & Informatica 2003-06-30
[31] 간행물 The Emperor's Old Clothes
[32] 웹사이트 All I Really Need to Know I Learned in CS1 http://www.temple.ed[...] 2012-05-20
[33] 웹사이트 GOGOL – PDP-1 Algol 60 (Computer Language) http://hopl.info/sho[...] Online Historical Encyclopaedia of Programming Languages 2018-02-01
[34] 간행물 Algol in France: From Universal Project to Embedded Culture https://www.academia[...] 2014
[35] 간행물 Definition von Schrankenzahlen in Triplex-ALGOL Springer 1968
[36] 문서 "Algol 60" http://www.masswerk.[...]
[37] 웹사이트 Collected Algorithms of the ACM http://calgo.acm.org[...]
[38] 웹사이트 Algol-like languages ,Introduction http://www.eecs.qmul[...] 1996-09
[39] 간행물 Preliminary report: international algebraic language
[40] 서적 Report on the Algorithmic Language ALGOL 60
[41] 웹사이트 Revised Report on the Algorithmic Language Algol 60 http://www.masswerk.[...] 2007-06-08
[42] 웹사이트 Revised Report on the Algorithmic Language ALGOL 68 http://www.diegoluce[...] 2010-08-25
[43] 간행물 Backus Normal Form vs Backus Naur Form
[44] 웹사이트 ACM Award Citation / Peter Naur http://awards.acm.or[...]
[45] 문서 "Hints on Programming Language Design" http://www.eecs.umic[...] 1973-12
[46] 웹사이트 Revised(3) Report on the Algorithmic Language Scheme, (Dedicated to the Memory of ALGOL 60) http://groups.csail.[...] 2009-10-20
[47] 문서 Algol-Like Languages Birkhauser Boston Inc.
[48] 웹사이트 The Encyclopedia of Computer Languages http://hopl.murdoch.[...] 2012-01-20
[49] 웹사이트 Computer Museum History http://www.computerh[...]
[50] 간행물 Dijkstra's Rallying Cry for Generalization: the Advent of the Recursive Procedure, late 1950s – early 1960s http://www.dijkstras[...]
[51] 서적 Software Engineering http://oai.cwi.nl/oa[...] Centrum Wiskunde & Informatica 2003-06-30
[52] 웹사이트 All I Really Need to KnowI Learned in CS1 http://www.temple.ed[...] 2012-05-20
[53] 문서 ALGOL
[54] 서적 Compilers: Principles, Techniques, and Tools Addison-Wesley
[55] 문서 https://doi.org/10.1[...]
[56] 문서 "803 ALGOL" http://www.billp.org[...]
[57] 웹사이트 Hello world! ALGOL Example Program page http://www.engin.umd[...]
[58] 문서
[59] 웹사이트 How ASCII Got Its Backslash http://www.bobbemer.[...]
[60] 간행물 ALGOL Manual of the ALCOR Group, Part 1 1961-10
[61] 간행물 ALGOL Manual of the ALCOR Group, Part 2 1961-12
[62] 간행물 ALGOL Manual of the ALCOR Group, Part 3 1962-04
[63] 웹사이트 GOST 10859 standard http://homepages.cwi[...] 2007-06-05
[64] 문서 ALGOL
[65] 서적 Report on the Algorithmic Language ALGOL 60 1960-05
[66] 웹인용 Revised Report on the Algorithmic Language Algol 60 http://www.masswerk.[...] 2007-06-08
[67] 웹인용 Revised Report on the Algorithmic Language ALGOL 68 http://www.cs.ru.nl/[...] 2014-09-13



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com