[series] Step 2 — SoA record-of-series #62
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Second tier of the
seriesmilestone (#8), downstream of step 1 (#61). A record-valued Series stored struct-of-arrays (column-major), the efficient layout for streaming analytics where a query scans one field across many ticks.Direction (milestone decision D3, to confirm at brainstorm)
Lean: record-of-series composition — an AILang ADT bundling N primitive Series, one column per record field, e.g.
(ctor PVS (con Series Float) (con Series Int)). Preferred over 0007's RawBuf-internal record-element intercept because it keeps step 2 pure library-extension (zero Rust) and makes step-1 primitive Series the literal building block.Open design forks for the step-2 brainstorm
{price: Float, volume: Int}) vs nominaldataADTs — decides howattypes its materialised record return. Under SoA the return is always a freshly materialisedownrecord; no borrow is possible (no contiguous object to borrow — milestone decision D1).Anchor:
design/models/0007-kernel-extensions.md§"Forward axis: SoA for records". Do not start before step 1 closes.Grounding finding (brainstorm, 2026-06-02): the premise that step 2 is a pure-AILang library extension does not hold.
AILang is nominal-only: the core Type enum is Con/Fn/Var/Forall — no structural-record or row type. A generic 'Series r' over an arbitrary record r is therefore not expressible in pure AILang; there is no row variable to abstract the record's fields over.
Consequences:
Therefore step 2 is NOT a pure-library step; it is a base-tier/language decision, not the library step it was framed as. DEFERRED pending that decision. The series milestone closes cleanly at the shipped, leak-clean primitive step 1.
The issue's 'at return: structural vs nominal record' fork is resolved by the grounding fact: any materialised record must be a nominal ADT (D1: freshly materialised own).