Skip to content

spec: 写侧落盘时机入条款;tutorial/04-ndarray 散列形态读数改用 kvspace·listlen - #353

Merged
miaobyte merged 2 commits into
masterfrom
spec/write-flush-timing
Sep 24, 2026
Merged

miaobyte merged 2 commits into
masterfrom
spec/write-flush-timing

Conversation

@miaobyte

Copy link
Copy Markdown
Contributor

两个独立主题,分两个 commit。

1. spec:写侧落盘时机(对应 array2d/kvspace#23)

04-CABI.kv 新增 normative 段:durable 的 body 由调用方在返回后填,返回前无法落盘,所以「写即持久」这句承诺本身就是错的。改成写清真实时机——本笔在下一次 kvspace* 调用(读也算,每个 op 开头先落盘上一笔)或 Close 时落盘;前者失败以返回码 + err 报出,后者写 stderr。进程正常退出时前端对所有未 Close 句柄兜底关闭:漏调 Close 不丢数据,真丢也绝不静默。shm 写即落盘,两后端在「下一次调用前可见」上一致。

实现已落地并验证:array2d/kvspace#25(前端活跃句柄表 + atexit,19/19 passed)、array2d/kvspace-durable#30(close 失败写 stderr)。

2. tutorial/04-ndarray:读数改用 kvspace·listlen,补两例

array·append / array·slice 作用于 compact 时先自动 scatter,结果是散列(stringkeymap)形态——判元素数该走 kvspace·listlen,不是 ndarray·numel。

  • array_append / array_slice:读数改 kvspace·listlen
  • 新增 array_append_sparse:散列数组的 append 坐标由 memindex 决定,追加落「最大坐标 + 1」,不得假设坐标键连续
  • 新增 ndarray_numel_scattered:numel 对散列形态读成员数

这四个用例当前 FAIL(append 打出 3 而非 4、slice 打出 1 而非 2、sparse 无输出、numel 报 container [int64]·int64 has no shape; use kvspace…),钉的是 #330 runtime 侧缺口,故 CI 预期双后端皆红。

🤖 Generated with Claude Code

miaobyte and others added 2 commits September 24, 2026 14:42
durable 的 body 由调用方在返回后填,返回前无法落盘,所以「写即持久」这句承诺本身
就是错的。改成写清真实时机:本笔在下一次 kvspace* 调用(读也算,每个 op 开头先落盘
上一笔)或 kvspaceClose 时落盘;前者失败以返回码 + err 报出,后者失败写 stderr。

进程正常退出(exit / main 返回)时,前端对所有未 Close 句柄兜底关闭即落盘——漏调
Close 不丢数据,真丢也绝不静默。shm 后端写即落盘(body 指针即最终位置),两后端在
「下一次调用前可见」这条上一致。

对应实现:array2d/kvspace#25(前端活跃句柄表 + atexit)、
array2d/kvspace-durable#30(close 失败写 stderr)。

Co-Authored-By: Claude Code <noreply@anthropic.com>
array·append / array·slice 作用于 compact 时先自动 scatter,结果是散列(stringkeymap)
形态——判元素数该走 kvspace·listlen,不是 ndarray·numel。

- array_append / array_slice:读数改 kvspace·listlen,注释点明「散列数组的元素数用
  kvspace·listlen 读」
- 新增 array_append_sparse:散列数组的 append 坐标由 memindex 决定,追加落「最大坐标
  + 1」,不得假设坐标键连续
- 新增 ndarray_numel_scattered:numel 对散列形态读成员数(对齐卷首「三算子统一观测数组
  形状,对两形态均适用」)

四个用例当前 FAIL(append 打出 3 而非 4、slice 打出 1 而非 2、sparse 无输出、numel 报
"container [int64]·int64 has no shape; use kvspace…"),钉的是 #330 runtime 侧缺口。

Co-Authored-By: Claude Code <noreply@anthropic.com>
@miaobyte
miaobyte merged commit 2f81d80 into master Sep 24, 2026
2 of 6 checks passed
@miaobyte
miaobyte deleted the spec/write-flush-timing branch September 24, 2026 06:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant