Ruby gems — one organisation each¶
A Ruby virtual machine is only useful with a library around it, so each gem the
ecosystem needs is reimplemented in pure Go in its own go-ruby-* organisation:
the standard library, Rails and its dependencies, the testing stack, the Puppet
stack, database drivers, serialisation formats and template engines.
Every one of them is byte-compared against MRI where a byte comparison is
meaningful — a checksum, a Marshal payload, a formatted number. Where it is not
(a deflate stream, say, whose output is implementation-defined) the requirement is
interoperability in both directions instead.
Two things to know before reaching for one:
- The gem organisation is the Ruby-facing wrapper, not always the engine. Some
are thin shells over an engine that lives in its own non-Ruby organisation — the
regexp gem wraps
go-regexp/engine, the sass gem wrapsgo-scss/scss. If you are writing Go rather than Ruby, take the engine. - The repository inside is named after the gem, not after the organisation:
go-ruby-activerecord/activerecord.
195 gem organisations, 195 public code repositories.