알골 60
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
알골 60(ALGOL 60)은 1960년에 발표된 프로그래밍 언어이다. 존 배커스가 개발한 바쿠스 표기법을 페테르 나우르가 개선하고 도널드 커누스의 제안에 따라 바쿠스-나우르 표기법으로 명칭이 변경되었다. 알골 60은 재귀를 포함하며, 이후 많은 프로그래밍 언어에 영감을 주었다. 다양한 컴퓨터 시스템에서 구현되었으며, 입출력 기능 부재로 인해 이식성에 문제가 있었다.
더 읽어볼만한 페이지
- 알골 프로그래밍 언어 계열 - 알골 (프로그래밍 언어)
알골은 1950년대 후반 유럽 학자들이 개발한 명령형 프로그래밍 언어로서, BNF 표기법으로 문법이 기술되고 구조화된 프로그래밍 형태를 갖추어 이후 여러 언어에 영향을 주었으며, 특히 알골 60은 재귀 호출 지원으로 소프트웨어 모듈화와 컴퓨터 범용화에 기여하고 프로그래밍 개념 표준 용어 제공에 중요한 역할을 했다. - 알골 프로그래밍 언어 계열 - C++
C++는 비야네 스트롭스트룹이 개발한 다중 패러다임 프로그래밍 언어로, C를 기반으로 객체 지향 프로그래밍과 제네릭 프로그래밍을 지원하며 다양한 분야에 사용되고, 꾸준한 표준 업데이트를 통해 기능이 확장되었지만 복잡한 문법으로 높은 학습 곡선을 가진다. - 구조적 프로그래밍 언어 - CPL (프로그래밍 언어)
CPL은 1960년대에 개발된 프로그래밍 언어로, ALGOL 60의 영향을 받아 과학 및 상업 프로그래밍을 아우르는 넓은 응용 분야를 지향했으나 복잡성으로 인해 널리 보급되지는 못했고, BCPL, B, C 언어에 영향을 주어 현대 프로그래밍 언어 발전에 기여했다. - 구조적 프로그래밍 언어 - 베릴로그
베릴로그는 디지털 시스템 모델링 및 설계를 위한 하드웨어 기술 언어로서, IEEE 표준으로 발전해 왔으며, 모듈 계층 구조, 동시성, 순차적 구문, 다양한 연산자, 4치 논리 등의 특징과 C 언어와 유사한 문법 구조를 갖는다. - 시스템 프로그래밍 언어 - C (프로그래밍 언어)
C는 하드웨어 제어와 이식성이 뛰어난 고급 절차적 프로그래밍 언어로서, 다양한 분야에서 사용되며 후속 언어에 영향을 주었고, 성능과 효율성이 높지만 안전성 문제 개선이 필요한 언어이다. - 시스템 프로그래밍 언어 - 스위프트 (프로그래밍 언어)
2014년 애플 세계 개발자 컨퍼런스에서 처음 공개된 스위프트는 크리스 래트너가 개발한 애플의 범용 프로그래밍 언어로서, Objective-C를 대체하며 다양한 플랫폼 지원, 모던 문법, 안정성, 인터랙티브한 개발 환경, SwiftUI 등의 특징을 가진다.
2. 역사
존 배커스는 알골 58(ALGOL 58)을 기술하기 위해 바쿠스 표기법을 개발했다. 이후 페테르 나우르는 이를 알골 60(ALGOL 60)에 맞게 개선하고 확장했으며, 도널드 커누스의 제안으로 바쿠스-나우르 표기법이라는 이름이 붙여졌다.[25][1]
알골 60의 명세는 1960년 1월 11일부터 16일까지 파리에서 열린 회의에서 미국과 유럽의 컴퓨터 과학자 13명으로 구성된 위원회에 의해 만들어졌다.[2] 회의 참석자는 다음과 같다.
앨런 제이 펄리스는 이 회의를 "지치고, 끝없이 이어졌지만, 흥미진진했다"고 회고하며, 참석자들 간의 열띤 토론 속에서도 협력이 이루어졌다고 묘사했다. 페테르 나우르는 이 회의의 결과물인 알골 60 보고서의 편집자 역할을 맡았다.[2]
알골 60은 원래 재귀를 포함하지 않았으나, 일부 위원들의 반대에도 불구하고 마지막 순간에 명세서에 추가되었다.[3] 또한, 코볼(COBOL)과 함께 표준화를 추구한 최초의 언어 중 하나였다.
알골 60은 주로 미국과 유럽의 연구자들 사이에서 사용되었으며, 알고리즘을 기술하고 발표하는 표준적인 방법으로 자리 잡았다. 그러나 표준 입출력 기능의 부재와 당시 주요 컴퓨터 제조사들의 관심 부족으로 인해 상업적인 응용 분야에서는 널리 사용되지 못하는 한계를 보였다. 그럼에도 불구하고, 알골 60은 이후 등장하는 수많은 프로그래밍 언어 설계에 큰 영향을 미쳤다.
2. 1. 구현 연표
알골 60은 이후에 등장한 많은 언어에 영감을 주었다. 토니 호어는 "이 언어는 시대를 너무 앞서가서, 이전의 언어뿐만 아니라 거의 모든 후속 언어보다 개선되었다."라고 평가했다.[4][5] 현재까지 ALGOL 60의 증강, 확장, 파생 및 하위 언어는 최소 70개 이상 존재한다.[6]
공식적으로 정의된 알골 60은 입출력 기능을 갖지 않았으며, 구현체들은 서로 호환되지 않는 방식으로 자체적으로 정의했다. 이는 구현체 간 호환성 문제를 일으켰다.
버로스 방언에는 ESPOL 및 NEWP와 같은 특수 시스템 프로그래밍 방언이 포함되었다.
3. 특징
알골 60은 평가 전략에 대해 두 가지 매개변수 전달 방식을 제공했다: 일반적인 값 호출(call by value)과 이름 호출(call by name)이다. 프로시저 선언 시 각 형식 매개변수에 대해 사용할 방식을 지정했는데, `value` 키워드는 값 호출을 의미하며, 생략하면 이름 호출이 적용되었다.
이름 호출은 참조 호출과는 다른 특정 효과를 가진다. 예를 들어, 매개변수를 `value`나 `reference`로 지정하지 않고 이름 호출을 사용하면, 정수 변수와 해당 변수로 인덱싱된 배열 요소를 교환하는 프로시저(예: `swap(i, A[i])`)를 작성하기 어려울 수 있다. 이는 이름 호출 시 매개변수가 참조될 때마다 다시 평가되기 때문이다.[19] 이름 호출은 이를 구현하는 데 사용되는 "썽크(thunk)"라는 기법 때문에 컴파일러 설계자들에게 잘 알려져 있다. 도널드 커누스는 재귀 및 비지역 참조를 올바르게 구현하는 컴파일러를 구분하기 위해 "남자 또는 소년 테스트"를 고안했는데, 이 테스트에는 이름 호출의 예가 포함되어 있다.
원래 알골 60 명세에는 재귀가 포함되지 않았으나, 일부 위원들의 반대에도 불구하고 마지막 순간에 추가되었다.[3]
알골 60은 이후 등장한 많은 언어에 영감을 주었다. 토니 호어는 "이 언어는 시대를 너무 앞서가서, 이전의 언어뿐만 아니라 거의 모든 후속 언어보다 개선되었다"고 평가했다.[4][5]
3. 1. 예약어 및 식별자
표준 버로스 대형 시스템(Burroughs Large Systems) 하위 언어에는 35개의 예약어가 있다.
표준 버로스 대형 시스템 하위 언어에는 71개의 제한된 식별자가 있다.
그리고 모든 내장 함수 이름도 포함한다.
3. 2. 표준 연산자
알골 60은 다양한 연산자를 제공하며, 연산자 간의 우선순위가 정의되어 있다. 연산자는 크게 산술 연산자, 비교 연산자, 논리 연산자로 나눌 수 있으며, 우선순위는 다음과 같다.
4. 코드 예제 및 이식성 문제
알골 60 언어 표준에는 입출력(I/O) 기능이 포함되어 있지 않았다.[21] 이 때문에 프로그램을 서로 다른 컴퓨터 시스템이나 환경에서 동일하게 실행하기 어려운 이식성 문제가 발생했다. 가장 기본적인 예시인 '헬로 월드' 프로그램조차 표준화된 방법이 없어, 사용하는 알골 구현체(컴파일러 및 라이브러리)에 따라 코드를 다르게 작성해야만 했다.[22]
예를 들어, 유니시스 메인프레임 환경, 엘리엇 컴퓨터 환경 (엘리엇 알골, 엘리엇 803 알골), ICT 1900 시리즈 환경 등 각각의 시스템은 고유한 방식으로 입출력을 처리했다. 이는 문자열 표기 방식 (따옴표 사용 등),[24] 입출력 장치 지정 방식 (종이 테이프, 천공 카드, 라인 프린터 등),[24] 심지어 사용 가능한 문자 집합(대소문자 구분 등)에서도 차이를 보였다. 이러한 차이점들은 알골 60 프로그램의 이식성을 크게 저해하는 요인이 되었다. 각 구현 환경별 코드 예시는 하위 섹션에서 자세히 다룬다.
4. 1. 코드 샘플 비교
알골 60에는 입출력(I/O) 기능이 내장되어 있지 않아, 모든 구현에서 동일하게 동작하는 이식성 있는 '헬로 월드' 프로그램은 존재하지 않는다. 따라서 각 시스템 환경에 맞춰 입출력 방식을 구현해야 했다.아래는 다양한 알골 구현 환경에서의 코드 예시이다.
표준 알골 60 절차 예시 (`Absmax`)다음은 행렬에서 절대값이 가장 큰 원소를 찾는 알골 60 절차(procedure)의 예시이다.
procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k);
value n, m; array a; integer n, m, i, k; real y;
comment n x m 크기의 행렬 a에서 절대값이 가장 큰 원소를 찾아 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
구현에 따라 키워드를 표현하는 방식이 달랐다. 예를 들어, 위 코드의 `integer`와 같은 굵은 글씨 키워드 대신, 일부 구현에서는 `'INTEGER'`처럼 따옴표로 감싸 스트로핑하여 일반 식별자와 구분해야 했다.
유니시스 A-시리즈 알골다음은 유니시스 A-시리즈 메인프레임용 알골 구현에서 사용된 '헬로 월드' 프로그램 예시이다. 이 코드는 미시간 대학교의 자료를 단순화한 것이다.[21][22]
BEGIN
FILE F(KIND=REMOTE);
EBCDIC ARRAY E[0:11];
REPLACE E BY "HELLO WORLD!";
WRITE(F, *, E);
END.
여기서 `*`는 포트란처럼 형식 지정자를 나타낸다.[23]
인라인 형식을 사용하면 더 간결하게 작성할 수 있다.
BEGIN
FILE F(KIND=REMOTE);
WRITE(F, <"HELLO WORLD!">);
END.
`DISPLAY` 문을 사용한 더 간단한 예시는 다음과 같다.
BEGIN
DISPLAY("HELLO WORLD!")
END.
엘리엇 알골엘리엇 알골은 문자열을 표기할 때 열린 따옴표(`‘`)와 닫힌 따옴표(`’`)에 서로 다른 문자를 사용했다.
program HiFolks;
begin
print ‘Hello world’
end;
엘리엇 803 알골엘리엇 803 알골은 5홀 종이 테이프를 사용했기 때문에 대문자만 지원했다. 따옴표 문자가 없어, 파운드 기호(`£`)를 열린 따옴표로, 물음표(`?`)를 닫힌 따옴표로 사용했다. `£L??`와 같은 특수 시퀀스는 텔레프린터에서 새 줄(개행)을 의미했다.
HIFOLKS'
BEGIN
PRINT £HELLO WORLD£L??'
END'
다음은 엘리엇 803 알골을 사용하여 부동 소수점 계산 결과를 표 형식으로 출력하는 예시이다.[20]
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??' (PUNCH(3): 텔레타이프라이터로 출력)
B := SIN(A)'
C := COS(A)'
PRINT PUNCH(3),SAMELINE,ALIGNED(1,6),A,B,C' (SAMELINE: 줄 바꿈 억제, ALIGNED(1,6): 소수점 앞 1자리, 뒤 6자리 형식)
END'
END'
ICT 1900 시리즈 알골ICT 1900 시리즈 알골은 종이 테이프나 천공 카드로 입력을 받았고, 출력은 라인 프린터로 이루어졌다. 종이 테이프 '전체' 모드에서는 소문자 입력도 가능했다. 코드에서 괄호 `(`와 `)`를 문자열 따옴표로 사용하고, 공백 문자를 `%`로 표기한 점이 특징이다.[24]
'PROGRAM' (HELLO)
'BEGIN'
'COMMENT' 열린 따옴표는 '(', 닫힌 따옴표는 ')', 출력 가능한 공백은 %로 써야 함 (일반 공백은 무시됨);
WRITE TEXT('('HELLO%WORLD')');
'END'
'FINISH'
5. LEAP
LEAP는 알골 60 프로그래밍 언어의 확장으로, 삼중 연결 기억 장치를 제공한다. 이 삼중 연결 기억 장치의 세 가지 항목은 객체의 속성이 특정 값을 갖는다는 연관 관계를 나타낸다. LEAP는 1967년 캘리포니아 대학교 버클리의 제롬 펠드먼(Jerome Feldman)과 MIT 링컨 연구소의 폴 로브너(Paul Rovner)에 의해 개발되었다. LEAP는 SAIL에서도 구현되었다.
6. 표준화
알골 60은 코볼과 함께 표준화를 추구한 최초의 언어 중 하나였다.
- ISO 1538:1984 프로그래밍 언어 - 알골 60 (안정화)
- ISO/TR 1672:1977 알골 기본 기호의 하드웨어 표현 (현재 철회됨)
참조
[1]
논문
Backus normal Form vs Backus Naur Form
1964-12
[2]
웹사이트
ACM Award Citation / Peter Naur
http://awards.acm.or[...]
ACM
2005
[3]
웹사이트
How recursion got into programming: a tale of intrigue, betrayal, and advanced programming-language semantics
https://vanemden.wor[...]
2014
[4]
웹사이트
Hints on Programming Language Design
http://www.eecs.umic[...]
1973-12
[5]
웹사이트
Revised(3) Report on the Algorithmic Language Scheme (Dedicated to the Memory of ALGOL 60)
http://groups.csail.[...]
2009-10-20
[6]
웹사이트
The Encyclopedia of Computer Languages
http://hopl.murdoch.[...]
[7]
논문
Dijkstra's Rallying Cry for Generalization: the Advent of the Recursive Procedure, late 1950s – early 1960s
http://www.dijkstras[...]
[8]
서적
Software Engineering
Centrum Wiskunde & Informatica
2003-06-30
[9]
간행물
A syntax directed compiler for ALGOL 60
1961-01
[10]
서적
History of programming languages
[11]
논문
Some techniques used in the ALCOR Illinois 7090
https://doi.org/10.1[...]
[12]
논문
The ALCOR Illinois 7090/7094 post mortem dump
[13]
웹사이트
Rechenautomaten mit Trommelspeicher
http://www.fv-tsd.de[...]
Förderverein der Technischen Sammlung Dresden
[14]
논문
Algol in France: From Universal Project to Embedded Culture
https://www.academia[...]
2014
[15]
인용
Kurtz, ''op. cit.'', page 517.
[16]
학위논문
Etude et réalisation d'un compilateur Algol60 sur calculateur éléctronique du type IBM 7090/94 et 7040/44
https://tel.archives[...]
Université Joseph-Fourier - Grenoble I
1964-06
[17]
학회
Description d'un compilateur ALGOL
IBM
1965-04-27
[18]
서적
An Algol 60 compiler in Algol 60
Mathematisch Centrum
1973
[19]
서적
Compilers: Principles, Techniques, and Tools
Addison-Wesley
[20]
웹사이트
"803 ALGOL"
http://www.billp.org[...]
the manual for [[Elliott 803]] ALGOL
[21]
웹사이트
The ALGOL Programming Language
http://www.engin.umd[...]
2022-01-11
[22]
웹사이트
Hello world! Example Program
http://www.engin.umd[...]
2022-01-11
[23]
문서
Fortran#"Hello, World!" example
[24]
웹사이트
ICL 1900 series: Algol Language
http://www.icl1900.c[...]
ICL Technical Publication 3340
[25]
간행물
Backus Normal Form vs Backus Naur Form
1964
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com