From 475f35cb45a77dc41029126370887fd33b332800 Mon Sep 17 00:00:00 2001 From: eunhhu Date: Mon, 19 Oct 2026 05:46:11 +0100 Subject: 028 and 140: list values' copying measured a second time (UAX #14's Text record copies its nine lets' lists a line: with building them, 260 of 1,774 instructions a code point, after inflate's code()), and a keyed list's floor seek (the last item keyed x or below) first wanted (UAX #14's ranges, a binary search by position, 360 instructions a code point), one spec behind it --- docs/design/028-bytes-state.md | 2 ++ docs/research/140-spec-suite.md | 2 ++ 2 files changed, 4 insertions(+) (limited to 'docs') diff --git a/docs/design/028-bytes-state.md b/docs/design/028-bytes-state.md index 7e760fa..216df58 100644 --- a/docs/design/028-bytes-state.md +++ b/docs/design/028-bytes-state.md @@ -68,6 +68,8 @@ TEXT_COMPARE의 인자 비트로 이미 만들었다(008). - **리스트 값의 나눔.** let의 리스트를 값으로 넘기면 Pure의 LIST_VALUE가 항목을 하나씩 복사한다. 복사 없이 나누려면 이벤트 도중의 리스트가 쓰기 전 복사(copy-on-write)를 해야 한다. 지금의 `pure_list_share`는 이벤트 사이의, 다른 스레드의 읽는 쪽을 위한 것이다. 명세가 그 비용에 닿으면 정한다. + - 잰 것(2026-10-19): UAX #14의 `Text` 레코드는 줄마다 let의 리스트 아홉 개를 복사해 짓는다. 그 복사와 리스트 짓기가 코드 포인트당 + 명령 1,774개 가운데 260개다(140). inflate의 `code()`에 이은 두 번째 수다. - **한 번에 비우기.** 블록 안의 let 리스트와 `xs = [...]`는 항목을 하나씩 지운다. 명령 하나로 비울지는 그 비용이 보이면 정한다. ## 착수 기준 diff --git a/docs/research/140-spec-suite.md b/docs/research/140-spec-suite.md index 1e42a4c..4a8d9f8 100644 --- a/docs/research/140-spec-suite.md +++ b/docs/research/140-spec-suite.md @@ -676,6 +676,8 @@ - 앞의 둘은 이제 핵에 들일 자격이 있다. 바이트 하나인 상태(저장, 교체, 보기, HTTP의 GET이 그것을 어떻게 다루는가)와 바이트의 비교 (TEXT_COMPARE의 인자로 할지, 새 명령으로 할지)는 설계 문서에서 정한다. 아직 시작하지 않았다. - aup의 셋은 컴파일러의 일이다. Pure의 함수 서명은 이미 리스트를 받는다. +- 키 있는 리스트의 floor 찾기(키가 x 이하인 마지막 항목): UAX #14가 범위를 위치로 읽는 이분 탐색으로 찾는다(코드 포인트당 명령 + 360개). 그것을 원한 명세는 아직 하나다. **결정점 뒤에 만든 것(2026-10-19).** - 바이트의 `==`: TEXT_COMPARE의 인자 비트 `PURE_COMPARE_BYTES`(008). aup는 바이트끼리 견주고, 바이트를 만나는 문자열은 바이트다. -- cgit v1.2.3