본문 바로가기

Architecture for Software/Lisp

[Lisp의 역사 1] 존 매카시(John McCarthy)와 Lisp에 대하여

Lisp에 대한 체계적인 정리를 통하여 어렵게만 느껴지는 Lisp을 쉽게 익힐 수 있도록 "Lisp의 역사"부터 정리하고자 합니다.

Lisp의 역사에 빠질 수 없는 인물이 바로 존 매카시(John McCarthy) 박사님입니다. 이분이 어떤 분인지 간략하게 살펴보는 시간을 가지는 것이 Lisp이란 언어를 배우는 첫 단계인것 같습니다. Wikipedia의 내용을 중심으로 간략하게 정리하겠습니다.

출처: http://www-formal.stanford.edu/jmc/frames.html


존 매카시(John McCarthy)는 1927년 9월 4일 보스톤에서 태어났으며, 튜링 상을 수상한 미국의 컴퓨터 과학자이자 인지 과학자(cognitive scientist)입니다.

그는 수학에 재능을 보였으며, 십대때 캘리포니아 공과대학에서 사용하는 교과서를 바탕으로 수학을 공부하였습니다. 결과적으로 캘리포니아 공과대학 재학중 2년을 단축하여, 1948년 수학과에서 학사를 수여 받고, 프린스턴 대학에서 박사학위를 수여 받았습니다. 그후 스탠포드 대학과 다트머트 대학 및 MIT에서 재임하다가 1962년 스탠포드 대학에서 전임교수로 재직하게 되었습니다.

매카시는 인공지능(AI)분야에서 일하여 왔는데, 1958년에는 MIT에 재직하고 있었으며 advice taker를 제안하여, 질문과 답변 및 로직 프로그래밍에 관한 관심을 불러일으켰습니다. 이 당시 존 매카시는 Lisp을 처음 창안하였으며, 이에 따라 Lisp은 Fortran 이후에 가장 역사가 길고 널리 사용되는 언어가 되었습니다.

그 후 1960년에 CACM(Communications of the ACM)에 기고한 "Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I"을 발표하면서 간단한 연산과 함수를 위한 표기법을 바탕으로 알고리즘을 위한 Turing-complete한 언어를 만들 수 있다는 것을 확인시켜주었습니다.(참고로 Part2는 발표되지 않았습니다.)

Lisp을 창안할 당시 존 매카시는 AI에 많은 관심을 기울이고 있었습니다. 따라서 Lisp은 이 논문을 발표하고 난뒤 AI 어플리케이션을 구축하는데 가장 많이 선택되는 프로그래밍 언어가 되었습니다.


Lisp은 람다계산법(Lambda Calculus)을 기반으로 하고 있습니다.

참고로 람다 계산법은 λ-계산법이라고도 표기하며, 함수의 정의, 함수의 응용, 재귀를 위한 Formal System입니다.
일반적으로 Formal System이라함은 토큰, 디지털, 유한 범위를 다루는 시스템을 이야기합니다. 토큰은 특정한 가치를 대변해 주는 것을 의미하며, 디지털은 원래의 것은 완벽하게 재연할 수 있다는 의미이며, 유한 범위는 시스템이 처리할 수 있는 한계라는 것입니다. 즉 어떤 시스템이 처리하기 위한 용량이 무한대라고 하면, 결국 처리할 수 없게 될 것이기 때문에 특정한 한계를 가지는 것이며, 이 한계는 토큰에도 적용됩니다.

람다 계산법은 함수적인 프로그래밍이라고 불리우는 컴퓨터 프로그래밍의 기본적인 패러다임을 형성하였으며, 연산하거나 재귀하는 이론의 문제점을 해결하는데 유용한 도구를 제공해 주었습니다. 람다 계산법은, 첫번째 클래스 엔티티(first-class entities)라는 함수에 인자(arguments)를 전달하면 결과가 반환되는 것입니다. 람다 계산법은 이상적이고, 최소화된 프로그래밍 언어의 사상을 구성할 수 있습니다. 어떠한 알고리즘이라도 표현할 수 있도록 하며, 가장 중요한 것은 함수적인 프로그래밍 모델을 만들어 주었다는 점입니다.

함수적인 프로그래밍은 상태와 데이터를 입력하고 출력할 수 있는 독점적인 함수들을 다루며, 상태적인 부작용을 만들어내지 않으며, 입력 데이터를 변경하지 않습니다. 최신 함수 언어는 람다 계산법에 기반으로 구축되어 있으며 Erlang, Haskell, Lisp, ML, Scheme을 포함하여, 초기 언어로는 Clojure, F#, Nemerle, Scala와 같은 것들이 있습니다.

람다 계산법은 계속 수학적인 기반을 제공하여주고 있습니다.


람다 계산법을 기반으로한 함수기반의 프로그래밍 방식을 선보인 Lisp은 선구적 많은 아이디어를 제공하였습니다. 트리 데이터 구조(tree data structures), 자동 저장공간 관리(automatic storage management), 동적 타이핑(dynamic typing), 객체지향 프로그래밍(object-oriented programming), 자체적인 컴파일러(self-hosting compiler) 등이 그러한 예이입니다.

사실 전 세계에서 2번째로 역사가 긴 언어가 이러한 아이디어들을 기반으로 구성되어 있다는 자체가 놀라운 일입니다. 객체지향 프로그래밍이 널리 퍼지기 시작한 것은 사실 그리 오래되지 않았기 때문입니다. 특히 동적 타이핑의 경우 최근에야 많은 언어에서 도입되었습니다.


이렇게 혁신적인 프로그래밍 언어의 이름이 Lisp이 된 이유는 "LISt Processing"을 의미하기 때문입니다. 즉 Lisp 언어의 가장 중요한 데이터 구조가 Linked lists이기 때문입니다. 또한 Lisp의 소스 코드 자체가 List 자체를 만들어가기 때문입니다.


존 매카시가 처음 Lisp을 창안한 후로 Lisp은 참으로 많은 방언을 만들어 내고 있으며, 참으로 많은 언어에 영향을 주었습니다. 참고로 Lisp은 다른 프로그래밍 언어와 달리 수 많은 방언이 존재합니다. 누구나 우리가 사용하는 언어와 마찬가지로 Lisp의 방언이나 사투리를 만들어 낼 수 있습니다. Lisp의 수 많은 방언과 역사를 확인하고 싶다면, http://www.softwarepreservation.org/projects/LISP/index.html 를 확인하시기 바랍니다. 엄청난 Lisp의 역사를 확인하실 수 있습니다.

존 매카시와 Lisp의 관계는 무한 리스트처럼 계속 연결되어 오고 있습니다. 그리고 우리에게도 연결되고 있습니다.


다음에는 존 매카시가 직접 작성한 History of Lisp(http://www-formal.stanford.edu/jmc/history/lisp/lisp.html)이란 글을 통하여 Lisp의 역사를 살펴보고자 합니다. 감사합니다. ;-)