v0.5 will add a fourth reader alongside Node/LazyNode/Cursor: parse(FlatNode, str) — a read-only, full-document reader backed by a columnar store (zero-copy into the retained source). The validated prototype builds ~2× faster than Node, keeps GC cost near zero (~96× less on an 882k-node document), and puts full-DOM extraction on par with libxml2 — in pure Julia.
It targets read-heavy workloads: large documents parsed once and queried repeatedly (e.g. spreadsheet shared-string tables, RESQML/scientific metadata), and batch pipelines sensitive to GC pauses. Node remains the mutable DOM; existing code is unaffected.
Caveats by design: read-only, whole-store retention while any node handle lives, Int32 node indices. If your package would benefit — or a caveat matters for your use case — comments welcome.
v0.5 will add a fourth reader alongside
Node/LazyNode/Cursor:parse(FlatNode, str)— a read-only, full-document reader backed by a columnar store (zero-copy into the retained source). The validated prototype builds ~2× faster thanNode, keeps GC cost near zero (~96× less on an 882k-node document), and puts full-DOM extraction on par with libxml2 — in pure Julia.It targets read-heavy workloads: large documents parsed once and queried repeatedly (e.g. spreadsheet shared-string tables, RESQML/scientific metadata), and batch pipelines sensitive to GC pauses.
Noderemains the mutable DOM; existing code is unaffected.Caveats by design: read-only, whole-store retention while any node handle lives, Int32 node indices. If your package would benefit — or a caveat matters for your use case — comments welcome.