aboutsummaryrefslogtreecommitdiffstats
path: root/docs/research/029-native-document-window.md
diff options
context:
space:
mode:
authoreunhhu <[email protected]>2026-09-30 17:27:32 +0100
committereunhhu <[email protected]>2026-09-30 17:27:32 +0100
commit07047c391f32c43827c0da145f6c89edb5007941 (patch)
treef119fd54e7047c990d05a59d7ef49d7ddac5dafc /docs/research/029-native-document-window.md
parent481642fbdc94db37ae42ded7244674054b6377c3 (diff)
downloadpure-07047c391f32c43827c0da145f6c89edb5007941.tar.gz
pure-07047c391f32c43827c0da145f6c89edb5007941.zip
Keep i64 off the number paths: lanes fold numbers, cells read as bytes
Counting user-mode instructions per query (bank, 100,000 accounts) against ee21aec found what i64 had added to the number paths, and an instruction sampler found where: - fold_in took a union and asked whether the fold was of i64s for every item, in the group and leaf-at-a-time passes too, where a fold of i64s never runs (it is never planned). Those passes now call fold_number, which takes a double; fold_in keeps the i64 branch for folds run item by item. per_branch: 27.83M instructions an ask back to 27.05M (26.72M before i64). - cell_at's third kind made it too big to inline into pure_list_get, so every item read became a call. A number's, bool's or integer's cell is 8 bytes read as they are (memcpy, so no aliasing rule is bent), one branch as before, and it inlines again. A table of 10,000 rows: 8.78M instructions an ask to 8.70M (8.58M before i64). Behaviour is unchanged; every check passes.
Diffstat (limited to 'docs/research/029-native-document-window.md')
0 files changed, 0 insertions, 0 deletions