通过修改 mrbconf.h
文件中的宏定义,我们可以配置mruby的一些构建选项
mrbconf.h
这样的方式在你有多个构建配置 (比如很多交叉编译平台) 的情况下很有用,因为你做出的修改会影响到所有的构建配置
另外,很多选项已经在该文件内写好了,你可以通过注释或解除注释来轻松地控制它们
请确保向所有编译器传递了相同的设置
MRB_NO_STDIO
mrb_irep
(也就是字节码) 转储到文件,或者从文件加载将会不可用
编译 Ruby 源代码文件
一些 src/print.c 里定义的 print 行为
MRB_USE_DEBUG_HOOK
OP_DEBUG
,它会调用 Debug OP hookMRB_DEBUG
mrb_assert
宏将会启用enable_debug
时也会启用该宏MRB_STACK_EXTEND_DOUBLING
MRB_STACK_GROWTH
MRB_STACK_EXTEND_DOUBLING
时,该选项无效化MRB_STACK_MAX
RuntimeError
MRB_USE_FLOAT32
mrb_float
的值将会采用 float 型作为实体,否则将会采用 double 型MRB_NO_FLOAT
MRB_INT32
MRB_INT64
注:MRB_INT32
和 MRB_INT64
是不兼容的 (很显然吧)
MRB_GC_STRESS
RBasic
对象分配时,都会触发一次 full GCMRB_GC_TURN_OFF_GENERATIONAL
(译者注:这一点和 lua 不同,lua 默认不开启增量 GC,但是 mruby 却很自信地默认开启了)
MRB_GC_FIXED_ARENA
MRB_GC_ARENA_SIZE
时将会抛出 RuntimeError
MRB_GC_ARENA_SIZE
MRB_GC_FIXED_ARENA
的话,这个设置就没用了MRB_HEAP_PAGE_SIZE
RBasic
对象数目POOL_ALIGNMENT
POOL_PAGE_SIZE
mrb_value
配置 (译者注:mrb_value 就是用于维护 mruby 值的结构,它具有变体的特征)MRB_ENDIAN_BIG
MRB_NAN_BOXING
用到该配置MRB_NAN_BOXING
mrb_value
将会被封装在一个 double 型值中MRB_USE_FLOAT32
和 MRB_NO_FLOAT
不兼容该配置MRB_WORD_BOXING
mrb_value
将会被封装在一个 word 里 (具体的大小和平台的 word 应该有关系,但通常还是 32 位)mrb_value
变体当中的一个成分,而是以一个 RBasic 对象的形式维护MRB_UTF8_STRING
MRB_FUNCALL_ARGC_MAX
mrb_funcall
的第 4 个参数 argc 的最大值ArgumentError
KHASH_DEFAULT_SIZE
MRB_NO_METHOD_CACHE
MRB_METHOD_CACHE_SIZE
MRB_NO_METHOD_CACHE
如果已经启用,则该设置无效化MRB_USE_METHOD_T_STRUCT
mrb_method_t
MRB_USE_ALL_SYMBOLS
mrbgems/mruby-symbol-ext
中的 Symbol.all_symbols
功能可用