AI VIDEO BRIEFING
PDP-6 에뮬레이터로 되살린 1966년 리스프, car와 cdr 이름의 진짜 유래
23대만 제작된 PDP-6를 에뮬레이터로 재현해 1966년경 리스프를 실행한 사례를 소개한다. 라이트펜과 자기테이프로 코드를 불러오는 과정, car와 cdr이라는 이름이 IBM 704 명령어 구조에서 나온 배경까지 정리했다.

핵심 메시지
쉽게 이해하기
스티븐 레비의 책 '해커스'를 읽은 한 개발자가, 그 이야기의 주인공 격인 컴퓨터를 직접 만져 보고 싶다는 생각에서 작업을 시작했다. PDP-6를 비롯한 여러 PDP 기종을 설계한 고든 벨은 PDP-6야말로 그 책의 진짜 주인공이라고 말했지만, 문제는 이 기계가 약 23대만 만들어졌고 지금은 남아 있는 실물이 없다는 점이었다. 결국 남은 방법은 소프트웨어로 자신만의 PDP-6를 만드는 것이었다.
온라인에 공개된 회로도와 설명 문서를 들여다보니 이 기계가 어떻게 동작하는지 이해할 수 있겠다는 판단이 섰고, 아주 낮은 수준에서 에뮬레이터를 작성하는 작업이 시작됐다. 지금 돌아가는 것은 두 번째 버전이다. 화면에는 자기테이프 장치 네 대, 텍스트를 주고받는 텔레타이프, 점을 찍고 문자 생성기로 글자를 쓸 수 있는 디스플레이, 종이테이프 판독기와 천공기, 그리고 아직 실물이 없어 화면으로 대신하는 전면 패널이 함께 재현돼 있다.
PDP-6와 리스프의 관계는 우연이 아니다. MIT 해커들은 캠퍼스 칠판 앞에서 리스프를 만들면서, 아직 첫 PDP-6가 완성되지도 않은 시점에 제조사를 찾아가 그곳에서 코드를 돌려 보고 디버깅했다. 그렇게 두 기술이 나란히 자랐기 때문에, 이 시연자는 둘 사이를 형제 관계에 가깝다고 표현한다. 실제로 사용된 리스프는 1966년경 판본으로, 자기테이프 이미지에서 운 좋게 바이너리를 찾아낸 뒤 소스 코드를 복원해 어셈블리에서 다시 빌드한 것이다. 그는 이런 작업을 '고고학'이라고 불렀다.
실행 과정 자체가 그 시대의 작업 방식을 보여 준다. 판독 키를 올리면 테이프가 돌며 디렉터리가 화면에 뜨고, 화면의 밝아진 지점을 감지하는 라이트펜으로 텍스트 편집기 TECO를 골라 메모리에 올린다. 테이프 번호와 파일 이름을 입력해 한 페이지를 편집기 버퍼로 끌어온다. 이 시절 리스프에는 함수 정의용 defun이 없어서, 식을 심볼의 속성 목록에 올리는 방식으로 함수를 정의한다. 팩토리얼을 계산하면 낯선 값이 나오는데, 출력이 8진수이기 때문이다. 진법 변수를 10진수로 바꾸면 익숙한 값이 나온다.
영상의 후반부는 리스프의 가장 유명한 두 함수 이름의 유래를 다룬다. IBM 704의 명령어 워드는 3비트 접두(prefix), 15비트 감소(decrement), 3비트 태그(tag), 15비트 주소(address) 필드로 나뉜다. 여기서 '레지스터의 주소 부분 내용'과 '레지스터의 감소 부분 내용'이라는 표현이 나왔고, 그것이 car와 cdr이 됐다. 흔한 오해와 달리 이 둘은 704의 기계어 명령 이름이 아니라 리스프가 붙인 함수 이름이며, 여기서 말하는 레지스터도 오늘날의 플립플롭 레지스터가 아니라 메모리의 한 워드를 뜻한다.
PDP-6에서도 구조는 비슷하다. 같은 36비트 기계지만 워드를 왼쪽과 오른쪽 18비트 절반으로 나눠, 왼쪽 절반에 car를, 오른쪽 절반에 cdr를 저장한다. 18비트는 PDP-6와 이후 PDP-10의 주소 크기와 일치하며, 반쪽 워드를 다루는 전용 명령들이 있어 이 연산이 매우 짧고 간결한 코드로 구현된다. 시연자는 그 코드를 두고 '시 같다'고 표현했다. cadr, caddr처럼 car와 cdr을 최대 네 단계까지 조합해 리스트 구조의 원하는 부분을 골라내는 방식도 함께 시연됐다.
주요 인사이트
- 하드웨어와 언어가 서로를 밀어 준 사례다. 리스프를 잘 돌리는 것이 PDP-6의 설계 목표 중 하나였고, 워드를 좌우 반으로 나눠 다루는 명령이 있었기에 리스프의 기본 연산이 짧은 코드로 구현될 수 있었다.
- car와 cdr이 난해한 이름으로 비판받아 왔지만, 그 배경은 1950년대 IBM 704 명령어 워드의 필드 구조라는 지극히 물리적인 사정이었다. 언어의 관습이 종종 당대 하드웨어의 흔적이라는 점을 보여 준다.
- 1966년 리스프가 어디서도 내려받을 수 없어 테이프 이미지에서 바이너리를 찾아 소스를 복원해야 했다는 대목은, 초기 소프트웨어 보존이 얼마나 취약한 상태인지를 드러낸다.
- TECO가 원래는 화면에 글이 보이는 편집기로 만들어졌지만, 여러 사람이 동시에 쓰는 시분할 환경에서 디스플레이가 하나뿐이라 화면 지원이 대부분의 판본에서 제거됐다는 일화는 제약이 도구의 형태를 바꾼 사례다.
- 실물이 사라진 기계를 회로도와 문서만으로 되살릴 수 있었다는 사실 자체가, 공개된 기술 문서가 수십 년 뒤에 갖는 가치를 보여 준다.
자주 묻는 질문
왜 실물 대신 에뮬레이터를 만들었나요?
PDP-6는 약 23대만 제작됐고 지금은 남아 있는 실물이 없기 때문입니다. 그래서 온라인에 공개된 회로도와 설명 문서를 바탕으로 아주 낮은 수준에서 에뮬레이터를 직접 작성했고, 현재 돌아가는 것은 그 두 번째 버전입니다.
car와 cdr이라는 이름은 어디서 왔나요?
IBM 704의 명령어 워드가 접두·감소·태그·주소 필드로 나뉘는데, '레지스터의 주소 부분 내용'과 '레지스터의 감소 부분 내용'이라는 표현에서 각각 car와 cdr이 나왔습니다. 704의 기계어 명령 이름이 아니라 리스프가 붙인 함수 이름이며, 여기서 레지스터는 메모리의 한 워드를 뜻합니다.
PDP-6가 리스프에 잘 맞는 기계였다고 하는 이유는 무엇인가요?
PDP-6는 36비트 워드를 왼쪽과 오른쪽 18비트 절반으로 나눠 다룰 수 있고, 반쪽 워드를 처리하는 전용 명령이 있습니다. car를 왼쪽 절반에, cdr을 오른쪽 절반에 저장하면 리스프의 기본 연산을 매우 짧은 코드로 구현할 수 있습니다.
이 시절 리스프는 지금과 어떻게 다른가요?
함수를 정의하는 defun이 없어서 식을 심볼의 속성 목록에 올리는 방식으로 함수를 정의합니다. 또 기본 출력이 8진수여서 팩토리얼 결과가 낯설게 보이는데, 진법 변수를 10진수로 바꾸면 익숙한 값이 나옵니다.
원문과 출처
이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.
YouTube 원본 영상 보기 ↗