Typical build configuration files are located in build_config
directory. For examples:
default: the default configurationhost-gprof: compiles withgproffor performance tuninghost-m32: compiles in gcc 32bit mode on 64bit platformsboxing: compiles all three boxing optionsclang-asan: compiles withclang's Address Sanitizer
You can specify the build configuration file with the
MRUBY_CONFIG environment variable (or CONFIG in short).
If the value specified by MRUBY_CONFIG is not the path to
the configuration file, build_config/${MRUBY_CONFIG}.rb is
used. So you can specify it as rake MRUBY_CONFIG=boxing,
for example.
When you write a new build configuration description, please contribute. We welcome your contribution as a GitHub pull-request.
We have ported some new syntax from CRuby.
- Single line pattern matching (
12 => x); mruby matches only with local variables at the moment - Numbered block parameter (
x.map{_1 * 2}) - End-less
def(def double(x) = x*2)
Some configuration macro names are changed for consistency (use MRB_USE_XXX
or MRB_NO_XXX).
| mruby2 | mruby3 |
|---|---|
MRB_ENABLE_ALL_SYMBOLS |
MRB_USE_ALL_SYMBOLS |
MRB_ENABLE_CXX_ABI |
MRB_USE_CXX_ABI |
MRB_ENABLE_CXX_EXCEPTION |
MRB_USE_CXX_EXCEPTION |
MRB_ENABLE_DEBUG_HOOK |
MRB_USE_DEBUG_HOOK |
MRB_DISABLE_DIRECT_THREADING |
MRB_NO_DIRECT_THREADING |
MRB_DISABLE_STDIO |
MRB_NO_STDIO |
MRB_METHOD_T_STRUCT |
MRB_USE_METHOD_T_STRUCT |
MRB_USE_FLOAT |
MRB_USE_FLOAT32 |
MRB_WITHOUT_FLOAT |
MRB_NO_FLOAT |
ENABLE_LINENOISE |
MRB_USE_LINENOISE |
ENABLE_READLINE |
MRB_USE_READLINE |
DISABLE_MIRB_UNDERSCORE |
MRB_NO_MIRB_UNDERSCORE |
MRB_USE_FLOAT32is changed fromMRB_USE_FLOATto make surefloathere means using single precision float, and not the opposite ofMRB_NO_FLOAT.MRB_USE_METHOD_T_STRUCTusesstructversion ofmrb_method_t. More portable but consumes more memory. Turned on by default on 32bit platforms.MRB_prefix is added to those without.
Uses struct to represent mrb_value. Consumes more memory
but easier to investigate the internal and to debug. It used
to be default mrb_value representation. Now the default is
MRB_WORD_BOXING.
Pack mrb_value in an intptr_t integer. Consumes less
memory compared to MRB_NO_BOXING especially on 32-bit
platforms. Fixnum size is 31 bits so some integer values
does not fit in Fixnum integers.
Pack mrb_value in a floating pointer number. Nothing
changed from previous versions.
Call malloc_trim(0) from mrb_full_gc() if this macro is defined.
If you are using glibc malloc, this macro could reduce memory consumption.
The mruby3 now automatically detects *.mrb files without the -b
switch. Therefore, it can be mixed with the *.rb file in combination
with the -r switch and specified at the same time.
Here's an example that works fine:
$ bin/mruby app.mrb
$ bin/mruby -r lib1.mrb -r lib2.rb app.rb
$ bin/mruby -r lib1.rb -r lib2.rb < app.mrbmruby3 introduces a few new instructions.
Instructions that access pool[i]/syms[i] where i>255.
OP_LOADL16OP_STRING16OP_LOADSYM16
Instructions that load a 32-bit integer.
OP_LOADI32
Instruction that unwinds jump table for rescue/ensure.
OP_JMPUW
Renamed from OP_RAISE
OP_RAISEIF
Instruction that is reserved for the future keyword argument support.
- OP_SENDVK
Instructions for old exception handling
OP_ONERROP_POPERROP_EPUSHOP_EPOP
No more operand extension
OP_EXT1OP_EXT2OP_EXT3
Jump addresses used to be specified by absolute offset from the start of iseq. Now they are relative offset from the address of the next instruction.
For better and faster random number generation.
Preallocated symbols are interned at compile-time. They can be accessed via symbols macros (e.g. MRB_SYM()).
See Symbols.