diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-10-24 13:21:53 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-10-24 13:21:54 +0900 |
| commit | 5c6e8b32a3aaaf4ec34f6e1335e1050ffe7232b2 (patch) | |
| tree | f2e4f2497483ec8554c87f3ca8fe0718f29d039a /doc/mruby3.1.md | |
| parent | 7850549a5edf2952056234203d2c72cf264f08eb (diff) | |
| download | mruby-5c6e8b32a3aaaf4ec34f6e1335e1050ffe7232b2.tar.gz mruby-5c6e8b32a3aaaf4ec34f6e1335e1050ffe7232b2.zip | |
doc/mruby3.1.h: separate mruby3.0 changes and mruby3.1 changes.
Diffstat (limited to 'doc/mruby3.1.md')
| -rw-r--r-- | doc/mruby3.1.md | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/doc/mruby3.1.md b/doc/mruby3.1.md new file mode 100644 index 000000000..1a8c621a9 --- /dev/null +++ b/doc/mruby3.1.md @@ -0,0 +1,99 @@ +# User visible changes in `mruby3.1` from `mruby3.0` + +# Build System + +## `build_config` directory + +Several configurations for new platforms are added: + +* `cross-mingw-winetest.rb` +* `cross-mingw.rb` +* `nintendo_switch.rb` +* `serenity.rb` + +Some new configurations for added for convenience. + +* `minimal`: minimal configuration +* `host-f32`: compiles with `mrb_float` as 32 bit `float` +* `host-nofloat`: compiles with no float configuration + +And `android_arm64-v8a.rb` was renamed to `android_arm64_v8a.rb` for consistency. + +# Language Changes + +## Keyword Arguments + +CRuby3.0 compatible keyword arguments are introduced. +Keyword arguments are basically separated from ordinal arguments + +# Configuration Options Changed + +Some configuration macros are available: + +* `MRB_WORDBOX_NO_FLOAT_TRUNCATE`: by default, float values are packed in the word if possible, but define this macro to allocate float values in the heap. +* `MRB_USE_RO_DATA_P_ETEXT`: define this macro if `_etext` is available on your platform. +* `MRB_NO_DEFAULT_RO_DATA_P`: define this macro to avoid using predefined `mrb_ro_data_p()` function + +# Internal Changes + +## Reintroduced Instructions + +`mruby3.0` removed `OP_EXT1`, `OP_EXT2`, `OP_EXT3` for operand extension. But the operand size limitations was too tight for real-world application. +`mruby3.1` reintroduces those extension instructions. + +## Removed Instructions + +`mruby3.1` removed following instructions. + +* `OP_LOADL16` +* `OP_LOADSYM16` +* `OP_STRING16` +* `OP_LAMBDA16` +* `OP_BLOCK16` +* `OP_METHOD16` +* `OP_EXEC16` + +Those instructions are no longer needed by reintroduction of extension instructions. + +* `OP_SENDV` +* `OP_SENDVB` + +Those instructions for method calls with variable number of arguments are no longer needed. They are covered by `OP_SEND` instruction with `n=15`. + +## New Instructions + +`mruby3.1` introduces following new instructions. + +* `OP_GETIDX`: takes 2 operands `a[b]` +* `OP_SETIDX`: takes 3 operands `a[b]=c` +* `OP_SSEND`: takes 3 operands `a=self.b(c...)`; see `OP_SEND` +* `OP_SSENDB`: takes 3 operands `a=self.b(c...){...}`; see `OP_SEND` + +### `OP_GETIDX` and `OP_SETIDX` + +Execute `obj[int]` and `obj[int] = value` respectively, where `obj` is `string|array|hash`. + +### `OP_SSEND` and `OP_SSENDB` + +They are similar to `OP_SEND` and `OP_SENDB` respectively. They initialize the `R[a]` by `self` first so that we can skip one `OP_LOADSELF` instruction for each call. + +## Changed Instructions + +### `OP_SEND` and `OP_SENDB` + +Method calling instructions are unified. Now `OP_SEND` and `OP_SENDB` (method call with a block) can support both splat arguments and keyword arguments as well. + +The brief description of the instructions: + +|`OP_SEND` | BBB | `R(a) = call(R(a),Syms(b),R(a+1..n),R(a+n+1),R(a+n+2)..nk) c=n|nk<<4` | +|`OP_SENDB` | BBB | `R(a) = call(R(a),Syms(b),R(a+1..n),R(a+n+1..nk),R(a+n+2..nk),&R(a+n+2*nk+2)) c=n|nk<<4` | + +When `n == 15`, the method takes arguments packed in an array. When `nk == 15`, the method takes keyword arguments packed in a hash. + +### `OP_ARYPUSH` + +Now takes 2 operands and pushes multiple entries to an array. + +## `String#hash` now use `FNV1a` algorithm + +For better and faster hash values. |
