Change History
Version 0.996.3, June 2025
Text syntax:
- Make clear that
(and)are delimiters.
Version 0.996.2, March 2025
Schema:
- Clarify that matching of literal values that happen to be compound is done exactly, as
opposed to matching a value against a compound pattern, which allows for extension. That is,
a pattern
<<lit> <a 1>>only accepts<a 1>, while a pattern<a 1>accepts not only<a 1>but records with additional fields such as<a 1 hello>.
Version 0.996.1, February 2025
Addition of media types and file extensions for use with Preserves data.
Version 0.996.0, September 2024
Text syntax:
- Switch from
|…|to'…'quotation ofSymbols. The syntax with pipes originated with Racket and other Schemes and Lisps, but is unusual outside the Lisp world. The syntax with single-quotes lines up with languages like Smalltalk, Erlang, Prolog and Ruby.
Version 0.995.0, May 2024
Text syntax:
- Support Unix interpreter specification (
#!) lines, reading them as annotations.
Schema:
- Document pattern extensibility: essentially, prefix-matching of sequence-like
Values.
Version 0.994.0, March 2024
Overall:
- Remove
Float, leavingDoubleas the sole supported kind of IEEE 754 floating-point number.
Binary syntax:
- Remove
0x87 0x04syntax forFloats.
Text syntax:
- Switch
#!to#:as the prefix forEmbeddedvalues. - Remove trailing-
fsyntax forFloats.
Schema:
- Clarify the idea of “sufficiently identifierlike” values.
- Give a schema,
host.prs, describing host-language types abstractly.
P-expressions:
- Introduce
Trailers, for annotations at the end of a block.
Version 0.992.0, November 2023
Text syntax:
- Remove commas from whitespace. Instead, explicitly ignore them inside
Sequences,Sets, andDictionarys.
Version 0.991.0, October 2023
Overall:
- Introduce P-expressions.
- Clarify the meaning of lexicographical comparison in Preserves.
Text syntax:
- Use
#instead of;to mark line comments.
Version 0.990.1, October 2023
Overall:
- Repair examples of binary encoding to actually match the current specification.
Text syntax:
- Introduce the notion of “delimiters”.
- Make use of standard EBNF definitions like
DQUOTE,ALPHAandDIGIT.
Schema:
- Relax the placement of
/inOrPatterns to match the actual implementations. - Relax the placement of
&inAndPatterns to match the actual implementations.
Version 0.990.0, October 2023
Overall:
- Include “cheat sheet” quick-reference cards for Preserves syntax.
Binary syntax:
- Remove
0xA0-0xAFand0x90-0x9Ftags, which were used for various compact representations ofSignedIntegers. Now, all integers use tag0xB0. - Switch from tags
0x82and0x83forFloatandDouble, respectively, to tag0x87plus a length in bytes for both.
Version 0.7.1, October 2023
Overall:
- Update metaconventions and examples in
conventions.md - Make clear throughout that Preserves works with Unicode scalars, not code points.
- Clarify that unpaired surrogate code points are not permitted in strings and symbols.
Model:
- Add note regarding JSON compatibility and unpaired surrogate code points.
- Add appendix describing the “merge” of two
Values.
Text syntax:
- Include recommendation for implementations to print sets and dictionaries in Preserves-ordering.
- Include recommendation that URL-safe base64 should be emitted by default.
Version 0.6.4, February 2023
Text syntax:
- Alter parsing of numbers and symbols to use
SymbolOrNumberplus a disambiguation step.
Schema:
- Place “smaller” definitions first in alternations. For example,
EmbeddedTypeNamenow has the#fbranch first, rather than theRefbranch.
Version 0.6.3, June 2022
Overall:
- Split monolithic specification document into smaller, more focussed pieces.
Model:
- Clarify that
NULcharacters (code point zero) are permitted in strings and symbols.
Text syntax:
- Clarify that annotations on a value are ordered.
Schema:
- Include descriptions of host-language types.
- Include the beginnings of semantics.