diff options
| author | eunhhu <[email protected]> | 2026-10-18 17:54:16 +0100 |
|---|---|---|
| committer | eunhhu <[email protected]> | 2026-10-18 17:54:16 +0100 |
| commit | 9f17dd667c3282aa28d6b3961eda28e592961478 (patch) | |
| tree | db954434bdfde3186a06192f1b7ae4e93c44453c /docs/design | |
| parent | d5f0cac74721863a91b0a799256b62c0b7b2a3c1 (diff) | |
| download | pure-9f17dd667c3282aa28d6b3961eda28e592961478.tar.gz pure-9f17dd667c3282aa28d6b3961eda28e592961478.zip | |
Research 140, 027's stage 3 measured: a board of columns of cards of tags (aup's stored_nested) alike in memory and on a store restarting eight times, every step's fault, states and a view (2,400 snapshots, 54 restarts); killed at the tree's four stages and the log's two, all or nothing; replacement moving nested lists by name at depth; appending into a stored item's list costs about 170 ns an item it already holds (append_cost.c: 42 µs an add on average over the first 500, 738 µs over 8,000), building one by appends quadratic; instruction counts: the first commit's BFS +1.45% with batches and +1.68% without, from branches in the hot steps, gone with the load's internal ops (b29 against b27: BFS 0.000%/+0.034%, the others within 0.008%; the bank's queries -0.25% to +0.22%); what remains (a message's rows holding lists, a list field's .count in a fold, for over xs[i].f); 027's stage 3 as made (the representation chosen against the plan, its cost); 008's wording (kind 5 in images' headers alone); CHECKPOINT's direction row through stage 3
Diffstat (limited to 'docs/design')
| -rw-r--r-- | docs/design/008-module-format.md | 3 | ||||
| -rw-r--r-- | docs/design/027-computation-core.md | 15 |
2 files changed, 17 insertions, 1 deletions
diff --git a/docs/design/008-module-format.md b/docs/design/008-module-format.md index a23f140..223bc4f 100644 --- a/docs/design/008-module-format.md +++ b/docs/design/008-module-format.md @@ -33,7 +33,8 @@ v6에는 뒤에 **i64**가 더해졌다([016](016-bool-and-i64.md)의 2단계): - 칸의 값은 이벤트가 만든 리스트의 번호(0은 빈 리스트)다. 정수처럼 옮겨지고 ITEM_GET으로 읽힌다. 스택의 타입은 리스트이고, 그 레코드를 가진다. - 3단계부터 저장 상태와 transient의 리스트도 그런 레코드를 받는다. 메시지의 행은 받지 않고, 리스트 필드는 키가 되지 않는다. -- 이벤트를 넘어 사는 리스트(저장, transient)의 칸은 리스트 값을 그 항목들의 저장 형태로 담는다(칸의 종류 5, 바이트처럼). 항목마다 +- 이벤트를 넘어 사는 리스트(저장, transient)의 칸은 리스트 값을 그 항목들의 저장 형태로 담는다(바이트처럼 담고, 이미지 머리는 종류 5로 + 적는다). 그런 칸을 다루는 명령은 로드가 실행기만의 내부 명령으로 바꿔 쓴다(다른 명령의 걸음은 그대로 둔다). 항목마다 필드의 차례로, 수·bool·i64는 8바이트 little-endian, text와 리스트는 u32le 길이와 바이트(리스트는 다시 이 형태)다. - ITEM_GET은 그것을 이벤트의 리스트 하나로 읽어 그 번호를 놓는다(읽은 바이트를 이벤트의 몫에 센다). - LIST_APPEND·LIST_INSERT·ITEM_SET은 이벤트의 리스트를 그 형태로 써 넣는다. APPEND_IN은 읽고, 덧붙이고, 다시 쓴다. diff --git a/docs/design/027-computation-core.md b/docs/design/027-computation-core.md index 660fccf..09392f3 100644 --- a/docs/design/027-computation-core.md +++ b/docs/design/027-computation-core.md @@ -186,6 +186,21 @@ - **막대.** 메모리 앱과 수시로 재시작하는 저장 앱이 매 단계 비트까지 같다(지금의 대조를 중첩으로 넓힌다). 커밋의 모든 단계에서 죽여도 전부 아니면 없음이다. +**만듦(2026-10-18).** 결과는 140의 3단계절이다. +- **고른 표현.** 계획(중첩 리스트마다 경로로 이름 붙인 이미지와 로그)과 다르게 했다. + - 이벤트를 넘어 사는 리스트(저장, transient)의 칸이 리스트 값을 그 항목들의 저장 형태로 담는다(바이트처럼 담고, 이미지 머리는 종류 5로 적는다). + - 읽으면 이벤트의 리스트 하나로 풀리고(ITEM_GET), 쓰면 그것에서 지어진다. +- **그래서 따라오는 것.** 리스트 모듈은 그 칸을 text의 바이트처럼 다룬다. 그래서 이미 있는 기계가 깊이에서도 그대로다. + - 이미지, 로그, 되돌리기, 읽는 쪽과의 나눔이 그렇다. + - 커밋의 원자성과 죽음의 회복도 그렇다. 새 저장소 형식과 새 복구 길이 없다. +- **이름 잇기.** 이미지의 머리가 레코드 그래프를 적는다(레코드가 리스트를 거쳐 자신을 담을 수 있어서 트리가 아니라 번호로 가리키는 + 표다). 시작과 교체는 그래프를 따라 이름으로 옮긴다. +- **비용.** 중첩 리스트를 바꿀 때마다 그 값 전체를 풀고 짓고 쓴다. 바뀐 것이 아니라 그 값의 크기에 비례한다. + - 큰 중첩 리스트를 덧붙여 짓는 것은 제곱이다. + - 구조를 나누는 표현(노드를 나누는 트리, 경로로 이름 붙인 로그)은 뜻을 바꾸지 않고 나중에 고를 수 있는 구현이다. +- **남은 것.** 메시지의 행이 리스트를 담는 것(JSON 경계에서 바로 트리로)은 4단계다. 접기 안에서 리스트 필드의 `.count`를 읽는 것도 + 아직 안 된다(레지스터를 묶어야 해서). + ### 4단계: 패턴 모으기 - 앵커, 메시지 하나인 입력, 아무 값인 보기를 둔다. |
