Norm 0.16
Norm 0.16 delivers streaming system I/O, an HTTP client, and a unified structured-data runtime together with complete language paths for extension functions, field reflection, and annotation lifecycles.
System I/O and HTTP
ByteReader,ByteWriter,Resource, andusedefine one streaming-resource lifecycle, whilereadAllkeeps its size limit explicit.- The filesystem supports streaming reads, writes, append behavior, synchronization modes, and strongly typed failure mapping.
std.httpprovides typed requests, responses, headers, status values, and URIs. Response bodies are read through bounded readers and closed deterministically.- The JDK HTTP adapter applies one timeout and cancellation budget across send, response, and body reads. System failures continue to throw domain exceptions.
Language and structural metadata
- An extension function is an explicitly imported static top-level function with member-call syntax. Parsing, inference, Core, formatting, and language services share the same semantics.
- Passive annotation targets are separated from the
FunctionInterceptor,ParameterInterceptor<T>, andFieldInterceptor<T>lifecycles. Type<T>.fields()andField<T>expose stable field ordinals, names, types, runtime annotations, and controlled reads without JVM reflection or string-based method invocation.- Core schema, language-semantics, and identity versions advance with the callable, field-metadata, and runtime-binding changes.
JSON, XML, and YAML
std.serializationdefines immutableDataMapper,DataReader<T>, andDataWriter<T>contracts together with@Serializable,@SerialName, and@SerialIgnore.std.jsonprovides typed mapping, UTF-8 bytes, theJsonValuetree, parse/write operations, andJsonExceptionwith paths and source positions.std.xmlandstd.yamlreuse exact-Core-type shapes and reader/writer plans while preserving format-specific XML attribute and YAML document rules.- Serialization accesses value fields by Core ordinal, constructs decoded values through canonical constructors, and caches immutable reader and writer plans independently.
- Jackson streaming and Woodstox remain encapsulated inside format adapters and do not participate in Norm type discovery or object construction.
Tooling and acceptance
The VS Code extension version now has a build gate against the Norm version and exercises extensions, reflection, annotations, and the JSON/XML/YAML libraries. Declaration ordering applies only to the current document during cross-file completion, so imported standard-library extensions are independent of offsets in their source files. The documentation build derives and verifies the GitHub Pages base, manifest, and public links from the /Norm/ deployment path.
Automated acceptance covers the JVM, Native Image, real files, HTTP loopback, structured round trips, failure matrices, recursive shapes, the VS Code Extension Host, and release-package layout.
Migration and boundary
Annotations that only mark a target should implement TypeTarget, FieldTarget, FunctionTarget, or ParameterTarget. An annotation that executes a lifecycle should use the corresponding interceptor. System and data-format failures uniformly throw typed exceptions.
Automatic structural mapping currently supports values only. Class identity, object graphs, cyclic references, and polymorphism require separate future protocols. The standard library does not yet include an HTTP server.
See the system runtime and serialization runtime for the architecture boundaries.