PureXML 0.4.0
Performance across all three benchmarked operations plus one XSD conformance fix, all backward compatible.
Performance (vs libxml2, 20k-item generated corpus)
- parse ~30x → ~9x slower than libxml2: byte-level scanning fast paths, byte-after-
<markup dispatch, ampersand-free attribute decode skip (#275, #276, #278) - serialize ~5.5x → ~2.7x: escaping fast path for values that need no escaping (#279)
- xpath ~13x → ~5.5x: node-set de-duplication skip on per-context-disjoint axes,
//descendant fusion, and redundant sort/dedup elimination for path results (#280–#283)
Fixed
- An
xsi:typeblocked byblock/blockDefaultis now rejected when it reaches a union declared type through a blocked member (cvc-elt.4.3 / cos-st-derived-OK 2.2.4). W3C XSTSinvalid-instances-accepted15 → 14, withvalid-schemas-rejectedandvalid-instances-rejectedheld at 0 — the false-positive direction guarded hardest (#277).
Verification
Full local suite (1695 tests), Apache Xalan XSLT gold-output corpus, W3C XML conformance corpora (xmltest/OASIS/Sun/Eduni/IBM/Japanese), RELAX NG spec suite, the full W3C XSTS archive, and the WASM cross-platform build — all green. The correctness-sensitive changes (the xsi:type fix, the // fusion, and the single-step sort skip) each passed an adversarial differential review. swiftformat and swiftlint --strict clean.
Full changelog: https://github.com/mihaelamj/PureXML/blob/main/CHANGELOG.md