Lisp의 뿌리
2001년 5월
(이 글은 매카시가 정확히 무엇을 발견했는지 스스로 이해하기 위해 작성했습니다. 리스프 프로그래밍을 위해 이 내용을 알 필요는 없지만, 리스프의 본질 — 그 기원과 의미론적 핵심 모두 — 을 이해하고자 하는 모든 이에게 도움이 될 것입니다. 이러한 핵심을 가지고 있다는 사실은 리스프의 특징 중 하나이며, 다른 언어와 달리 리스프에 방언이 존재하는 이유이기도 합니다.)
1960년, 존 매카시는 프로그래밍 분야에서 유클리드가 기하학에 했던 것과 유사한 일을 해낸 놀라운 논문을 발표했습니다. 그는 소수의 간단한 연산자와 함수 표기법만으로 전체 프로그래밍 언어를 구축할 수 있음을 보여주었습니다. 그는 이 언어를 "List Processing"의 약자를 따서 Lisp라고 불렀는데, 그의 핵심 아이디어 중 하나는 코드와 데이터를 모두 위해 _리스트_라는 간단한 데이터 구조를 사용하는 것이었기 때문입니다.
매카시가 발견한 것을 이해하는 것은 단순히 컴퓨터 역사에 한 획을 그은 사건으로서뿐만 아니라, 오늘날 프로그래밍이 나아가고 있는 방향의 모델로서도 가치가 있습니다. 제 생각에 지금까지 정말 깔끔하고 일관된 프로그래밍 모델은 두 가지였습니다: C 모델과 Lisp 모델. 이 두 가지는 마치 높은 지대처럼 보이며, 그 사이에는 습지 같은 저지대가 있습니다. 컴퓨터가 더욱 강력해짐에 따라, 개발되는 새로운 언어들은 꾸준히 Lisp 모델을 향해 나아가고 있습니다. 지난 20년간 새로운 프로그래밍 언어를 만드는 인기 있는 방식은 C 모델에 런타임 타이핑(runtime typing)과 가비지 컬렉션(garbage collection)처럼 Lisp 모델에서 가져온 부분들을 조금씩 추가하는 것이었습니다.
이 글에서는 매카시가 발견한 것을 가능한 한 가장 간단한 용어로 설명하고자 합니다. 요점은 단순히 40년 전 누군가가 알아낸 흥미로운 이론적 결과에 대해 배우는 것이 아니라, 언어들이 어디로 향하고 있는지를 보여주는 것입니다. Lisp의 특이한 점 — 사실 Lisp의 정의적인 특성 — 은 Lisp 자체가 Lisp로 작성될 수 있다는 것입니다. 매카시가 이것으로 무엇을 의미했는지 이해하기 위해, 우리는 그의 수학적 표기법을 실행 가능한 Common Lisp 코드로 번역하면서 그의 발자취를 따라갈 것입니다.