Roadmap¶
go-ruby-getoptlong/getoptlong is grown test-first, each capability differential-tested against
MRI rather than built in isolation. The deterministic, interpreter-independent
slice of Ruby's GetoptLong extracted from rbgo's internals is complete.
| Stage | What | Status |
|---|---|---|
| Long, short & abbreviated names | Unique-prefix long matching, AmbiguousOption on ambiguity, multiple aliases reporting the canonical name. |
Done |
| Argument forms | --name=value, --name value, -nvalue, -n value, bundled -abc, with NoArgument / RequiredArgument / OptionalArgument rules. |
Done |
| Ordering modes | Permute, RequireOrder, ReturnInOrder, plus the -- terminator. |
Done |
| Error taxonomy | InvalidOption, MissingArgument, NeedlessArgument, AmbiguousOption with MRI-exact messages, $0 prefix, quiet mode. |
Done |
| No global state | Parser-owned argv and a caller-supplied io.Writer instead of global ARGV / $0 / $stderr. |
Done |
| Differential oracle & coverage | All orderings, name/argument forms, terminator, error classes checked byte-for-byte against ruby (≥ 4.0); 100% coverage, green across 6 arches and 3 OSes. |
Done |
Documented out-of-scope boundaries¶
These are deliberate, recorded so the module's surface is unambiguous:
- No interpreter. The library implements the deterministic algorithm; it
never runs arbitrary Ruby. Anything that needs a live binding or evaluation is
the consumer's job — that is why
rbgobinds this module rather than the reverse. - Reference is reference Ruby (MRI). Byte-for-byte conformance targets MRI's behaviour; differences across MRI releases are matched to the reference used by the differential oracle.
- Standalone & reusable. The module has no dependency on the Ruby runtime; the dependency runs the other way.
See Usage & API for the surface and Why pure Go for the deterministic/interpreter split.