aboutsummaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
authoreunhhu <[email protected]>2026-09-28 11:20:45 +0100
committereunhhu <[email protected]>2026-09-28 11:20:45 +0100
commit3a9de18e39b5513c4d77b553240d6e0f088af968 (patch)
tree53b212e23df71a7375b60e07fe033bca6ef34024 /docs
parentd416c5b2392da7b2dc365e646ab5423292f770ce (diff)
downloadpure-3a9de18e39b5513c4d77b553240d6e0f088af968.tar.gz
pure-3a9de18e39b5513c4d77b553240d6e0f088af968.zip
Log list changes compact: varint positions and integers, the rest bit for bit
Diffstat (limited to 'docs')
-rw-r--r--docs/design/008-module-format.md6
1 files changed, 4 insertions, 2 deletions
diff --git a/docs/design/008-module-format.md b/docs/design/008-module-format.md
index d515c12..ac73f2f 100644
--- a/docs/design/008-module-format.md
+++ b/docs/design/008-module-format.md
@@ -271,8 +271,10 @@ text·리스트가 남을 때만 위치를 유지한다.
`PLI1`, 레코드 필드 수, 필드마다 종류·이름, 그것이 담은 저장의 번호(u64), 항목(수는 binary64, text는 u32 길이와
바이트)이고, 통째로 옆에 써서 동기화한 뒤 이름을 바꿔 끼운다(파일 전체의 다이제스트로 잘림·손상을 거부).
**로그**(`log-0`, `log-1`, ... 구간, `core/log.h`)는 리스트를 바꾼 저장마다 항목 하나다. 항목은 저장 번호, 앞 항목의
- 번호와 다이제스트, 트리도 커밋했는지, 페이로드(바뀐 리스트마다 이름과 변경 기록: 종류 u8(1 삽입, 2 제거, 3 설정),
- 위치 u32, 삽입이면 항목, 설정이면 필드와 값, 모두 그 리스트 이미지의 필드로)다. 구간은 처음 만들 때 통째로 할당하고,
+ 번호와 다이제스트, 트리도 커밋했는지, 페이로드(바뀐 리스트마다 이름과 변경 기록, 모두 그 리스트 이미지의 필드로)다.
+ 기록은 종류 u8(4 삽입, 5 제거, 6 설정)과 위치(varint)이고, 삽입이면 항목, 설정이면 필드 u8과 값이 따른다. 수는
+ 크기가 2^53 미만인 정수(-0 아님)면 varint `2 × zigzag(n)`, 아니면 1과 binary64 8바이트다. text는 varint 길이와
+ 바이트다. 옛 `PLS2`의 기록(종류 1–3)은 위치 u32와 저장 형태의 칸을 썼고, 그대로 읽는다. 구간은 처음 만들 때 통째로 할당하고,
이미지가 모두 담은 항목만 가진 구간은 다시 쓴다. 그래서 덧붙이기는 파일을 키우지도 새 블록을 받지도 않아 동기화가
데이터만 쓴다. 항목은 앞 항목의 다이제스트를 가리키므로 찢긴 쓰기나 재사용한 구간에 남은 옛 바이트는 이어지지 않는다.
- **저장 번호.** 저장마다 번호가 하나 오른다. 로그 항목이 있고 트리도 커밋하는 저장은 그 번호를 트리의 상태 `seq`에