본문 바로가기
개발일지/주저리주저리

파스칼(Pascal) 연서(戀書) - 1 - before 1980

by 사악신 2012. 9. 7.

컴퓨터 언어 중 파스칼(Pascal) 이라는 놈이 있습니다. 저와 20년 이상 함께한 지기인데요. 긴 시간을 함께한 반면 누군가에게 제대로 소개해본 적은 없는 것 같네요. 물론 언어에 대한 우월을 논하고자 하는 것은 절대 아닙니다. 오히려 한국의 프로그래머들이 간과하고 있는 부분을 이 녀석을 통해 이야기할 수 있을 것도 같고... 또한, 기존 Pascal 을 사용하고있는 여타 프로그래머들에게 잘 몰랐던 녀석의 새로운 면을 알려주고 싶다는 생각도 들었구요. 자자~ 그럼 파스칼의 창시자를 만나 볼까요?


Niklaus E. Wirth


1934년 스위스 출생으로 전자 공학과 컴퓨터 과학이 전공입니다. 여러 경력이 있는데~ 1968년에 취리히 스위스 연방 연구소(ETH 취리히)의 정보학 교수가 되었으며 이후 1999년까지 활동을 하였습니다. 이 분이 고안한 언어만 하여도, Euler, Algol W, Pascal, Modula, Modula-2, Oberon, Oberon-2, Oberon-07 이 있습니다.


그럼, 파스칼은 언제 등장하였느냐? 언어의 개발은 1968년 ~ 1969년 사이에 이뤄졌으며 세간에 발표되는 것은 1970년이 되겠습니다.


C 언어의 경우 1969년 ~ 1973년의 기간 동안 개발되었고 세간에 알려지는 것은 1971년입니다. 간혹, C 의 난해함을 해결하기 위하여 교육용으로 파스칼이 등장한 것처럼 오해하시는 분들이 계시는데, 두 언어는 ALGOL 60 이라는 언어로부터 파생된 형제지간이며 파스칼이 형님이 되겠습니다. 그리고 ALGOL 60 의 문법을 보면 Pascal 이 C 보다 ALGOL 60 에 더 가까운 것을 알 수 있습니다.


다음은 ALGOL 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 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


참, ALGOL 60 은 ALGOrithmic Language 1960 의 약자이지만, 개인적인 생각으로는 악마 혹은 메두사의 잘린 머리라는 의미의 ALGOL 과 연관이 있어보입니다. 여담으로 프로메테우스 별자리에서 메두사의 왼쪽눈에 해당하는 변광성(시간에 따라 밝기가 변함) 또한 알골이라고 부릅니다. 제 개인적으로 좋아하는 별인데... 파스칼을 좋아하는 저로선 이런 이름에서도 인연을 느낍니다. ^^


그럼, 1970년경에 발표된 파스칼의 초기 모습을 볼까요?(아래 첨부한 이미지는 1972년에 발표된 개정판 문서입니다. 1970년의 초고는 구하지 못했네요. ㅠㅠ)



파스칼의 정의와 특징은 여기에 다 나와있습니다. 모태 특징이랄까요? 요약하면 다음과 같습니다.


1. Algol 60 을 기반으로하여 만든 언어

2. 다양한 데이터 구조를 정의하여 사용 가능함(T 의 탄생이랄까? ㅎ)

3. 가르치기 쉬우며 대형 프로그램을 작성하기 용이함

4. 파스칼은 파스칼로 개발됨(GNU Pascal 은 C 로 만들어져 개인적으로 변태라고 생각합니다. ㅡㅡ;)


흔히들 파스칼을 교육용 언어라고 칭하며 폄하하려는 경우가 있는데, 교수였던 니클라우스가 의도하고자한 바는 고성능의 언어이지만 배우기에 어렵지 않다였습니다. 이것은 자바가 등장하였을 때 내건 모토 중 하나와도 다르지 않습니다.(자바의 주요 특징 중 하나가 Simple 이지요.)


또, 파스칼이 덩치가 크고 느리다(자바가 듣듯이~)라는 이미지를 만든 결정적 요소가 있습니다. 1970 년 파스칼이 등장하며 CDC 6000 계열 컴퓨터에서 돌아가는 버전 즉, Pacal-P 가 소개됩니다. 여기서 CDC 6000 계열 컴퓨터를 살펴봐야겠군요. 자~ 아래는 세계 최초의 슈퍼 컴퓨터인 CDC 6600 (1964년)입니다.



