궁극의 프로그래밍 언어 1

학부때 컴퓨터 공학과의 리스프 해커 친구들은 “리스프에서는 말이지.. 코드를 데이터로 다룰 수 있지” 라고 심오한 표정을 지으며 거들먹거렸다.

폴 그레이엄은 “왜 리스프는 다른가” 에서 프로그래밍 언어들은 점점 더 리스프에 가까워지는 방향으로 발전하고 있으며, 마침내 “매크로” 를 지원하는 순간 더이상 새로운 언어라고 부를 수 없을 것이라고 농담했다. 적어도 폴 그레이엄은 리스프가 “궁극의 프로그래밍 언어” 라고 말하고 싶은 것 같다.

정말 그럴까? 만약 리스프가 진짜 “궁극의 프로그래밍 언어” 라면, 왜 우리는 더 많은 리스프 개발자들을 주변에서 마주치지 못하는 것일까? 아니 “궁극의 프로그래밍 언어” 라는게 과연 존재할 수나 있는 것일까? 만약 그런 것이 존재한다면, 그런 언어는 어떤 특징을 갖고 있을까?

폴 그레이엄은 “간결성이 곧 강력함이다” 에서 코드로 작업을 얼마나 압축적으로 표현할 수 있는 지가 그 언어의 강력함을 결정한다면서, 개발에 소요되는 시간은 (사용된 언어와 상관없이) 코드 줄수에 비례하기 때문에 언어의 간결성은 곧 해당 언어를 사용하는 개발자의 생산성을 높여준다고 설명한다.

코드를 더 압축적으로 만드는 방법은 추상화 밖에는 없다. 이 점에서 매크로라는 궁극의 추상화 도구를 지원하는 리스프의 생산성이 (그 어떤 언어와 비교해서도) 가장 높다는 주장은 꽤 설득력이 있다.

그런데 왜 리스프는 (최근 10여년간 리스프에 대한 관심이 크게 높아졌음에도 불구하고) 여전히 실무 개발에서 거의 쓰이지 않는 것일까? 리스프 개발자들이 주장하듯, 프로그래밍 언어의 우수성과 인기 사이에는 상관관계가 없으며 현재의 상황은 그저 역사적인 사건들의 우연한 결과에 불과하기 때문일까?

리스프와 비슷한 시기에 등장했으며 오늘날까지도 가장 인기있는 언어 1, 2위를 다투고 있는 C 언어를 살펴보면 무언가 힌트를 얻을 수 있지 않을까? C 언어의 개발 생산성 순위는 현대의 프로그래밍 언어들 중에 최하위에 위치할 것이다. 그럼에도 불구하고 왜 C 언어는 여전한 인기를 누리고 있는 것일까?

그건 C 언어가 아니면 할 수 없는 코딩 작업들이 있기 때문이다. 하드웨어에 직접 접근해야 하거나, 미시적인 성능 최적화가 필요할때 개발자들은 C 언어가 아닌 다른 선택지를 떠올리기 힘들다. 임베디드 시스템 프로그래밍, 3D 그래픽 프로그래밍, 고성능 네트워크 서버 개발 등이 그런 예이다.

바로 이 지점에서 리스프의 한계가 비로소 드러난다. 상상할 수 있는 거의 모든 프로그래밍 작업이 가능하다는 점에서 C 언어는 강력하다. 아무리 높은 추상계층에서 코딩 작업을 한다고 해도 프로그램은 결국 하드웨어 레벨에서 실행된다. 그리고 상위의 추상계층에서 하위의 추상계층을 직접 제어하는 것은 가능하지 않다.

모든 추상화 작업에는 본질적인 한계가 있는데, 조엘 스폴스키가 “구멍이 새는 추상화의 법칙” 에서 설명하듯이 어느 추상계층도 완전하지 못하다는 점이 바로 그것이다. 그래서 개발자들에게는 평소에 작업하는 추상계층 보다 하위의 추상계층으로 내려가야하는 일이 때때로 생겨난다. 이때 프로그래밍 언어가 하위 추상계층에 대한 손쉬운 접근을 허용하지 않는다면, 해당 언어로 코딩할 수 있는 작업의 범주는 큰 제약을 받게 된다.

우리는 이제 궁극의 언어가 갖춰야할 두가지 조건을 찾았다. 바로 1) 코드를 데이터로 다루는 기능과 2) 로우레벨 접근성이다. 그리고 마침, 이 두가지 조건을 완벽하게 갖추고 있는 프로그래밍 언어가 있다. 어떤 언어냐고? 바로 어셈블리어다.

어셈블리어에서 코드를 데이터로 취급할 수 있다고? 당연하다. (기계어로 변환된) 어셈블리어 코드는 그냥 바이너리 데이터이기 때문이다. 예를 들어, 특정 데이터 영역(즉 메모리)에 “기계어” 를 저장하고, PC 레지스터에 해당 영역의 주소를 입력하는 순간, 그 데이터는 이제 CPU 인스트럭션 코드의 나열로 인식되며 순차적으로 IR 레지스터로 카피돼 CPU 에서 실행되기 시작할 것이다.

로우레벨 접근성은 두말할 필요도 없다. 어셈블리어와 로우레벨은 마치 동의어나 다름없기 때문이다. 이제 적어도 리스프 보다는 어셈블리어가 “궁극의 프로그래밍 언어” 에 한발짝 더 가까이 다가서게 되었다. 😉

2편에서 계속.

Copyright @ 2018 Dae San Hwang (Theme: Doo by ThemeVS)