1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# 042 — 같은 문서 앱의 저메모리 네이티브 터미널 편집기
2026-09-24. 기존 GTK 문서 창은 실제 편집 경로를 증명했지만 유휴부터 약
44 MiB RSS를 사용한다. Pure의 작은 실행 구성을 실제 입력 인터페이스에서도
확인하기 위해 **선택형 POSIX 터미널 편집기** `pure-edit-tui-fixed`를 만들었다.
기존 `editor.pure`를 빌드 시 준비한 실행 계획, `runtime.c`의 작업·예산·수명,
`store.c`의 조건부 저장 효과를 CLI·HTTP와 공유한다. 코어에 터미널 타입,
렌더러 또는 전용 UI 스레드를 넣지 않았다.
편집기는 터미널의 크기 변경을 처리하고, 화살표로 커서를 이동하며, 한국어
UTF-8 문서를 입력·저장한다. Ctrl+O로 키를 열고, Ctrl+S로 저장하며,
Ctrl+R은 다시 읽고 Ctrl+Q는 종료한다. 미저장 초안을 버리는 명령은 두 번
입력해야 한다. 외부 실행기가 먼저 같은 문서를 수정하면 저장의 버전 충돌을
보여주고 초안은 유지한다. 편집 중에는 갭 버퍼를 사용해 커서 주변 입력을
파일 전체 이동 없이 처리한다. 저장 직전에 현재 파일 버전을 읽고 변경
구간만 작성된 `splice` 입력에 담는다. 저장 대상 파일이 크면 기본 저장소가
파일 전체를 다시 쓰는 비용은 여전히 남는다.
[실제 PTY 검사](../../prototypes/connections/results/2026-09-24-fixed-tui-final/pty-flow.json)는
커서 위치의 문서 생성·저장, 두 키 전환, 한국어 코드포인트 이동·입력, 화면 크기 변경, CLI가 먼저 수정한
문서의 충돌, 1 MiB 문서 끝의 1 B 추가와 새 CLI 프로세스의 복원, 키 명령과
`SIGTERM` 종료 후 터미널 설정 복구를 통과했다.
[ASan·UBSan 검사](../../prototypes/connections/results/2026-09-24-fixed-tui-final/pty-sanitized.json)도
같은 흐름을 통과했다. 검사 환경에서는 LeakSanitizer가 ptrace와 함께 실행되지
않아 누수 탐지만 껐다. 코어의 코드 크기와 기본 CLI는 바뀌지 않았다.
Linux AArch64/GCC 14 `-O2`의 [선택형 TUI 크기 게이트](../../prototypes/connections/results/2026-09-24-fixed-tui-final/profile.json)에서
링크된 `text`는 **28,226 B**, 직접 공유 의존성은 libc뿐이었다.
[PTY 검사](../../prototypes/connections/results/2026-09-24-fixed-tui-final/pty-flow.json)의
1 MiB 편집 피크 프로세스 RSS는 **3,168 KiB**로 4 MiB 회귀 상한 아래다.
이는 한 번의 실행 값이며 터미널 에뮬레이터,
커널 TTY 버퍼, 저장 파일·페이지 캐시를 포함하지 않는다.
[CLI+TUI 묶음](../../prototypes/connections/results/2026-09-24-fixed-tui-final/pure-document-cli-tui-linux-aarch64.tar.gz)은
**33,654 B**이며 [다른 위치에서 해제·편집](../../prototypes/connections/results/2026-09-24-fixed-tui-final/package.json)을
검증했다. 시스템 libc는 묶지 않았다.
이 경로는 **실용적인 저메모리 TUI의 첫 검증**이다. 현재 TUI는 빌드 시 고정한
문서 정의만 실행하고, 앱 정의 자체를 편집하지 않는다. 코드포인트 단위
이동은 복합 문자소·터미널별 폭 처리와 동일하지 않다. 마우스, 접근성 트리,
IME 통합, GUI 레이아웃, 문서 목록·검색, macOS 빌드·실행은 아직 검증하지
않았다. 따라서 GTK GUI와 기능 동등·메모리 동등 비교를 주장하지 않는다.
재현 명령은 `make -C prototypes/connections check-tui`, 실행은
`prototypes/connections/build/pure-edit-tui-fixed --store STORE note`다.
|