알골 (프로그래밍 언어)

포트란에 대항하여 개발된 프로그래밍 언어

알골(ALGOL, Algorithmic Language의 준말)[1]은 1950년대 미국에서 만들어진 포트란에 대항하여 유럽의 학자들을 중심으로 개발된 프로그래밍 언어이다. 알고리즘의 연구개발, 수치 계산과 논리 연산에 이용하기 위한 목적으로 만들어졌다. ALGOL은 여러 ALGOL계 언어의 총칭으로 ALGOL이란 이름의 프로그래밍 언어는 존재하지 않는다.

ALGOL 2.0의 1965년 매뉴얼

역사 편집

1958년 취리히에서 열린 국제회의에서 제안된 것이 그 기원으로 여겨진다. (이 언어는 후에 ALGOL 58로 불리게 되지만, 당초의 이름은 IAL이었다.)

1960년에 제안된 ALGOL 60 은 그 문법이 BNF 표기법으로 기술되었으며 구조화된 프로그래밍의 형태를 갖고 있었다.

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

표준으로 IFIP TC/WG2.1에서 ALGOL 60이 제정되었다. 이후에는 이어지는 표준화 작업은 진행되지 않고 1984년에야 ALGOL 60에 상당하는 것이 ISO 표준으로 지정되었다. z 1968년에는 ALGOL 68이 개발되었다. ALGOL 68에서는 2단계 문법 Wijngaarden 표기법으로 문법이 기술되었다. ALGOL 60의 후계 언어가 제정되기까지 파스칼을 설계한 Wirth의 ALGOL W를 비롯한 여러 후보자가 있었지만, 결국은 ALGOL 68이 후계로 지정되었다. 그러나 너무 복잡하고 방대한 사양을 요구했기 때문에 ALGOL 68 컴파일러는 실제 구현이 어려웠고, Wijngaarden 표기법 또한 난해하여 실용적으로 보급되지 못했다.

규격 편집

  • 알골 58 - 본래 IAL (International Algebraic Language)이라는 이름으로 제안됨
  • 알골 60 - 1960년대 중반부터 1963 개정 시까지 X1 ALGOL 60이라는 이름으로 처음 구현[2][3]
  • 알골 68 - 1973년 개정[4]

예제 편집

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

  • 알골 60
PROCEDURE Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k) ;
     VALUE n, m ; ARRAY a ; INTEGER n, m, i, k ; REAL y ;
 COMMENT The absolute greatest element of the matrix a, of size n by m
     is transferred to y, and the subscripts of this element to i and k ;
 BEGIN
     INTEGER p, q ;
     y := 0 ; i := k := 1 ;
     FOR p := 1 STEP 1 UNIT 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
  • 알골 68
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 #

각주 편집

  1. The name of the family is sometimes given in mixed case (Algol 60), and sometimes in all uppercase (ALGOL68). For simplicity this article uses ALGOL.
  2. Backus, J. W.; Bauer, F. L.; Green, J.; Katz, C.; McCarthy, J.; Perlis, A. J.; Rutishauser, H.; Samelson, K.; Vauquois, B.; Wegstein, J. H.; van Wijngaarden, A.; Woodger, M. (May 1960). Naur, Peter, 편집. 《Report on the Algorithmic Language ALGOL 60》. Copenhagen. doi:10.1145/367236.367262. ISSN 0001-0782. 
  3. “Revised Report on the Algorithmic Language Algol 60”. 1963. 2007년 6월 25일에 원본 문서에서 보존된 문서. 2007년 6월 8일에 확인함. 
  4. “Revised Report on the Algorithmic Language ALGOL 68” (PDF). 1973. 2014년 9월 13일에 확인함. 

외부 링크 편집