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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
# 037 — 작성 도구와 실행 전용 문서 앱 분리
2026-09-24. [036](036-gtk-memory-boundary.md)의 GTK 창은 44 MiB 이상의
선택 비용을 지닌다. 마이크로 목표를 지키기 위해 이번에는 화면 기능을 늘리지
않고, 기존 `.pure` 문서 앱의 **실행물에 매번 싣던 파서**를 분리했다.
[`pure-compile`](../../prototypes/connections/compile-program.c)은 빌드 때
기존 `pure_program_parse()`가 검증한 `PureProgram`을 C 초기화자로 출력한다.
[`pure-edit-fixed`](../../prototypes/connections/edit.c)는 생성된 상수를
기존 `PureRuntime`과 기본 파일 저장소에 연결한다. 실행기 링크에는
`program.c`와 컴파일 도구가 없다. 별도 `pure-edit`는 `.pure` 소스를 실행 때
읽는 작성·실험 경로로 남긴다. 새 VM, 로더, 가변 명령 디스패치 또는 코어의
항상 포함 기능을 추가하지 않았다.
같은 Linux AArch64/GCC 14 `-O2` 빌드에서 기본 문서 CLI의 링크된 `text`는
35,807 B, 고정 정의 실행기는 **19,244 B**다. 같은 `editor.pure`의 읽기,
조건부 수정, 응답과 기본 파일 저장을 수행하면서 **16,563 B(46.3%)** 줄었다.
직접 공유 라이브러리 의존성은 둘 다 libc뿐이다.
[20 KiB 실행기 코드 상한 결과](../../prototypes/connections/results/2026-09-24-fixed-program/profile-final.json).
컴파일 도구 자체의 `text`는 22,034 B이며 빌드 시 필요하다. 이를 프로젝트
전체 비용에서 사라진 것으로 세지 않는다.
1 MiB 문서 편집의 피크 RSS는 고정 실행기 **2,112 KiB**였다
([4 MiB 회귀 상한 결과](../../prototypes/connections/results/2026-09-24-fixed-program/memory-verified.json)).
기존 소스 실행기의 같은 측정은 2,080 KiB였다. 따라서 이 결과는 **코드
크기 감소**를 입증하지만 RAM 감소를 입증하지 않는다. 실행기 패키지는
14,385 B 압축 파일이다
([이동 후 실제 편집·복원 검사](../../prototypes/connections/results/2026-09-24-fixed-program/package-final.json)).
기존 22,482 B 소스 작성 패키지와는 포함 파일 및 실행 중 정의 변경 능력이
다르므로 패키지 크기를 동등 기능의 성능 비교로 쓰지 않는다. 이 고정 패키지는
`editor.pure` 파일과 파서·컴파일러를 포함하지 않는다.
[동작 일치 검사](../../prototypes/connections/results/2026-09-24-fixed-program/parity-release.json)는
소스 실행기와 고정 실행기를 서로 다른 저장 디렉터리에서 같은 작업으로
비교했다. 문서 생성·수정·오래된 버전 충돌·잘못된 범위·1 MiB 복원뿐 아니라
`selection.pure`의 동적 입력 범위, `excerpt.pure`의 중첩 읽기·필요 길이
검사까지 결과 코드·본문·메타데이터가 같았다. 잘못된 소스의 컴파일은 기존
생성 파일을 유지했고, 입력 파일을 출력 대상으로 지정하는 것도 거절했다.
같은 빌드 디렉터리에서 작성 정의를
`editor → selection → editor`로 바꾸면 실행물이 각각 다시 빌드됐다.
`nm`에서도 고정 실행기의 파서 심볼이 없음을 확인했다. 기존
`make check-release`, 새로운 `make check-fixed-profile`, 이동한 묶음의
검사가 모두 통과했다. GTK 창의 기존 기능 검사도 통과했다.
이 경로는 현재 **C 소스 초기화자**를 생성해 같은 대상의 C 컴파일러로
빌드한다. 안정적인 이식 바이트코드 형식이나 대상 독립 ABI는 아니다.
사용자가 실행 중 `.pure` 정의를 바꾸려면 기존 소스 실행기·작성 창이
필요하고, 고정 실행기는 다시 빌드해야 한다. 현재 작성 언어 자체도
`get`/`put` 한 저장 효과 범위다. 따라서 코드 크기 절감이 대규모 앱 표현,
네이티브 UI 메모리, macOS 검증을 대신하지 않는다. 다음 구현은 더 큰
앱을 작성 가능하게 하면서도 이 준비·실행 분리와 크기 상한이 유지되는지
확인해야 한다.
재현 명령: `make -C prototypes/connections fixed-editor check-fixed-profile`,
`make -C prototypes/connections BUILD=build/fixed-selection
FIXED_PROGRAM=examples/selection.pure fixed-editor`,
`make -C prototypes/connections BUILD=build/fixed-excerpt
FIXED_PROGRAM=examples/excerpt.pure fixed-editor`,
`python3 prototypes/connections/check_fixed_program.py`.
|