Skip to content

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, and use define one streaming-resource lifecycle, while readAll keeps its size limit explicit.
  • The filesystem supports streaming reads, writes, append behavior, synchronization modes, and strongly typed failure mapping.
  • std.http provides 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>, and FieldInterceptor<T> lifecycles.
  • Type<T>.fields() and Field<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.serialization defines immutable DataMapper, DataReader<T>, and DataWriter<T> contracts together with @Serializable, @SerialName, and @SerialIgnore.
  • std.json provides typed mapping, UTF-8 bytes, the JsonValue tree, parse/write operations, and JsonException with paths and source positions.
  • std.xml and std.yaml reuse 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.

Norm 0.25