Skip to content

Releases: mas-bandwidth/serialize.elixir

serialize.elixir 1.1.0: format version 1.1

Choose a tag to compare

@gafferongames gafferongames released this 04 Sep 08:05
bc102a8

This release brings the Elixir runtime to format version 1.1 of the wire standard. int_relative reconstructs on bignums and refuses a result outside 0 to 2^31 - 1 or not strictly above previous in every tier, the absolute tier included; a ranged int128 with min equal to max is legal and costs zero bits, so the int64 and int128 guards now agree; and the read stream now latches: a refusal hands back a failed stream, and every later read on it returns the error until the stream is re-initialized. The standard's conformance corpus is vendored and every vector runs in the test suite, so this runtime's verdict on hostile bytes is the same as every other runtime's; STANDARD.md is vendored for the first time, and both copies are checked against upstream in CI. The wire is unchanged: every golden pin passes untouched.

serialize.elixir 1.0.0 — the serialize wire on the BEAM

Choose a tag to compare

@rowan-claude rowan-claude released this 30 Aug 00:24

The serialize wire on the BEAM. This is the first release of serialize.elixir: the family's bitpacking serializer for Elixir and Erlang, wire compatible with the C++ serialize library — the same bytes, bit for bit, on every platform.

What you get:

  • The full primitive surface: raw bits, ranged integers through 128 bits, bool, bit-transparent float and double, the compressed float, relative integers, alignment, byte blocks, UTF-8 and wide strings, and fixed point across all storage widths in one function — through write, read, and measure streams.
  • Byte-identical wire, proven: the port reproduces the reference's golden wire vectors exactly and passes the full sabotage sweep — every consumed bit of the conformance stream is load-bearing, and hostile bytes never raise.
  • Reads validate everything and refuse as values — {:error, stream}, never an exception — so hostile input is handled in ordinary control flow. Writer contract violations raise ArgumentError.
  • Non-finite IEEE-754 patterns travel bit-exactly as {:nonfinite, bits}, because BEAM float terms cannot hold NaN or infinity; the wire stays fully bit transparent, NaN payloads included.
  • Zero dependencies: ExUnit ships with Elixir, and mix test runs the whole suite on the pinned toolchain. The family benchmark is in-repo, golden gated so it reports nothing on a bad wire.
  • Callable from Erlang as well as Elixir — one port serves the whole BEAM.

USAGE.md teaches every operation with an example that runs; the wire format itself is specified in the C++ repository's STANDARD.md.