Emacs, 단순 편집기가 아닌 C로 구현된 Lisp 런타임, 그 깊은 역사와 철학
GNU Emacs는 단순한 코드 편집기가 아닌, C로 구현된 Lisp 런타임(Lisp Runtime)을 내장하고 있음
Emacs의 역사는 TECO 매크로에서 시작되었으며, Lisp 언어(Lisp Language)를 통해 편집기의 확장성을 확보함
Greenspun의 법칙(Greenspun's Tenth Rule)에 따라, 복잡한 소프트웨어는 결국 자체적인 DSL과 가상 머신을 갖게 됨
Neovim과 VSCode와 같은 현대 편집기 역시 가상 머신(Virtual Machine)을 핵심으로 사용하며, Emacs와 유사한 패턴을 보임
Emacs의 탄생 배경: TECO 매크로와 Lisp
Emacs는 1970년대 MIT AI 연구소에서 사용되던 텍스트 편집기 TECO의 매크로를 개선하기 위해 시작되었다. TECO 매크로(TECO Macros)의 복잡성이 증가하면서, Richard Stallman과 Guy Steele은 튜링 완전(Turing Complete)한 프로그래밍 언어를 내장하기로 결정했다. 그 결과, Emacs는 Elisp 인터프리터(Elisp Interpreter)를 내장하여 편집기 자체를 프로그래밍 가능하게 만들었다.
Greenspun의 법칙과 편집기의 진화
게시물은 Greenspun의 법칙을 인용하며, 복잡한 C 또는 Fortran 프로그램은 결국 자체적인 DSL과 가상 머신을 갖게 된다고 설명한다. Emacs는 Elisp를 통해 이 법칙을 따랐으며, Neovim 또한 LuaJIT를 사용하여 Lua 런타임(Lua Runtime)을 내장했다. VSCode와 같은 현대적인 편집기 역시 JavaScript와 Electron을 통해 가상 머신(Virtual Machine)을 핵심으로 사용하며, 유사한 패턴을 보인다.
Emacs와 Neovim의 기술적 비교
게시물은 Emacs와 Neovim의 기술적 차이점을 비교하며, Neovim이 LuaJIT, 비동기 작업(Async Jobs), RPC 기반 플러그인을 통해 더 나은 성능을 제공한다고 언급한다. Emacs는 단일 스레드 메인 루프(Single-threaded Main Loop)를 사용하고, Neovim은 이벤트 루프(Event Loop)를 활용하여 동시성(Concurrency)을 개선했다. 하지만, Emacs는 Elisp 인터프리터(Elisp Interpreter)를 통해 강력한 커스터마이징(Customization) 기능을 제공한다.
Emacs의 생산성 도구로서의 가치
댓글에서는 Emacs가 이메일 관리, 코드 탐색, 데이터베이스 관계 찾기 등 다양한 작업에 활용될 수 있는 강력한 도구임을 강조한다. 특히, MIT Remembrance Agent를 활용하여 이메일과 코드베이스를 연동하고, Supercite를 통해 인용 기능을 활용하는 사례가 언급되었다. 하지만, Elisp의 스레드 부재와 같은 기술적 한계에 대한 아쉬움도 제기되었다.