Emacs 내부 #01: 편집기가 아닌 C로 작성된 Lisp 런타임
GNU Emacs는 단순한 편집기가 아니라, C 언어로 구현된 Lisp 런타임 환경이라는 점이 핵심입니다. 1970년대 TECO 매크로에서 출발해, 복잡한 매크로를 프로그래밍 언어 수준으로 확장하기 위해 Emacs Lisp 인터프리터를 내장하였고, 이는 사용자가 실시간으로 편집기를 확장하고 맞춤화할 수 있게 합니다.
Emacs Lisp 인터프리터를 C로 구현한 이유는 당시 유닉스 환경에 적합한 Lisp 환경이 없었기 때문이며, 이로 인해 Emacs는 독특한 시스템 소프트웨어적 설계와 긴 생명력을 갖게 되었습니다. 또한, 현대 편집기들이 가상 머신(VM)을 핵심에 두는 점에서 Emacs의 설계 철학이 여전히 유효하며, Neovim의 LuaJIT 기반 런타임과 비교해보면 각기 다른 기술적 선택과 성능 차이를 이해할 수 있습니다.
이 글은 Emacs의 역사와 설계 철학, 그리고 Greenspun의 열 번째 법칙처럼 복잡한 소프트웨어가 결국 자체적인 프로그래밍 언어와 가상 머신을 내장하게 되는 현상을 설명하며, 앞으로 C로 구현된 Emacs Lisp 인터프리터의 구체적 구조와 작동 원리를 다룰 예정임을 알립니다.