Skip to content

1.0.0-RC5

Pre-release
Pre-release

Choose a tag to compare

@milesfuller milesfuller released this 12 Apr 02:35
· 21 commits to main since this release

What's Changed

FsName Restructure

  • Push validation to creation instead of per-call on hot paths
  • Recursive intern() with safe get-then-putIfAbsent pattern (no nested computeIfAbsent)
  • Collapse name(String) to single internChild delegation
  • Remove redundant requireNonNull checks from internal methods (rely on natural NPE)
  • Cached Optional<Name> enclosure in constructor for efficient Extent defaults
  • Static ParentIterator class, optimised within() with depth-guard fast-fail

Benchmark impact (NameOps):

Benchmark Before After vs Humainary
name_chaining 14.1 ns 5.2 ns beats 9.45 by 45%
name_from_iterable 20.6 ns 10.0 ns matches 9.81
name_from_iterator 20.3 ns 10.5 ns matches 9.67
name_parsing 6.4 ns 2.5 ns within 20% of 2.10

FsState Optimisations

  • Lazy-cached compact() result (same pattern as String.hashCode)
  • Cached values() matches array for repeated calls with same slot
  • typeMatches shortcut: == before isAssignableFrom for exact-type matches

Benchmark impact (StateOps):

Benchmark Before After vs Humainary
state_compact 30.4 ns 3.2 ns beats 9.5 by 3×
state_values_stream 24.2 ns 7.0 ns was +490%, now +71%

Documentation

  • GitHub Packages consumer instructions added to both READMEs (repository config + PAT setup)
  • Full benchmark refresh: 863 benchmarks (680 Serventis + 185 Substrates)
  • Updated selected benchmark numbers in README

Other

  • Version bump to 1.0.0-RC5 across pom.xml and READMEs
  • EditorConfig formatting applied to 7 files

Full test suite: 722 tests passing (274 contract + 448 TCK)