Resource budgets
Recursive expansion is legal, but not free: depth, steps, nodes, bytes, and regular-expression work are bounded. Treat a budget error as a program design signal.
- expansion depth and total steps
- generated nodes and output bytes
- regular-expression input and capture work
Language invariants
Comparison is exact and case-sensitive. The address identifies the vocabulary; the build never fetches it over the network.
Relative import paths are resolved from the file that declares them. The manager loads each source identity once and freezes the import closure before expansion.
At a call, args and fills are evaluated in the caller first. The macro body then runs at its definition location with only its explicit inputs.
Use xs:insert to emit a scalar as escaped text. It never reparses <, >, or & as markup. Use xs:fill/xs:slot when structure must remain XML.
Specifications, examples, and lineage
Never append a version or trailing slash to the namespace URI. Use snapshots only when auditing the contract implemented by an older release.
Formal semantics and implementation boundaries in Markdown.
↗GitHubRunnable projectsSmall projects exercised by the current manager.
↗Snapshotv0.3.0 snapshotImmutable historical language contract.
↗Snapshotv0.2.0 snapshotEarlier immutable namespace contract.
↗W3CXML NamespacesThe W3C standard behind namespace identity.
↗GPL-3.0Project licenseGPL-3.0-or-later terms shipped with xmlsquish.
↗