通过修改 mrbconf.h 文件中的宏定义,我们可以配置mruby的一些构建选项
mrbconf.h这样的方式在你有多个构建配置 (比如很多交叉编译平台) 的情况下很有用,因为你做出的修改会影响到所有的构建配置
另外,很多选项已经在该文件内写好了,你可以通过注释或解除注释来轻松地控制它们
请确保向所有编译器传递了相同的设置
MRB_NO_STDIOmrb_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
RuntimeErrorMRB_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 时将会抛出 RuntimeErrorMRB_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 的最大值ArgumentErrorKHASH_DEFAULT_SIZE
MRB_NO_METHOD_CACHE
MRB_METHOD_CACHE_SIZE
MRB_NO_METHOD_CACHE 如果已经启用,则该设置无效化MRB_USE_METHOD_T_STRUCT
mrb_method_tMRB_USE_ALL_SYMBOLS
mrbgems/mruby-symbol-ext 中的 Symbol.all_symbols 功能可用