Lo
Collections with explicit totality and allocation
Current release —
v1.0.3.goforge.dev/gplodashis at 100% feature parity withsamber/lov1.53.0 (all 651 declarations), differential + property tested, race/vet clean. This patch line regenerates under the released Go+ toolchain and consumes stdlib v0.207.0. Install withgo get goforge.dev/gplodash@v1.0.3.
GoForge Lo targets samber/lo v1.53.0. Compatible collection helpers coexist
with total options/results, destination-buffer operations, non-empty
sequences, sized vectors, explicit ownership, and exhaustive search outcomes.
Current parity
The upstream module inventory contains 651 declarations, and all 651 are
implemented — 100% declaration parity across the root, it (lazy iterator),
mutable, and parallel packages. Every batch is differentially and
property-tested against pinned samber/lo v1.53.0; the module is race- and
vet-clean with deterministic generation.
Go+ and standard library
Production semantics are authored across sixteen .gp sources plus two internal
interop shims (xrand, xtime); version-marked ordinary Go is generated
reproducibly by the pinned Go+ compiler. Search[T] requires Go+ callers to
match Located(value,index) or Absent, replacing sentinel-based partial
search.
This project forced std/nonempty, std/vec, and now std/iter — the lazy
sequence algebra (Seq[T] over the standard iter.Seq[T], fluent combinators,
std/result-carrying fallible pipelines, property-checked laws). The
goforge.dev/gplodash/it iterator package is a thin facade over std/iter, so the
engine and its laws live in one place.
Performance
Generated Go+ destination-buffer filtering/mapping is conservatively 2.65×
faster than upstream FilterMap with 100% fewer allocations, and 4.86× faster
than the equivalent two-helper pipeline. Those results do not yet cover the
remaining root and subpackage surface.
Release gate
Every one of the 651 inventory rows must be implemented and differentially verified. Iterator laziness, mutation, aliasing, cancellation, goroutine cleanup, and parallel ordering are mandatory. The release consumes matching released Go+/stdlib tags and is pulled immediately before tagging.