ALGOL 60

ALGOL 60은 1960년에 유럽과 미국의 컴퓨터 과학자들이 공동으로 설계한 ALGOL 계열의 프로그래밍 언어이다. 정식 명칭은 Algorithmic Language 1960이며, 수치 계산을 비롯한 알고리즘을 기계와 출판물에서 공통으로 표현할 수 있는 국제적인 언어를 만드는 것을 목...

정식 명칭Algorithmic Language 1960
분류프로그래밍 언어, 범용 프로그래밍 언어
계열ALGOL
설계존 배커스, 프리드리히 L. 바우어, 줄리언 그린, 찰스 카츠, 존 매카시, 페테르 나우르, 앨런 펄리스, 하인츠 루티스하우저, 클라우스 자멜손, 아드리안 판 베인하르던, 베르나르 보쿠아, 조지프 웨그스타인, 마이클 우저
최초 발표1960년
주요 보고서《Report on the Algorithmic Language ALGOL 60》, 《Revised Report on the Algorithmic Language ALGOL 60》
패러다임명령형 프로그래밍, 절차적 프로그래밍, 구조적 프로그래밍
타입 체계정적 타입, 명시적 타입 선언
스코프어휘적 스코프
매개변수 전달값에 의한 호출, 이름에 의한 호출
주요 구현체X1 ALGOL 60, Burroughs ALGOL, Elliott ALGOL
이전 언어ALGOL 58
후속 언어ALGOL 68
영향을 준 언어Simula, CPL, Pascal, Ada, C, Modula, Scheme

ALGOL 60은 1960년에 유럽과 미국의 컴퓨터 과학자들이 공동으로 설계한 ALGOL 계열의 프로그래밍 언어이다. 정식 명칭은 Algorithmic Language 1960이며, 수치 계산을 비롯한 알고리즘을 기계와 출판물에서 공통으로 표현할 수 있는 국제적인 언어를 만드는 것을 목적으로 개발되었다. 1958년에 발표된 ALGOL 58을 바탕으로 1960년 1월 파리에서 열린 회의를 통해 설계되었고, 같은 해 5월 언어 보고서가 발표되었다.

ALGOL 60은 프로그램을 beginend로 둘러싸인 블록으로 구성하고, 블록 안에서 선언된 이름의 유효 범위를 제한하는 어휘적 스코프를 사용했다. 프로시저 내부에 다른 프로시저를 정의할 수 있었으며, 재귀 호출, 조건문, 반복문, 배열, 값에 의한 호출과 이름에 의한 호출 등을 언어 수준에서 제공했다. 이러한 구조는 이후 구조적 프로그래밍과 블록 구조 프로그래밍 언어가 발전하는 기반이 되었다.

언어의 구문은 메타언어를 이용해 체계적으로 기술되었다. 존 배커스가 ALGOL 계열 언어의 구문을 설명하기 위해 제안한 표기법을 페테르 나우르가 ALGOL 60 보고서에서 확장했으며, 이 표기법은 이후 배커스-나우르 형식으로 불리게 되었다. 프로그래밍 언어의 구문을 형식 문법으로 기술하는 방식은 컴파일러와 프로그래밍 언어 이론의 기본적인 방법으로 자리 잡았다.

ALGOL 60 자체는 FORTRAN이나 COBOL처럼 상업 환경에서 광범위하게 보급되지는 않았다. 표준 보고서가 입출력 기능을 정의하지 않았고 컴퓨터 제조사마다 문자 집합과 구현 방식이 달랐기 때문에 여러 방언과 호환성 차이가 생겼다. 그러나 대학과 연구 기관에서는 알고리즘 작성, 컴파일러 연구와 프로그래밍 언어 교육에 널리 사용되었으며, 오랫동안 학술 논문과 교재에서 알고리즘을 표현하는 사실상의 표준 언어로 기능했다.

ALGOL 60의 영향은 직접적인 사용 규모보다 언어 설계 방식에서 두드러진다. Simula는 ALGOL 60을 확장해 클래스와 객체 개념을 발전시켰고, CPLBCPL, B를 거쳐 C로 이어지는 계통에도 영향을 주었다. Pascal, Modula, Ada를 비롯한 여러 언어 역시 ALGOL 60의 블록 구조, 선언 방식과 제어 구조를 계승했다. 이러한 언어들은 넓은 의미에서 ALGOL 계열 언어 또는 ALGOL형 언어로 분류된다.


역사

ALGOL 이전의 프로그래밍 언어

ALGOL 58

파리 회의와 ALGOL 60의 설계

최초 보고서

개정 보고서

IFIP와 언어 유지 관리

보급과 쇠퇴

언어 설계

설계 목표

참조 언어와 표현 언어

블록 구조

선언과 문장

어휘적 스코프

중첩 구조

재귀

구문과 프로그램 구조

기본 기호

식별자와 예약어

블록과 복합문

할당문

조건문

반복문

goto 문과 레이블

주석

타입 체계

단순 타입

정수와 실수

불리언

배열

타입 변환

타입 검사

프로시저와 매개변수

프로시저 선언

함수 프로시저

중첩 프로시저

값에 의한 호출

이름에 의한 호출

Jensen의 장치

재귀 호출

식과 연산

산술식

불리언식

조건식

연산자 우선순위

함수 지정자

배열과 switch

배열 선언

다차원 배열

동적 배열 경계

switch 선언

배커스-나우르 형식

구문 표기법의 형성

ALGOL 60 보고서의 형식 문법

프로그래밍 언어 명세에 미친 영향

실행 의미

선언의 활성화

블록의 실행

이름과 저장 공간

프로시저 호출

이름에 의한 호출의 의미

구현 종속 요소

입출력과 외부 환경

표준 입출력의 부재

라이브러리 프로시저

구현별 확장

문자 집합과 표기 차이

구현

초기 컴파일러

Electrologica X1 구현

Burroughs 시스템

Elliott ALGOL

컴파일 기법

런타임 스택과 디스플레이

썽크를 이용한 이름에 의한 호출

주요 방언과 확장

Burroughs ALGOL

Elliott ALGOL

ALGOL W

JOVIAL

NELIAC

다른 구현별 방언

활용 분야

수치 계산

알고리즘 출판

교육

컴파일러 연구

프로그래밍 언어 연구

다른 프로그래밍 언어와의 관계

ALGOL 58

ALGOL 68

Simula

CPL과 BCPL

Pascal과 Modula

C

Ada

Scheme

영향

블록 구조 언어

구조적 프로그래밍

어휘적 스코프

형식 문법과 언어 명세

컴파일러 기술

알고리즘 표현 방식

장점과 한계

관련 문서