Tya v0.64 Release Notes
v0.64 adds first-class lexical closures, iterable sequence protocols, and a set of standard-library protocol interfaces for comparison, equality, I/O, serialization, and human-readable string conversion.
Language
- Lexical closures now capture free variables across compile-to-C boundaries, including nested function literals and captured values that must survive GC.
- The checker rejects unsupported captured-binding indexed/member mutation with a stable diagnostic while preserving legacy self-host compatibility where it is still required.
Iteration
Iterator,Iterable, andSequencedefine the standard iteration protocol used byfor ... in.- Arrays, dictionaries, and strings can be consumed through the protocol without boxing their primitive values.
- Sequence helpers provide lazy
map,filter,take, andto_acomposition over iterable values.
Standard Protocols
Comparabledefinescompare(other)with derivedlt?,lte?,gt?,gte?, andbetween?helpers. Primitive numbers and strings expose the same methods.Equatabledefinesequal?(other). Primitive scalar values follow normal runtime equality, while arrays and dictionaries use deep equality.ionow exposesReadable,Writable,Closable, andFlushableprotocol interfaces. Existingio.Reader,io.Writer,net/socket.Socket, andnet/socket.Serverdeclare the matching contracts.serialization.Serializabledefinesto_data()as the canonical structured serialization hook.Serializer.to_dataprefers it over the olderto_serialized()hook.Stringabledefines the human-readableto_s()protocol and documents the primitive conformance rule for Number, String, Array, Dict, Boolean, and Nil.
Documentation
docs/SPEC.md,docs/API.md, anddocs/STDLIB.mddocument the new protocols and distinguishStringable.to_s()fromSerializable.to_data().- Completed PRDs for the release were moved to
feature-specs/completed/.
Verification
The release gate is:
go test ./... -count=1
On the release machine, the full suite exceeded Go’s default 10-minute package
timeout after all tests were already in the long tya/tests package. The same
release gate with an explicit 20-minute timeout passed:
go test ./... -count=1 -timeout=20m