모듈라-2
초창기의 프로그래밍 소스 코드는 펀치카드나 펀치테이프에 기록되었다. 따라서 오늘날처럼 컴파일러가 파일에서 프로그램 소스 코드를 불러오는 식이 아니었다. 자기 디스크가 보급되면서 오늘날과 같이 데이터가 파일이라는 단위로 관리되기 시작했고 자연스럽게 프로그래밍 소스 코드도 파일의 형태로 관리되기 시작했을 것이다.** 하지만 하나의 응용프로그램을 만들기 위해 여러 개의 파일이 사용될 정도는 아니었다.
운영체제, 특히나 시분할 운영체제가 개발되기 시작하면서 상황은 달라졌다. 하나의 파일에 담기에는 소스 코드의 양이 많아졌을 뿐만 아니라, 한 명이 아니라 여러 명이 일을 나누어 해야 했으므로 자연스럽게 소스 코드를 여러 개의 파일로 쪼갰을 것이 당연하다. 거기에 맞게 개발된 것인 바로 C 언어였다.
파스칼 언어는 교육용으로 개발되었으므로 비르트는 굳이 여러 개의 파일로 구성된 소스 코드를 고려하지 않았다. 앞의 예에서 보았듯이 파스칼로 작성한 프로그램은 PROGRAM이라는 선언 밑에 모두 모여 있다.
시간이 지나면서 그도 협업의 중요성을 알게 되었고, 다중 프로세스 시스템이 등장하면서 프로그램 사이의 동기화가 부각되자 모듈화된 소스 코드를 지원할 필요성을 절감했다. 그래서 그런 목적으로 파스칼 언어를 개선하여 나온 언어가 모듈라MODULA이다. 모듈라 언어를 발표하던 시점에 그는 미국 제록스 연구소에서 안식년을 보내게 되고 그곳에서 개인용 컴퓨터 알토Alto를 경험하게 된다. 강렬한 인상을 받은 그는 스위스에 돌아와서 직접 개인용 컴퓨터 시스템 제작에 나서는데, 이를 위해 모듈라 언어를 개선하여 모듈라-2 언어를 발표했다.
모듈라-2 언어가 파스칼 언어와 다른 점이라면 하나의 프로그램이 여러 개의 독립된 단위로 쪼개져서 개발될 수 있도록 지원한다는 점이다. 그런데 독립된 단위는 두 가지 종류가 있다. 하나는 ‘독립적으로 컴파일 가능한 단위’이고 다른 하나는 ‘독립적으로 실행 가능한 단위’이다. 전자를 모듈module이라고 부르고 후자를 코루틴coroutine이라고 부른다.
모듈
모듈라-2 언어를 사용해서 프로그래밍을 하게 된다면, 여러 개의 모듈로 하나의 프로그램을 구성하게 된다. 모듈은 각각 독립적으로 컴파일이 되는 단위이다. C 언어로 치자면 하나의 파일인 셈이다. 아래의 예를 보자.
위의 파스칼 코드는 예를 들기 위해 만든 프로그램이어서 실제로 하는 일은 없음에 유의하자. 이 프로그램은 두 개의 프로시저를 가지고 있고 모든 소스 코드가 한 군데에 모여 있다. 그런데 a라는 프로시저와 b라는 프로시저가 하는 일이 상당히 복잡해서 각각 프로그래머가 한 명씩 할당되었다고 해보자. 각자 맡은 프로시저를 수정하고 시험해야 할 터인데 세 명의 프로그래머(메인 프로그램 작성자 포함)가 한 개의 소스 코드를 공유해서 건드리게 되면 상당히 불편하고 비효율적이다. 각자 맡은 코드만 떼어서 작업하면 좋을 것이다. 그래서 이것을 모듈라-2 언어로 작성하면 아래와 같이 바꿀 수 있다.
세 개의 모듈로 나뉜 것을 볼 수 있다. 프로시저 a와 b는 각각 별개의 모듈로 구현된다. 이제 세 명의 프로그래머는 각자 맡은 소스 코드를 독립적으로 컴파일해서 일할 수 있다. 작업의 불편이 없어지고 효율이 오르는 것은 당연하겠다. 아울러 이렇게 하면 불필요한 컴파일 작업도 줄일 수 있다. 가령 프로시저 a와 b가 완벽하게 구현된 후에는 MyModule1과 MyModule2는 더 이상 재컴파일할 필요가 없어지기 때문이다.
사실, 이것은 C 언어에서 하나의 프로그램을 여러 개의 파일로 구성하는 것과 유사하다. 그래서 요즘의 관점에서 보면 MODULE이라는 예약어는 군더더기처럼 보인다. 하지만 C 언어에서는 모든 함수가 노출되어 있는 것에 비해 모듈라-2에서는 명시적으로 이를 지정해야 하는 점이 다르다. 위의 예에서 Myapp이라는 모듈이 프로시저 a와 b를 호출하기 위해서는 IMPORT라는 예약어를 사용해서 명시적으로 그 프로시저의 사용을 선언해야 하며, MyModule1과 MyModule2에서는 프로시저 a와 b를 다른 모듈에서 접근할 수 있도록 명시적으로 EXPORT라는 예약어로 선언해 주어야 한다. 이는 자바스크립트Javascript 언어에서 사용하는 import, export와 유사하다.
코루틴
코루틴coroutine은 다중처리multi-processing을 위해 도입된 개념이다. 유닉스 계열에서 말하는 프로세스process와 유사한 개념이다. 어떤 프로그램이 여러 개의 작업을 하고 싶은데 순차적이 아니라 동시다발적으로 하고 싶다면 이런 방법을 써야 한다. C 언어에서는 fork() 함수를 사용해서 새로운 프로세스를 생성한다. 모듈라-2 언어에서는 NEWCOROUTINE()이라는 프로시저를 사용한다. 모듈라-2 언어는 릴리스Lilith 컴퓨터의 시스템 소프트웨어 작성용으로도 사용되었기 때문에 인터럽트 처리나 입출력 처리와 같은 비동기적인 동작을 위해서도 이 코루틴 개념이 필요했다.
답글 남기기