리스프 실행을 위해 특별히 설계된 맞춤형 워크스테이션인 ‘Lisp Machine’의 기술적 특징과 흥망, 그리고 그 유산이 현대 컴퓨터 아키텍처와 소프트웨어 생태계에 남긴 영향을 살펴본다.
‘Lisp Machine’은 Lisp 실행을 위해 특별히 설계된 맞춤형 컴퓨터 워크스테이션으로, 20년 동안 Lisp 전통의 중요한 일부였다. 최근에는 여러 Lisp Machine 벤더의 몰락, 표준화로의 전환, 그리고 축소 명령어 집합(RISC) 아키텍처가 가져온 발전을 고려해 Lisp Machine이 더 이상 권장되지 않게 되었다. 하지만 그 죽음에 대한 소문은 크게 과장되어 있다. 대부분의 상용 컴퓨터 언어와 달리, Lisp는 언제나 이상(理想)의 언어였다. 그 뿌리는 람다-계산 이론에 있다. 다른 언어들이 추상화에서 구현상의 간극을 프로그래머에게 짐으로 지우는 반면, Lisp는 완전한 추상화를 지원하는 것을 늘 목표로 해왔다. 1이러한 Lisp의 이상주의적 성향 때문에, Lisp는 대학과 산업계에서 컴퓨터 지향 연구를 위한 선택 언어가 되는 경우가 잦았다. 컴퓨터 프로그래밍의 더 세속적인 어려움들을 제거함으로써, 연구자들은 (당시로서는) 창(윈도잉), 프레젠테이션 매니저, 객체-1For example, in ‘C’ the answer to (1-2/3)*3 is either 3 (!) or perhaps 0.99999994, in Lisp it is 1; in ‘C’ the answer to 2147483647+2147483647 is -2 (!), in Lisp it is 4294967294. Because ‘C’ is transparent to imple-mentation detail, it may be that some ‘C’ implementa-tions will give the right answer (or a different wrong answer) for these particular examples; nonetheless, the programmer’s task is often more difficult because of this transparency. Lisp also has finite limits in its implementation, but they are usually large enough to not be of practical importance. 지향 프로그래밍, 통합 프로그래밍 환경, 컴퓨터 음악, 집적회로 설계, 그리고 물론 인공지능(AI)과 같은 초복잡(당시 기준) 기술을 실험할 수 있었다.
하지만 Lisp의 순수성에는 대가가 따랐다. 많은 언어가 구현상의 제약을 드러내도록 선택하는 것은 종종 효율성을 위한 선택이다. 정상적인 경우의 속도는 최적화되지만, 비정상적인 경우가 감지되지 않은 채로 남을 위험이 있다. 반면 Lisp는 흔한 경우뿐 아니라 드문 경우도 동일한 방식으로 처리됨을 보장한다. 항상 경계해야 한다. 모든 연산은 예외를 확인해야 한다. 그 결과, 전통적인 머신에서의 Lisp는 역사적으로 다루기 무거웠다. 1970년대 초, 몇몇 연구자 그룹은 Lisp의 효율을 개선하기 위해 두 가지 새로운 하드웨어 기술을 활용했다. 태그드(tagged) 아키텍처와 마이크로프로그래밍이다. 태그드 아키텍처는 각 데이터 워드에 타입 정보를 함께 저장하여, 사실상 오버헤드 없이 동적으로 변하는 타입(Lisp 언어의 두드러진 특징)을 추적한다. 마이크로프로그래밍은 Lisp 언어의 고수준 의미론에 더 가깝게 맞는 복잡한 명령을 구현함으로써 더 단순한 컴파일러를 가능하게 한다. 이러한 기법을 실험한 끝에 결국 “Lisp Machines”가 상업적으로 소개되었다. 이들 머신의 다른 새로운 특징은 다음과 같다:
2 THE LISP M ACHINE 11 J ULY 1991 D RAFT
• “스택 캐시” — Lisp의 실행은 스택 지향적이다. 스택의 상단 요소들을 캐싱함으로써, 컴파일러에서 복잡한 레지스터 할당 알고리즘 없이도 레지스터 기반 실행에 가까운 효율을 달성한다. 스택 캐시는 또한 함수 인자와 값이 레지스터로 전달되는 것처럼 빠른 함수 호출과 복귀를 지원한다.
• 가비지 컬렉션 지원 — Lisp의 저장소 관리 시스템은 흔히 “가비지 컬렉터”로 구현되는데, 이는 사용되지 않는 객체를 자동으로 회수한다. Lisp Machine의 가상 메모리 하드웨어는 타입 태그와 협력하여 객체 참조 로드와 스토어를 추적하므로, 소프트웨어가 어떤 객체가 사용 중인지 빠르게 판별하고 사용되지 않는 객체를 효율적으로 회수할 수 있다.
• 명령어 에뮬레이션 — Lisp Machine 하드웨어가 예외 상황(예: 하드웨어가 강제한 구현 한계를 넘는 정수 산술 연산, 또는 소프트웨어로 정의된 타입에 대한 연산)을 만나면, 하드웨어는 소프트웨어 “에뮬레이터” 서브루틴으로 트랩한다. 이 서브루틴은 해당 연산의 완전한 의미론을 Lisp의 규정대로 구현하며, 마치 그 처리가 머신 명령에 의해 수행되는 것처럼 동작한다.
초기의 Lisp Machines는 마이크로프로그래밍 아키텍처를 쓰기 가능한 제어 저장소로 구현했는데, 이는 명령어 집합, 그리고 어느 정도는 머신의 다른 아키텍처적 특징들까지도 새로운 마이크로코드를 작성·컴파일·로딩하는 것만으로 바꿀 수 있음을 뜻했다. 이러한 유연성은 Lisp를 위한 하드웨어 지원에 대한 추가 실험과 진화를 이끌었다.
70년대 후반과 80년대 초반, AI와 Lisp Machine 모두 짧지만 열광적인 유행을 누렸다. 두 개의 작은 회사 Symbolics와 Lisp Machines, Inc.(LMI)가 Lisp Machines를 만들기 위해 설립되었고, Symbolics는 결국 상장했다. Xerox와 Texas Instruments(TI)도 시장에 진입했다. 1986년에는 Integrated Infer-ence Machines(IIM)도 Lisp Machine 시장에 들어왔다. 실험 속도를 높이고 싶었던 컴퓨터 과학 연구자들은 이 머신들을 앞다투어 구매했다. 기업들은 주식 거래 분석, 지진학 데이터 해석, 항공사 스케줄링, 대출 신청 평가 등 광범위한 문제를 해결하리라는 기대 속에 R&D 연구소에 이를 들여놓았다. 당시 Lisp Machines는 상당한 성능을 갖춘 유일한 컴퓨터 워크스테이션이자 Lisp 프로그램을 효율적으로 개발하고 실행하기 위한 유일한 경제적 해법이었다. 이들 회사가 만든 Lisp Machines는 여러 세대에 걸친 진화를 겪었다. $150,000의 높은 가격으로 시작해 TTL로 구현된, 크기와 소비 전력이 VAX/780에 맞먹는 박스 2에서 출발하여, 결국 Apple MacIntosh용 $10,000 애드인 보드 위의 1~2칩 VLSI 구현으로까지 제공되었다. 이 최신 세대의 Lisp Machines에서 Symbolics는 자사의 명령어 집합이 마스크 프로그래밍된 ROM에 커밋할 만큼 충분히 진화했다고 만족했다.
그러나 이 머신들의 시장 규모가 작기 때문에, 범용(commodity) 머신의 최첨단 하드웨어 기술을 활용할 수 없었다. 항상 몇 세대 뒤처지며, 그 지점에서 설계와 생산 비용이 더 현실적이 된다. 초기에 이 작은 회사들은 대중 매체에서 큰 주목을 받았다. AI에 대한 “순수 플레이” 3를 대표했기 때문에 월가의 총아였다. 하지만 오늘날에는 오직 2It is amusing to realize that a machine of this size and price was ever considered a work-station. 3An investment term meaning the company is in a single market and can be expected to track that mar-ket’s fortunes more closely than a diversified company might. P. T. W ITHINGTON 3DRAFT 11 J ULY 1991
Symbolics만이 시장에 남아 Lisp Machine 워크스테이션을 판매하려고 하고 있으며, 규모는 전성기의 약 1/6 정도다. 대중적 평가는 AI 기술이 과대 판매되어 신뢰를 잃었고, 동시에 표준에 대한 요구를 충족하기 위해 Unix가 부상했으며, 환상적인 속도로 실행될 수 있는 단순한 명령을 가진 RISC 컴퓨터가 Lisp 구현을 위한 맞춤형 머신의 필요성을 없앴다는 것이다. 과장된 기대를 충족하지 못하자, 언론은 칭찬하던 때만큼이나 재빨리 Lisp Machine 회사들을 저주했다. 같은 사실에 대한 더 자비로운 해석은, Lisp Machine 시장은 (그 난해한 성격 때문에) 작으며, 정상적인 스타트업 통계를 고려할 때 놀랍도록 잘하고 있다는 것일 수 있다.
Lisp Machine은 워크스테이션 기술의 초기 시절에 선구자였다. 오늘날 표준이 된 고해상도 비트맵 디스플레이, 마우스 포인팅 장치, 대용량 가상 메모리와 로컬 디스크를 갖추었고, 심지어 16비트 디지털 스테레오 사운드도 있었다! 이러한 혁신들 중 일부는 Lisp와 그 연관 기술의 진화에 기여했다. 불행히도, 이러한 기능들이 훗날 범용 워크스테이션에서도 발견되는 기능들과 유사했기 때문에, Lisp Machine의 시장이 무엇인지에 대한 혼란이 생겼다. Lisp를 실행하기에 이상적이고 많은 컴퓨터 연구자들에게 꿈의 머신이었던 Lisp Machine의 이국적인 기능들은 범용 시장에서는 가치가 거의 없거나 전혀 없었다. Lisp 엔지니어링 워크스테이션으로서 누렸던 성공은, 이를 컴퓨터 지원 소프트웨어 공학(CASE) 워크스테이션으로 마케팅하려는 시도에서 흔들렸다.
최소한, Lisp Machine은 그 시대 하드웨어 아키텍처의 원시적인 성능 때문에 Lisp가 자기 이상주의에 빠져 익사할 뻔했을 때 Lisp를 위해 존재했다고 말할 수 있다. Lisp Machine 회사들이 끌어낸 관심은 Lisp 시장에 생명을 더했을지도 모른다. 적어도 Lisp 연구에 대한 투자를 늘렸음은 확실하다. 전성기에는 Lisp Machines를 만들던 회사들이 하드웨어와 소프트웨어를 포함한 컴퓨터 과학의 여러 영역에서 최고 수준의 인재를 끌어모았고, 혁신적인 연구에 자금을 지원했다.
하지만 Lisp 언어는 상업 시장에서, 많은 고객이 AI의 “뱀기름”으로 여기게 된 것과의 연관 때문에 피해를 보기도 했다. 유일하게 인식되는 구제 가치가 Lisp를 돌리는 것뿐이었기에, Lisp Machine은 이중으로 고통을 받았다. Lisp Machine의 미래가 암울해 보이지만, 그래도 싸움 없이 자신의 Lisp machines를 포기하지 않으려는 소수의 열성 지지자들이 남아 있다. 그들은 “MIS” 부서와 싸우며, 종종 비인가 장비로 귀찮은 말을 듣지 않기 위해 Lisp Machines를 숨겨두는(옷장에 넣는) 결말을 맞는다.
Lisp가 어떤 문제에 대한 이상적 해법을 제시할 수는 있지만, 이상적 해법이 언제나 경제적 해법은 아니라는 주장도 있다. 특히 이를 실행하기 위해 맞춤형 머신이 필요하다면 더더욱 그렇다. 오늘날에는 Lisp Machine과 유사한 성능을 가진 범용 컴퓨터 워크스테이션이 폭넓게 존재하며, 대부분 경쟁력 있는 Lisp 구현을 제공한다. Lisp Machine이 소개될 당시 연구 영역으로 여겨졌던 많은 소프트웨어 기술은 이제 범용 소프트웨어와 하드웨어로도 구현 가능할 정도로 정형화되었다. 다른 것들도 뒤따를 것이다. 이러한 추세는 많은 이들에게 Lisp의 강력함에 대한 필요가 더 이상 없고, Lisp Machine에 대한 필요는 더욱 없다는 믿음을 심어주었다. 하지만 흔히 고려되지 않는 것은, Lisp Machine이 없었다면 이러한 기술들이 오늘날의 위치에 도달했을지(혹은 아예 탐구되기나 했을지) 여부다.
범용 소프트웨어와 하드웨어로의 추세에도 불구하고, Lisp Machine이 이상적인 해법이며 또한 가장 경제적일 수도 있는 초복잡하고 진화적인 문제들은 계속 존재한다. 미래에는 그런 문제가 더 많아질 가능성이 크다.
4 THE LISP M ACHINE 11 J ULY 1991 D RAFT
컴파일러 기술은 Lisp Machine의 탄생 이후 크게 진화했다. Lisp Machine의 마이크로코드가 컴파일러 작성자를 위해 해결해주던 많은 문제들은 이제 다룰 수 있게 되었다. 경이적인 실행 속도를 위해 초단순 명령어 집합에 의존하는 RISC 혁명은, 전통적인 언어에서조차 컴파일러 작성자가 유사한 문제를 다루도록 강요했다. 하지만 RISC 머신에서 Lisp를 판매하는 회사들은(어쩌면 마지못해) 하드웨어 기술의 세대 격차에도 불구하고 Lisp Machines가 Lisp 벤치마크에서, 그리고 더 자주 고급 Lisp 애플리케이션에서 최신 RISC 구현과 여전히 경쟁력이 있거나 이를 능가한다고 인정한다.
오늘날 대부분의 RISC 하드웨어 아키텍처는 대형 레지스터 집합 또는 레지스터 윈도우를 지원하는데, 이는 스택 캐시와 매우 유사하다. 최신 RISC 아키텍처 중 일부를 자세히 살펴보면, 일반화 산술 연산을 효율적으로 구현하기 위한 태그드 데이터 지원이 드러난다. 아키텍처 연구 논문들은 Lisp Machine 가비지 컬렉터가 객체 참조를 추적하고 자동 저장소 회수를 가속하기 위해 개척한 읽기 및 쓰기 “배리어(barriers)”의 장점과, Lisp Machine의 명령어 에뮬레이션과 유사한 방식으로 예외 조건을 신속히 처리할 수 있게 하는 “빠른 트랩(fast traps)”을 계속 평가하고 있다.
현재 상용 버전의 Lisp machine은 80년대 초의 부동소수점 및 벡터 코프로세서가 도달했던 통합 수준 정도에 이르렀다. 이들이 Lisp 역사에서 단지 각주로 남게 될지, 아니면 계속 진화하여 그 최선의 아이디어들이 미래 상용 컴퓨터 하드웨어의 필수적인 일부로 살아남을지는 두고 볼 일이다.