처리중입니다. 잠시만 기다려주세요.
TTJ 코딩클래스
정규반 단과 자료실 테크 뉴스 코딩 퀴즈
테크 뉴스
Hacker News 2026.08.25 33

Emacs 31.1, 큰 기능보다 실무 체감형 개선에 집중하다

Hacker News 원문 보기

오랜 개발 끝에 텍스트 에디터 Emacs의 새 버전 31.1이 공개됐다. 이번 릴리스는 과거 버전들과 달리 하나의 거대한 대표 기능을 내세우지 않는다. 새로운 가비지 컬렉터가 31.1에 포함될 것으로 예상되기도 했지만 결국 다음 버전인 Emacs 32로 연기됐다. 대신 31.1은 오래 사용해 온 이들이 체감할 만한 자잘한 편의 개선과, 한 시대의 종료를 알리는 상징적인 정리 작업으로 채워졌다.

unexec의 퇴장과 이식 가능한 덤퍼

이번 릴리스에서 가장 상징적인 변화는 unexec 덤퍼의 완전한 제거다. Emacs는 일반적인 애플리케이션과 구조가 다르다. 소스를 컴파일해 링크하면 C 코어와 인터프리터만 담긴 앙상한 temacs가 나오는데, 여기에 표준 라이브러리를 전부 메모리에 올려야 우리가 아는 Emacs가 된다. 이 부트스트랩 과정은 상당한 CPU와 메모리를 소모하며 경우에 따라 수 분이 걸릴 만큼 느리다. 과거 가정용 컴퓨터나 다중 사용자 환경에서 여러 명이 아침에 동시에 Emacs를 띄우면 시스템이 휘청거릴 정도였다.

해결책은 라이브러리를 한 번 모두 로드한 뒤 Emacs 메모리의 각 세그먼트를 그대로 새 바이너리로 덤프해 두는 방식이었다. 매번 elisp 상태를 다시 구성할 필요가 없어지는 것이다. 문제는 이 방식이 glibc의 특수한 함수 몇 개에 의존했다는 점이다. 수십 년간 이를 지원하던 glibc 팀이 손을 떼면서 Emacs는 다른 길을 찾아야 했다. 그 대안이 Daniel Colascione가 만든 이식 가능한 덤퍼(portable dumper)로, 내부 메모리 구조를 1:1로 덤프하는 대신 직렬화 형식을 표준화한 방식이다. 약 10년 전 도입돼 수년째 기본값으로 쓰였지만, Emacs 특유의 하위 호환성 원칙 때문에 구식 unexec도 소수 사용자를 위해 남아 있었다. 이번에 그것이 완전히 사라졌다.

tree-sitter와 자동 문법 설치

실무자 입장에서 더 반가운 변화는 tree-sitter 관련 개선이다. 구문 분석 기반의 tree-sitter 모드는 그동안 언어별 문법(grammar)을 사용자가 직접 준비해야 한다는 진입 장벽이 있었다. 31.1부터는 Emacs가 알고 있는 TS 모드에 대해 적절한 언어 문법을 대신 설치해 주겠다고 제안한다. 문법 확보라는 걸림돌이 상당 부분 해소되면서, 구조적 이동과 편집을 돕는 Combobulate 같은 도구를 시도해 볼 여지도 넓어졌다.

완성(completion) 경험도 이어서 다듬어졌다. Emacs 30.1에서 도입된 completion-preview-mode는 Company나 Corfu 같은 팝업 방식과 유사하되, 별도의 자식 프레임이 아니라 Emacs 고유의 Completions 창을 활용하는 네이티브 접근이었다. 31.1은 여기에 세밀한 커스터마이즈 옵션을 대거 추가했다. 다만 원저자는 이 기능들이 방해가 되지 않는 수준으로 작동하려면 적지 않은 설정 작업이 필요하다고 짚는다. fido-mode 완성기에는 ido-mode에서 유래한 flex 매칭이 재구현돼 들어갔다.

창 관리와 터미널 사용성

창(window) 조작에서도 소소한 개선이 눈에 띈다. window-layout-rotate-clockwise 같은 명령으로 창 배치를 회전할 수 있고(C-x w 접두사 아래 여러 옵션이 있다), 분할 방향을 어느 정도 지정할 수 있게 됐다. 특정 창을 C-x o의 순회 대상에서 제외하는 no-other-window 플래그도 제공된다. 다만 원저자는 이런 기능들이 버퍼와 창이 서로 자유롭게 뒤바뀌는 Emacs의 근본적 구조 문제를 완전히 풀어주지는 못하며, 여러 훅으로 덧대는 임시방편에 가깝다고 평가한다.

오래 굳어 있던 기능이 켜진 사례도 있다. 터미널 Emacs의 마우스 지원은 수년 전 추가돼 있었으나 터미널마다 동작 편차가 커 기본으로 비활성화돼 있었는데, 이제는 메뉴 클릭 등이 기대대로 작동한다. 우클릭 컨텍스트 메뉴(context-menu-mode)에도 명령이 보강됐고, 터미널에서의 자식 프레임은 GUI처럼 삽입형 팝업으로 동작한다. Emacs 서버를 systemd 서비스로 등록해 실행하도록 설정하는 방법도 안내된다.

주의할 대목도 있다. 데몬으로 실행할 때조차 패키지의 사소한 경고 메시지가 표시되도록 바뀌었는데, 원저자는 정말 중요하다면 오류로 처리됐을 것이라며 반기지 않는다. 또한 font-lock-string-face 같은 페이스와 같은 이름을 가진 '변수'들이 폐기 대상이 됐다는 점도 유의할 필요가 있다. 페이스 자체가 아니라 동명의 변수를 가리키는 것이라 헷갈리기 쉬운데, customize-face로 페이스를 설정해 두었다면 영향받지 않는다. 전반적으로 31.1은 극적인 신기능보다, 오래 쌓인 불편을 하나씩 손보고 낡은 유산을 정리하는 성격의 릴리스다.

이 뉴스가 유용했나요?

TTJ 코딩클래스 정규반

월급 외 수입,
코딩으로 만들 수 있습니다

17가지 수익 모델을 직접 실습하고, 1,300만원 상당의 자동화 도구와 소스코드를 받아가세요.

144+실전 강의
17개수익 모델
4.9수강생 평점
정규반 자세히 보기

"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"

실제 수강생 후기
  • 비전공자도 6개월이면 첫 수익
  • 20년 경력 개발자 직강
  • 자동화 프로그램 + 소스코드 제공

매일 AI·개발 뉴스를 받아보세요

주요 테크 뉴스를 매일 아침 이메일로 전해드립니다.

스팸 없이, 언제든 구독 취소 가능합니다.