aboutsummaryrefslogtreecommitdiffstats
path: root/CHECKPOINT.md
diff options
context:
space:
mode:
Diffstat (limited to 'CHECKPOINT.md')
-rw-r--r--CHECKPOINT.md24
1 files changed, 24 insertions, 0 deletions
diff --git a/CHECKPOINT.md b/CHECKPOINT.md
index ca027f0..146e7e4 100644
--- a/CHECKPOINT.md
+++ b/CHECKPOINT.md
@@ -41,6 +41,8 @@
## 1.0까지 남은 격차 (2026-10-19)
+해법과 차례는 [029](docs/design/029-past-one-node.md)(초안)에 적었다. 1.0의 마감 선언이 아니라, 아래를 하나씩 푸는 길이다.
+
027의 다섯 단계와 140의 명세 열한 개(11의 암호는 설계상 aup 밖)를 마친 상태에서, 1.0(앱 계약을 얼리고 묶음을 내는 것)까지 남은
것을 근거와 함께 가른다.
@@ -80,6 +82,28 @@ TPC-C, 140의 명세 앱)으로 다시 써야 한다. 그 표의 미완료(실�
## 공개할 작업물과 완료 증거
+**기준(2026-10-19 다시 씀).** 검증 앱은 aup 이전의 문서 편집기가 아니라 지금의 통합 앱 모델이다. aup로 쓰고 Pure가 검증해
+실행하며 Vega가 표면을 만드는 앱들이 그것이다: Vega의 메신저, TPC-C, 140의 명세 앱 열한 개(암호는 설계상 aup 밖), 호스트와
+링크와 저장소의 실측. 검증 기기는 로컬 Raspberry Pi 5(Linux AArch64)다. "검증된 것"은 근거 문서와 검사가 있는 것만 적는다.
+"미완료"는 029의 차례로 푼다. 이 표는 1.0의 완료 선언이 아니다.
+
+| 요구 | 완료에 필요한 증거 | 검증된 것 | 미완료 |
+|---|---|---|---|
+| 하나의 앱 모델 | 앱을 한 언어로 쓰고, 실행 전에 검증하고, 모든 실행 길에서 같은 값 | aup → 모듈 v7(008), 검증기(타입·스택·합류·소속·반복 상한·함수의 바꾸는 집합). aup `make check`(진단 320, 모듈 21)와 Pure `make check`의 `module_specs`(140의 아홉 명세를 세 실행 길에서, 출력이 같다) | 보기에서 블록·재귀 fn 부르기, 레코드나 갈래 하나인 상태, 커서 자리의 글자(140의 핵의 틈). 고정 한도(레코드 16필드, fn 64개 등) |
+| 세상의 명세를 쓸 수 있다 | 분야마다의 명세가 공식 벡터나 알려진 구현과 같다 | 140: SHA-256(NIST), JSON(JSONTestSuite), inflate(zlib 640·손상 240), DNS(dnspython 400·손상 300), HTTP/1.1(h11 200, 모든 자름), UAX #14(LineBreakTest 16,672줄), RFC 6298(사건 241,612), 상자 배치(Taffy 0.01 안, 2,000 트리), TPC-C·은행 질의. 줄은 파이썬의 1.47–2.04배 | 줄이 파이썬 이하인 것은 JSON 검사기 하나. RFC 6298의 주기 틱(단발 타이머 없음) |
+| 계산이 C에 가깝다 | 같은 일을 C와 같은 기계에서 견준다 | 일곱 일(실수 루프, 배낭, 정렬, 조인, 텍스트, 행렬, BFS) C의 1.19–5.58배(125, 138) | 바이트·텍스트·호출의 일이 C의 61–183배(inflate 102, DNS 61, HTTP 83, UAX #14 183). fn이 있는 모듈은 실행기로만 돈다(029의 ③) |
+| 영속과 회복 | kill -9와 커밋 각 단계의 죽음 뒤 확인한 사건이 남고, 바뀐 모듈로 데이터가 옮겨진다 | 확인한 사건이 모두 남는다(076, 081). TPC-C의 아홉 표가 SQLite와 모든 행이 같다(092). 교체는 이름으로 잇고 100만 항목에 1.1 ms(115). 바뀐 모듈을 놓는다(교체당 0 B, 115) | 값을 계산하는 이관, 큰 목록의 막지 않는 다시 쓰기(100만 항목 172 ms 막음), 제자리 재사용, 캐시보다 큰 목록, 바깥의 백업·검증 도구(029의 ④) |
+| HTTP 서비스와 여러 앱 | 보기와 입력이 HTTP가 되고, 앱 여럿이 서로를 막지 않는다 | 보기 GET·입력 POST, 밀기(SSE, 019·120), 한 호스트의 앱 여럿(017·111·115). Pi 5에서 64 B GET 139k/s, 내구 쓰기 21.3k/s, 유휴 RSS 2.3 MiB(075·077·087) | macOS의 호스트, HTTP로 앱을 더하고 바꾸기, 앱 라우트의 TLS(앞단이 한다), 응답을 기다리는 출력의 묶음 전달 |
+| 노드 사이 | 노드가 봉인해 보내고, 끊김과 죽음을 견디며 순서대로 한 번 | `pure://` 링크(봉인, 핸드셰이크 없음, 어느 쪽을 kill -9 해도 잃거나 겹친 기록 없음, 쉬는 링크 132 B). 봉인 전달 462k/s | 복제와 주인 바꾸기, 노드 사이의 원자성, 토폴로지를 데이터로(029의 ①) |
+| 사람의 표면 | 한 명세가 사람이 쓰는 인터페이스가 된다 | Vega가 한 명세에서 TUI(셀 갱신), CLI, NUI, 웹 GUI, KMS 픽셀 표면을 만든다. 메신저가 노드 사이에 봉인해 보내 상대에 보이기까지 RAM p50 0.79 ms(089) | 격자를 넘는 배치(내용 크기, 줄바꿈, 스크롤, 겹), 표시 목록, 네이티브 창, IME 조합의 표시, 클립보드(029의 ②) |
+| 기계 사이 결정론 | 같은 사건이 다른 기계에서 같은 출력과 저장소 | 114: `pure-run` 1,053번과 저장소가 Pi·WSL2·M3 Mac에서 같다(10-05). 027·028·140 뒤: Pi의 gcc와 clang이 486번 모두 같다(140) | 027·028·140 뒤의 Mac과 WSL2(이번에 닿지 않았다). 호스트와 링크는 리눅스에서만 봤다 |
+| 묶음과 진입 | 깨끗한 곳에서 빌드·실행하고, 진입이 하나다 | aup `check`·`build`·`watch`·`query`, Pure의 `pure-serve`, Vega의 표면 | 하나의 진입(`aup run`), aup·Pure·Vega의 배포 묶음과 이동 후 검증, 다른 언어의 C ABI(029의 ⑤) |
+| 마이크로 기본 비용 | 기본 코어와 고르는 부품의 비용을 따로 잰다 | 유휴 RSS 2.3 MiB(087), 앱 하나 120 KiB와 앱 100개에 스레드 넷(017·111), 쉬는 링크 132 B | 통합 앱 모델의 배포 묶음 크기와 기본 코어의 크기를 아직 다시 재지 않았다(아래 문서 앱 시기의 수는 옛 모델의 것) |
+
+### 문서 앱 시기의 기록 (2026-09 이전, 그대로 둔다)
+
+아래는 aup 이전의 문서 편집기를 검증 앱으로 삼던 때의 기준과 표다. 기록으로 남긴다.
+
기존 작업물 편집·저장 흐름을 발전시킨 **네이티브 작업물 편집기**를 하나의 검증 앱으로 삼는다.
앱 정의와 현재 상태를 구분하고, 선택한 항목·내용을 변경·저장·복원하며, 다른 실행기와
변경을 주고받는다. CLI의 자동화와 네이티브 UI가 같은 앱 로직을 사용해야 한다.