세계 최초의 슈퍼 컴퓨터는 Cray 1 (1972년) 이 아니냐구요? Cray 1 은 아마도 가장 성공적으로 흥행한 슈퍼 컴퓨터라는게 맞는 얘기일 겁니다. 그리고 CDC 6000 계열이라 함은 6600 과 이보다 성능을 낮춘 6400 그리고 6500, 6700 을 지칭합니다. 6600 의 성능은 약 CPU 10 MHz 클럭과 2M Byte 의 물리메모리를 가진 컴퓨터라 보시면 되겠습니다. 보통 사용하고 계시는 스마트폰 보다도 훨씬 못미치는 수준의 컴퓨터인 셈이지만 1960년 당시엔 대단한 성능이었습니다.


그리고 이런 슈퍼컴퓨터인 CDC 6000 계열에서 동작하던 컴파일러가 파스칼입니다. 이를 오늘날의 파스칼과 구분하기 위하여 Pascal P 라고 부를 수 있습니다. 관련 내용의 일부를 살펴볼까요?



여기서, PASCALSYSTEM 이라는 부분을 주목할 필요가 있습니다. 이것이 바로 Pascal-P 시스템이 되겠습니다.^^ 무슨 말인고하니... CDC 6000 에 Pascal-P 시스템을 구동하고, 파스칼로 가상 스택 머신에서 동작할 수 있는 코드를 컴파일하여 생성한 후 이를 실행하는 방식입니다. 이를 자바로 대체하면, 자바로 VM 에서 동작할 수 있는 바이트 코드를 컴파일하여 생성한 후 이를 실행하는 방식이 되겠습니다.


즉, 1977년 파스칼이 ISO 7185 표준을 위한 그룹이 형성되어 1982년 발행이 되기 전까지 파스칼은 자바처럼 가상 머신에서 돌아가는 구조로 많이 알려져 있었습니다. 그러니 크고 느리다는 소리를 들었던 거죠.


1970년 ~ 1971년 : 파스칼 언어 등장, CDC 6000 용 컴파일러 등장(Pascal-P1)

1972년 ~ 1974년 : 파스칼 언어 개정판, Pascal-P2

1976년 : Pascal-P3, Pascal-P4

1977년 : ISO 7185 표준화 그룹 형성

1982년 : ISO 7185 표준으로 발행

2009년 : Pascal-P5


여기서 Pascal-P2 의 별도 버전이라 할 수 있는 UCSD Pascal 이 등장하고, Kenneth Bowles 가 이를 활용하여 UCSD p-System(p-code, p-machine) 을 개발하게 됩니다. 재미있는 것은 자바를 만든 James Gosling 이 카네기 멜론 대학원 시절 DEC VAX 컴퓨터용 p-machine 을 개발하였고 이러한 개념은 자바에까지 이어지게 됩니다. p-System 과 자바의 차이점이라고하면 p-System 은 그 자체가 OS 라고 할 수 있지만, 자바의 경우 실행환경이 여러 OS 에 설치되는 특징이 있습니다. 또한, p-System 의 p-code 는 다른 언어, 가령 포트란과 같은 언어를 사용하여 생성할 수도 있어 오늘날의 닷넷의 여러 언어를 지원한다는 개념 또한 이미 과거의 유산인 셈입니다. ^^


이러한 유산에 대한 이해도가 우리나라 프로그래머와 미국, 유럽 프로그래머와의 차이를 발생시킵니다. 아마도 앞으로는 원래 p-System 으로의 회귀 즉, OS 와 VM 이 합쳐지는 일이 벌어져도 그들에게는 매우 자연스런 사고의 흐름이 될 것입니다.


아래는 CDC 6000 계열에서 돌아가는 파스칼 컴파일러 소스의 일부입니다.



지금까지 1980년 이전의 파스칼에 대하여 살펴보았습니다. 오늘날의 파스칼은 이와는 조금 구분되는 성격으로 발전하였지만, 최근 델파이 컴파일러가 LLVM 기반으로 대형 수술을 꾀한다는 이야기가 있어 조금 자세히 살펴보았습니다. 어쩌면 이것은 의도적이든 아니든... 초기 파스칼의 모습으로의 회귀라고 볼 수도 있습니다. 그리고 그것은 느리고 크다 즉, 자바와 같은 이미지로의 회귀라고도 할 수 있겠습니다만, 지금과 같은 H/W(하드웨어) 의 성능과 앞으로의 발전 속도를 예상해본다면 무모한 도전이 아닌 해볼만한 시도인 것으로도 분명 보입니다.

반응형

댓글