aboutsummaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
authoreunhhu <[email protected]>2026-10-19 13:41:28 +0100
committereunhhu <[email protected]>2026-10-19 13:41:28 +0100
commitde1d30da1203cae9cd857052c339ac026f18cffa (patch)
tree8b46ebd4bfdd641160e64d1a2c0ad701fd242f5d /docs
parent47d81d85ae059d0c949d5c95214e009889421bd1 (diff)
downloadpure-de1d30da1203cae9cd857052c339ac026f18cffa.tar.gz
pure-de1d30da1203cae9cd857052c339ac026f18cffa.zip
045, 029: a message end to end, the event's border written by hand too (app.c's BORDER: rows whole and finite, the budget and memory begun again, the one state the handler changes written apart and made the state's at a faultless end into a buffer no reader holds, events and changes counted; every end answers all 18,672 lines, the broken-rule build refused at both hand ends): machine instructions a code point, the runtime 40,365, its empty handler 1,595, the hand border with shared 592 and with plain 379, Vega's C given the same payload 240: 68x, 2.5x C (cycles 3.2x), the border 1,595 to about 22; what went: the rows rebuilt into a tree each message (pure_list_read's make_tree), 54 states walked five times an event (40 of them t.X's registers), the last event's nested lists, a bytes state set whole through a text's piece tree; no new fact (N2, today's proof, the language, forms chosen)
Diffstat (limited to 'docs')
-rw-r--r--docs/design/029-past-one-node.md26
1 files changed, 25 insertions, 1 deletions
diff --git a/docs/design/029-past-one-node.md b/docs/design/029-past-one-node.md
index 5f2c7bb..93c2752 100644
--- a/docs/design/029-past-one-node.md
+++ b/docs/design/029-past-one-node.md
@@ -176,13 +176,37 @@ C의 속도로 컴파일하기 쉬운 쪽**이어야 한다. 61–183배의 절�
정해진다. 셈의 정의를 꼴과 무관하게 정하는 것은 계약의 결정이다.
- 평평한 `ranges`의 값은 바뀔 때로 옮겨 간다(재지 않음).
- UAX #14 하나다. DNS, HTTP, inflate, JSON은 바이트와 텍스트와 재귀의 섞임이 달라, 인자를 옮겨 말하지 않는다.
+- **메시지 끝에서 끝(`app.c`의 BORDER, 2026-10-19).** 사건의 테두리도 손으로 썼다. 런타임의 `pure_app_message`와 같은 페이로드를
+ 받고, 상태 `breaks`에 답을 남긴다. 모든 끝이 18,672줄 모두에서 시험의 답과 같다. 틀린 규칙 판은 손으로 쓴 끝 둘도 거부된다.
+ | 끝 | 기계 명령/점 | 사이클/점 | 줄 하나에 |
+ |---|---|---|---|
+ | 런타임(실행기) | 40,365 | 15,525 | 132,262 |
+ | 런타임, 빈 처리기(사건만) | 1,595 | 664 | 5,268 |
+ | 손으로 쓴 테두리 + shared | 592 | 292 | 1,944 |
+ | 손으로 쓴 테두리 + plain | 379 | 238 | 1,245 |
+ | 같은 페이로드를 받는 Vega의 C | 240 | 91 | 787 |
+ - **끝에서 끝 40,365 → 592, 68배다. 같은 페이로드를 받는 C(240)의 2.5배이고, 사이클로는 3.2배다.** 테두리는 1,595에서 약 22(줄 하나에
+ 약 72)로 준다.
+ - 테두리가 남기는 뜻은 이것뿐이다. 행이 온전하고 수마다 유한한지 본다(`place_fields`, `decode_cell`). 일의 예산과 메모리 셈을 다시
+ 시작한다. 처리기가 바꾸는 단 하나의 상태(`breaks`, N2)를 따로 쓰고, 오류 없이 끝날 때만 상태의 것으로 만든다(그 상태 하나에 대한
+ pending과 되돌리기). 읽는 이가 쥐지 않은 버퍼에 쓰고, 쥐고 있으면 새 버퍼를 잡는다. 사건과 바뀜을 센다. 저장소가 없는 앱이다(여기
+ 런타임과 같다). 저장은 원리 2의 일이다.
+ - 지운 것. 메시지의 행을 메시지마다 트리로 다시 짓기(`pure_list_read`의 `make_tree`와 행마다의 `pure_list_insert`). 상태 54개를 사건마다
+ 다섯 번 훑기(pending 복사, 되복사, 버스트 열기와 닫기, settle). 그 가운데 40개는 `t.X` 읽기의 등록기다. 지난 사건의 중첩 리스트 놓기.
+ 통째로만 바뀌는 bytes 상태를 텍스트 편집의 조각 트리(`pure_draft_splice`)로 쓰기.
+ - 새 사실은 없다. 테두리가 지운 것은 N2(처리기가 바꾸는 것은 `breaks`뿐)와 오늘의 증명(등록기는 부름마다 제 것), 언어의 뜻(입력은
+ 바뀌지 않는다), 표현의 결정(행은 페이로드에서 읽고, bytes 상태는 버퍼)이 허락한다. 그래서 끝에서 끝까지 새로 증명할 사실은
+ 여전히 N1과 N4, 넓힐 분석은 N2다.
+ - 단서. 손으로 쓴 판의 수는 하네스를 다시 지을 때마다 1% 안에서 움직인다(인라인의 결정). shared는 이번 빌드에서 570이었다. 런타임의
+ 수도 돌릴 때마다 0.2% 안에서 움직인다. 저장소가 붙은 앱은 재지 않았다.
- **고친 것: let 리스트 후보.** 처음 이 자리에 "셈으로 깨졌다(13,000, 32%, 1.5배)"라고 적었다. 그것은 실행기 안의 몫이었다. 위의 사슬에서
인자로 재니 9.43배이고, 사슬에서 가장 큰 인자다.
- **고친 것: 막대의 셈.** "명령 하나가 기계 명령 하나여도 C의 2.5배"라고 적었다. 명령의 수가 바닥이라고 본 것인데, range()의 both는
실행된 명령 269.5개를 기계 명령 226개로 한다(하나에 0.84). 레지스터 아래에서 옮김과 상수가 사라진다. 그 셈은 틀렸다.
- **원리 1이 지금 말하는 것.** 시험한 길(실행기의 몸을 이어 붙이기)은 죽었다(앱 1.43배, range() 1.78배). 표현까지 포함해 증명에서
내보내는 것은 UAX #14의 처리기에서 C의 2.5배(사이클 3.6배)다. 새 사실 둘과 넓힌 분석 하나가 필요하고, 계약(검사와 셈)과 알고리즘이
- 남는다. 사건 자체(1,566)는 이 길 밖이다. 손으로 쓴 점 하나이지, 지은 내보내기가 아니다.
+ 남는다. 사건의 테두리도 손으로 쓰면 메시지 끝에서 끝이 40,365 → 592, 같은 페이로드를 받는 C의 2.5배다(새 사실 없이). 손으로 쓴
+점 하나이지, 지은 내보내기가 아니다.
## 원리 2. 커밋이 곧 복제본이다