38 lines
1.8 KiB
Markdown
38 lines
1.8 KiB
Markdown
# Ruby regular-expression engine
|
|
|
|
Regex Tools executes Ruby expressions in the actual CRuby 4.0.0 engine built
|
|
for `wasm32-wasi` by ruby.wasm. The reviewed runtime is the minimal
|
|
`ruby.wasm` from `@ruby/4.0-wasm-wasi@2.9.3-2.9.4`; the JavaScript host API is
|
|
`@ruby/wasm-wasi@2.9.3-2.9.4`.
|
|
|
|
The fixed `bridge.rb` module is evaluated once during worker start. Pattern,
|
|
flags, subject, limits and replacement travel through a bounded,
|
|
length-prefixed file in the worker-local WASI memory filesystem. Bounded inert
|
|
JSON returns metadata only; replacement output is written as UTF-8 to a
|
|
separate bounded worker-local file. No user-controlled value is evaluated or
|
|
interpolated as Ruby or JavaScript source, and the bridge does not use the
|
|
ruby.wasm `JS.eval` conversion path.
|
|
|
|
CRuby performs compilation and matching and reports character offsets, which
|
|
the adapter exposes as Unicode code-point native offsets and normalizes to
|
|
browser UTF-16 ranges. Native `String#gsub`/`String#sub` block iteration drives
|
|
replacement matching without materializing expanded output. A fixed streaming
|
|
implementation of CRuby 4.0.0's `rb_reg_regsub` grammar handles `\1` through
|
|
`\9`, `\k<name>`, `\0`, `\&`, ``\` ``, `\'`, `\+`, and `\\`; a load-time
|
|
bounded fixture verifies parity with CRuby. The expander stops on a valid UTF-8
|
|
boundary at the configured byte limit. Unpaired browser UTF-16 surrogates are
|
|
rejected before request encoding. A workbench timeout, cancellation,
|
|
supersession or crash terminates the dedicated worker and its complete
|
|
WebAssembly heap.
|
|
|
|
The deterministic pack contains only:
|
|
|
|
- `ruby.wasm`;
|
|
- `engine-metadata.json`;
|
|
- `SHA256SUMS`;
|
|
- ruby.wasm's exact `LICENSE.txt`;
|
|
- ruby.wasm's complete `NOTICE.txt`, including CRuby and bundled third-party
|
|
notices; and
|
|
- the exact browser WASI shim and `tslib` license texts required by the
|
|
JavaScript host bundle.
|