3.1 KiB
User visible changes in mruby3.1 from mruby3.0
Build System
build_config directory
Several configurations for new platforms are added:
cross-mingw-winetest.rbcross-mingw.rbnintendo_switch.rbserenity.rb
Some new configurations for added for convenience.
minimal: minimal configurationhost-f32: compiles withmrb_floatas 32 bitfloathost-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_etextis available on your platform.MRB_NO_DEFAULT_RO_DATA_P: define this macro to avoid using predefinedmrb_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_LOADL16OP_LOADSYM16OP_STRING16OP_LAMBDA16OP_BLOCK16OP_METHOD16OP_EXEC16
Those instructions are no longer needed by reintroduction of extension instructions.
OP_SENDVOP_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 operandsa[b]OP_SETIDX: takes 3 operandsa[b]=cOP_SSEND: takes 3 operandsa=self.b(c...); seeOP_SENDOP_SSENDB: takes 3 operandsa=self.b(c...){...}; seeOP_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.