编程语言语言运行时编译器解释器嵌入式【免费下载链接】mrubyLightweight Ruby项目地址https://gitcode.com/gh_mirrors/mr/mruby点击查看免费下载导读本文是面向 mruby 使用者与嵌入式 Ruby 开发者的完整升级指南基于仓库内官方变更文档 doc/mruby3.3.md 展开梳理了从 mruby 3.2 升级到 mruby 3.3 过程中所有用户可见的变更语言语义调整、配置宏与构建平台、内存 API、C API、mrbgems 生态、构建系统以及大量已修复的缺陷。读完本文你将掌握 mruby 3.3 的迁移要点、MRB_USE_VM_SWITCH_DISPATCH等配置宏的新旧对应关系、Class#allocate禁用机制、以及各 mrbgem 新增方法如String#bytesplice、Range#overlap?、Enumerator#size的底层实现与使用方式能够把基于 mruby 3.2 的项目平滑迁移到 3.3 并规避所有破坏性变更。文中标注NOTE的变更属于需要格外留意的破坏性调整所有结论均以当前仓库的实际源码、配置与测试为依据文中给出的仓库相对路径可供读者自行核对。一、版本定位与文档性质mruby 是一个轻量级 Ruby 实现项目自述为 Lightweight Ruby其源码与文档均位于本仓库。doc/mruby3.3.md是官方发布的版本变更说明逐条记录了 mruby 3.3 相对 3.2 的改动每条改动均关联了对应 commit 或 PR 编号如 #5902、doc/mruby3.1.md、doc/mruby3.2.md、doc/mruby3.4.md、doc/mruby4.0.md形成了完整的版本演进脉络阅读时可以相互参照。文档按九大板块组织语言The language、配置Configuration、mruby 内存 API、C API 变更、mrbgems 变更、构建系统变更、其他破坏性变更、已修复的 Bug、用户可见的 Pull Request 列表。下文沿用该骨架并逐条展开。二、语言层面The language的变更1.super与方法的alias正确配合mruby 3.3 修复了方法别名与super的配合问题当方法经过alias之后super现在能够正确工作对应 commit 2ad3f0e。此前在别名方法中调用super可能产生异常行为升级后这类代码可以放心使用。2.callee在别名场景下的行为差异callee方法在 mruby 中与别名配合时的行为与 CRuby 不同3.3 对此进行了专门调整对应 commit f2dc76e。如果你的代码依赖callee获取原始方法名需要注意 mruby 的处理方式与 CRuby 存在差异属于行为差异而非缺陷设计时需按 mruby 的语义来写。3. 新增Kernel#respond_to_missing?mruby 3.3 正式定义了Kernel#respond_to_missing?方法对应 commit 347586e。它的作用是配合respond_to?当对象通过method_missing处理未知方法时可以让respond_to?的询问也能命中这些虚拟方法。在 src/kernel.c 的实现注释中mruby 详细描述了其语义如果某方法真实存在respond_to?直接回答truerespond_to_missing?不参与如果方法不存在respond_to?会把询问转交给respond_to_missing?由它来决定是否应答行为与 CRuby 一致反过来test/t/kernel.rb 中的大量测试也验证了一个未实现的方法不能靠respond_to_missing?让respond_to?返回true——只有当方法确实经method_missing处理时才有效。同时 doc/mruby4.0.md 记载到 4.0 时respond_to_missing?被进一步定义成私有方法与 CRuby 一致升级路线上值得提前了解。测试用例位于 test/t/kernel.rb覆盖了已定义方法未定义方法undef 之后未定义 respond_to_missing? 时返回 false等边界场景。4. 移除_inspect方法带递归检查的 inspectmruby 3.2 中用于递归检查的_inspect方法在 3.3 被整体移除涉及 commit e2bbf75、5cb0c74、113565a、0713f2a、6ae6b63、fc9fffc 等一组改动。这意味着所有依赖_inspect的代码包括自定义 inspect 逻辑、序列化库等都必须改造改用公开的inspect接口。5. 移除__printstr__方法改用print内部打印方法__printstr__在 3.3 中被删除commit acecee0、192e6e3任何直接调用__printstr__的代码应替换为标准的print。这属于内部实现细节的清理对普通业务代码影响有限但对接底层输出通道的代码需要注意。6. 新方法String#bytesplicemruby 3.3 引入了String#bytesplicecommit 5274647、a2e2e83用于按字节偏移替换字符串片段。与按字符操作的splice不同字节级操作对二进制数据处理更直观。其核心实现位于 src/string.c 的str_bytesplice函数调用形式为bytesplice(index, length, str) - string该方法在 mrbgems/mruby-io/test/io.rb 中也有实际用例a.bytesplice(100, 100, )用于缩短字符串以腾出容量说明它可用于缓冲区管理类场景。3.3 还专门修复了该方法的若干缺陷见 issue #5986使用前建议阅读 src/string.c 的参数约束。7. 允许return在块中跨越 C 边界这是 3.3 语言层面最重要的能力扩展之一PR #6125此前从 Ruby 块中return到定义块的 C 函数之外会被限制3.3 起允许return跨越 C 边界返回。这涉及 VM 指令OP_RETURN_BLK的行为扩展——配套的 PR #6126 还修复了在 C 函数下直接调用OP_RETURN_BLK时的返回值问题。对于用 C 扩展封装迭代器的 gem 开发者这一改动直接影响到块的返回语义升级后相关边界场景的行为更接近 CRuby。三、配置Configuration层面的变更1. Docker 构建与测试mruby 3.3 起可以完全用 Docker 完成构建与测试PR #5961。仓库根目录提供了开箱即用的配置Dockerfile基于ruby:3.2.2-bullseye预装 python3-pip、shellcheck 等测试依赖并安装 pre-commit hooksdocker-compose.yml定义了test服务执行rake deep_clean rake -m test:run:serial并通过环境变量注入MRUBY_CONFIGci/gcc-clang、CCgcc、CXXg、LDgcc等构建参数。直接运行docker-compose build即可按默认 CI 配置构建镜像之后可用 docker-compose 启动完整测试。这对 CI 集成和跨环境复现构建非常实用。2. 新增平台支持DJGPPMS-DOS与 Nintendo WiiDJGPP (MS-DOS)新增i586-pc-msdosdjgpp.rb构建配置PR #6022使 mruby 可以运行在 DOS 环境DJGPP 是面向 DOS 的 32 位 GCC 移植工具链Nintendo Wii新增nintendo_wii.rb构建配置PR #6086。新平台配置均位于 build_config 目录下与已有的chipKITMax32.rb、dreamcast_shelf.rb、gameboyadvance.rb等嵌入式/家用机平台配置并列。3. 改进的平台Android 与 DreamcastAndroid修复了 Android 工具链PR #6013对应 tasks/toolchains/android.rakeDreamcastdreamcast_shelf构建配置被彻底重写PR #6130对应 build_config/dreamcast_shelf.rb。4. 允许为特定 gem 禁用测试PR #6012 为构建系统引入了按 gem 关闭测试的能力并在关闭时给出警告。这意味着某些在新平台上无法运行的测试可以被显式排除而不会导致整个测试流程失败也不会静默跳过会有警告提示。5. 配置宏更名MRB_NO_DIRECT_THREADING→MRB_USE_VM_SWITCH_DISPATCH这是一个需要迁移的配置宏变更PR #5902旧宏MRB_NO_DIRECT_THREADING以及更早的MRB_DISABLE_DIRECT_THREADING见 doc/mruby3.0.md 的旧名对照表新宏MRB_USE_VM_SWITCH_DISPATCH——语义从禁止直接线程化反转为显式启用 switch 分发。新宏的含义在 doc/guides/mrbconf.md 中有官方说明定义该宏后VM 主循环使用switch 分发不定义时若编译器支持则默认使用computed goto直接线程化direct threading。即新宏是正向开关直接线程化成为默认路径。在 include/mrbconf.h 中仍保留了向后兼容的映射——只要定义了旧宏MRB_DISABLE_DIRECT_THREADING或MRB_NO_DIRECT_THREADING会自动推导出MRB_USE_VM_SWITCH_DISPATCH而 src/vm.c 中 VM 主循环的实现也围绕该宏展开。升级建议新项目直接定义MRB_USE_VM_SWITCH_DISPATCH旧项目尽早从构建配置里移除MRB_NO_DIRECT_THREADING并改用新宏。四、mruby 内存 API 的变更1.mrb_default_allocf可由应用覆盖mruby 3.3 起应用可以在链接前自行定义mrb_default_allocf来覆盖默认分配函数commit 34c5d96。mruby 内部所有内存分配都经由统一入口进行通过定义同名函数应用可以只拦截 mruby 自身发起的内存操作而不影响程序里其他库。仓库内 doc/guides/memory.md 详细说明了这一机制内部入口实际名为mrb_basic_alloc_func()即从前的mrb_default_allocf()其函数签名为void* mrb_default_allocf(mrb_state *mrb, void *ptr, size_t size, void *ud);应用只要在自己的代码里定义这个符号并在链接时覆盖就能接管 mruby 的分配、释放与重分配操作常用于自定义内存池、统计或沙箱约束。2.mrb_open_allocf将被弃用与上述改动配套mrb_open_allocf()进入弃用通道commit cfee5c2。doc/guides/memory.md 记载了它的旧用法mrb_state *mrb mrb_open_allocf(my_allocf, ud);文档明确指出这是 3.3 中的移除项。迁移路径是不再通过mrb_open_allocf传入自定义分配函数改为直接覆盖mrb_default_allocf符号后使用标准的mrb_open()。升级前请检查代码中是否仍在使用mrb_open_allocf。五、C API 的变更1. 新增错误处理 API 函数3.3 引入了一批新的错误处理 API 函数commit 8c8bbd9用于更规范地构造与抛出异常。与之配套的两项破坏性调整见下文其他破坏性变更共同构成了新的异常处理范式。2. 新增mrb_vm_ci_env_clear()MRB_API新增函数mrb_vm_ci_env_clear(mrb, ci)以公开 APIMRB_API形式导出PR #5945用于清理调用信息callinfo中保存的环境引用避免REnv对象被意外暴露或长期持有。include/mruby/proc.h 给出了完整的使用示例在某些 C 调用点如果不清除mrb-c-cibase处的环境后续访问会拿到残留的局部变量环境示例注释中演示了不清除时[4, 5, 6]的残留泄漏现象。仓库内 mrbgems/mruby-bin-mirb/tools/mirb/mirb.c 与 mrbgems/mruby-bin-mruby/tools/mruby/mruby.c 都在调用 mruby 执行器后主动调用该函数可作为标准用法参考。3. 新函数mrb_check_frozen_value()新增mrb_check_frozen_value(mrb, v)commit ccdf75c用于检查值是否被冻结若冻结则抛出FrozenError。声明位于 include/mruby.h适合在 C 扩展里修改对象前做防御性检查。4.mrb_bug()不再支持格式化NOTEmrb_bug()的行为有破坏性变化commit 82a48bd——它不再执行格式化。当前签名在 include/mruby.h 中为MRB_API mrb_noreturn void mrb_bug(mrb_state *mrb, const char *mesg);实现位于 src/error.c。升级要求如果你在用mrb_bug(mrb, format %d, n)这类格式化调用必须改为传入简单字符串mrb_bug(mrb, simple message)或者改用mrb_raise()系列函数完成带参数的异常构造。这是最容易在编译期通过的隐性问题——代码能编译但运行时行为不同务必主动排查。5. 编译器上下文不再使用mrbc_前缀mruby 3.3 停止使用mrbc_前缀来命名编译器上下文相关 APIcommit c5e3cbe。文档说明旧名称仍然提供兼容但推荐替换为新名称。涉及面包括编译器上下文的创建、解析、生成等函数族。迁移时对照新命名逐个替换即可无需立即处理但建议清理。6. 允许禁止Class#allocate这是 3.3 一个重要的安全/设计能力PR #5979、#6122、#6123可以禁止某个类被allocate。提供的宏定义在 include/mruby/class.h#define MRB_UNDEF_ALLOCATOR(c) (mrb_assert((c)-tt MRB_TT_CLASS), (c)-flags | MRB_FL_UNDEF_ALLOCATE) #define MRB_UNDEF_ALLOCATOR_P(c) ((c)-flags MRB_FL_UNDEF_ALLOCATE) #define MRB_DEFINE_ALLOCATOR(c) ((c)-flags ~MRB_FL_UNDEF_ALLOCATE)对某个类调用MRB_UNDEF_ALLOCATOR(c)即可禁止allocate子类会继承MRB_FL_UNDEF_ALLOCATE标志PR #6123 的实现即禁止状态自动沿继承链传递想显式放行子类调用MRB_DEFINE_ALLOCATOR(c)VM 层在 src/class.c 中通过MRB_UNDEF_ALLOCATOR_P(c)检查标志并拒绝分配。这一机制在 mruby 自带 gem 中被大量使用例如mruby-bindingmrbgems/mruby-binding/src/binding.c、mruby-methodmrbgems/mruby-method/src/method.c、mruby-rational、mruby-complex等都不允许外部allocate内部类型而mruby-datamrbgems/mruby-data/src/data.c与mruby-structmrbgems/mruby-struct/src/struct.c则会在合适时机调用MRB_DEFINE_ALLOCATOR放行。自定义 C 扩展作者可参照这些模式决定自己的类是否允许allocate。六、mrbgems 的变更1.default.gembox加入调试器 mrdbPR #5966 把mruby-bin-debuggermrdb加入默认构建集合。当前 mrbgems/default.gembox 中可以看到# Generate mrdb command conf.gem :core mruby-bin-debugger这意味着默认构建现在会产出 mrdb 调试器可执行文件配合 doc/guides/debugger.md 使用即可对 irep 字节码进行断点调试。2.mruby-bin-config新选项mruby-config工具新增了编译信息查询选项PR #6054实现位于 mrbgems/mruby-bin-config/mruby-config选项输出内容--cxxC 编译器名称--cxxflags传给 C 编译器的标志--as汇编器名称--asflags传给汇编器的标志--objcObjective-C 编译器名称--objcflags传给 Objective-C 编译器的标志Windows 批处理版本 mrbgems/mruby-bin-config/mruby-config.bat 同步支持。这些选项便于 C/C 混合项目的 Makefile/构建脚本获取准确的编译参数。3.mruby-binding改名并与mruby-eval合并NOTEmruby 3.2 中的mruby-binding-core在 3.3 更名为mruby-bindingcommit 11af5db同时mruby-eval合并了旧版mruby-bindingPR #5989。迁移规则非常明确使用mruby-binding-core3.2→ 替换为mruby-binding使用mruby-binding3.2→ 替换为mruby-eval。mruby-binding的配套变化还包括实现Binding#initialize_copyPR #5517同时修复了复制 Binding 对象后局部变量未隔离的问题Kernel#binding只响应来自 Ruby 的调用PR #5981从 C 侧调用不再返回 binding。4. 各 gem 的新方法与行为变更按 gem 逐一列举 3.3 的增量mruby-compar-extComparable#clamp现在接受nil作为参数commit 836bebc。实现位于 mrbgems/mruby-compar-ext/mrblib/compar.rb当传入 Range 且端点begin/end为nil时视为无限小/无限大例如-20.clamp(0..)得到0、523.clamp(..100)得到100同时排他区间0...100作为参数时抛出ArgumentError。这与 CRuby 的无端点 Range 语义对齐。mruby-compiler为标识符 token 增加打印名称commit d7b2e3a利于编译器诊断信息可读性。mruby-data允许构造空的Data对象commit 927a9df。mruby-enumerator移除内部属性方法obj、args、kwd、meth、fibcommit 735fa24——这些原本是内部实现细节直接依赖它们的外部代码需要改写同时新增Enumerator#sizecommit 861f8bd实现见 mrbgems/mruby-enumerator/mrblib/enumerator.rb优先返回构造时传入的 size否则延迟委托给obj.size无法惰性计算时返回nil如loop.size # nil、(1..100).each.size # 100。mruby-fiber新增公开 APImrb_fiber_new(mrb, proc)PR #6097声明于 include/mruby.h实现于 mrbgems/mruby-fiber/src/fiber.cC 扩展可以直接基于 RProc 创建 Fiber允许从 C 侧调用Fiber#resumePR #6106显著放宽了 C/Ruby 边界上的协程限制Fiber#to_s的格式改变PR #6105。相关修复PR #6136 修复了mrb_fiber_resume()与Fiber#transfer组合使用的问题issue #6060 中提到的 Fiber 相关 SEGFAULT 也已处理。mruby-io新增File#atime与File#ctimecommit 321cfe9实现于 mrbgems/mruby-io/src/file.c直接返回struct stat的访问时间与状态变更时间IO.open新增x 模式PR #6081以排他方式创建文件文件已存在则失败对应底层O_EXCL语义File.new不再接受块commit 53de964传入块会被忽略或报错。mruby-methodMethod#to_s的格式改变commit f5bc82f、02f189c。mruby-numeric-extint.pow(n, m)的指数n现在可以是 bigintcommit d482eab大指数模幂运算可用。mruby-pack新增指令j、J、b、B、#commit 2a1e3a5、e7021f1、e17f325j/Jintptr_t/uintptr_t大小的整数实现见 mrbgems/mruby-pack/src/pack.c按平台sizeof(intptr_t)映射为l/q或L/Qb/B位串bit string指令mrbgems/mruby-pack/src/pack.cB为高位在前、b为低位在前#注释指令跳过到行尾mrbgems/mruby-pack/src/pack.c可在模板字符串里写注释。mruby-range-ext新增Range#overlap?commit 384d0e2判断两个 Range 是否有公共元素实现见 mrbgems/mruby-range-ext/mrblib/range.rb(1..5).overlap?(4..6) # true (1..5).overlap?(7..9) # false实现会先校验参数类型非 Range 抛出TypeError并正确考虑exclude_end?与空区间__empty_range?的情况。mruby-string-ext新增String#valid_encoding?commit eabe2d9判断字符串在当前编码下是否合法用法与测试见 mrbgems/mruby-encoding/README.md 和 mrbgems/mruby-encoding/test/string.rb如\xfe.force_encoding(Encoding::UTF_8).valid_encoding? # false而 ASCII-8BIT 字符串通常视为合法。mruby-struct允许在不指定名称的情况下构造空 Structcommit c212ede如Struct.new(:a)一类用法更宽松。mruby-time三项能力增强允许1900 年之前的年份commit e5de08b必要时支持bigint 转换到time_tcommit 7096d27正确处理负的time_tcommit b064d7e。 对历史时间、嵌入式系统的跨纪元场景非常关键。七、构建系统build system的变更1.rake install任务扩展bin 目录改为符号链接NOTErake install被扩展PR #5928随之而来的影响是默认情况下mruby/bin/目录下的可执行文件现在是指向构建产物的符号链接Windows 上为批处理文件。如果此前你的脚本/CI 直接引用mruby/bin/mruby这类路径并依赖它们是实体文件升级后应改为直接引用构建目录下的实体例如mruby/build/host/bin/。这改变了安装产物布局打包分发时需同步调整。2. presym 转义字符的编码与解码PR #6011以及补充的 PR #6045为 presym 扫描加入了转义字符的编码/解码处理修复了生成的presym/table.h含非法字符的问题issue #6044。这属于构建期生成的符号表处理对符号预定义presym机制的用户是透明修复。3.deep_clean清理默认构建目录Rakefile 的deep_clean任务现在会移除默认构建目标目录PR #6032、commit 1e38569配合rake deep_clean可以彻底清理build/与bin/目录。八、其他破坏性变更breaking changes除上述各节标注的破坏性项外还有一批需要留意mrb_f_raise()变为内部函数PR #5923、#6070从MRB_API中降级声明移入 include/mruby/internal.hC 扩展不应再直接调用它目前仅作为Kernel#raise等方法的内部入口使用见 src/kernel.c。mrb_make_exception()变为内部函数且参数不同commit 431f83e、78137f3现声明于 include/mruby/internal.h实现于 src/error.cC 扩展如需构造异常请使用 3.3 新增的公开错误处理 API。File#path不再对参数做#to_path隐式转换commit d86c4a7传对象时必须显式转为字符串。测试框架停止为每个测试文件做独立的 mrb 隔离commit a20fbe5共享mrb_state后测试之间可能互相影响编写测试时需注意状态清理。RBreak 记住 CIcallinfo位置PR #6103break展开时能回到正确的调用信息位置修复了 VM 崩溃类问题issue #6108语义更精确。九、已修复的问题Bugs Fixed3.3 修复了大量缺陷按领域归类如下对应 issue/PR 编号均可在 doc/mruby3.3.md 中查证1. 核心 VM 与语言语义#5725mrblib 代码中的const_missing异常行为怪异#5932C API 用mrb_yield创建块导致崩溃How to create a block using the C API?#5944带 hash 变量调用方法的行为#5946常量搜索路径不再从模块切换到 Object#5949块与省略括号时 caller 报错行号错误#5995块参数中多出一个看似多余的参数#6060ngx_mruby 中 Fiber 相关的 SEGFAULT#6065/#6052Proc 类处理的空指针解引用#6068mrb_vm_exec栈溢出#6076块展开可能指向无效 PC#6108break导致 VM 崩溃#6126C 函数下直接调用OP_RETURN_BLK的返回值错误#6136mrb_fiber_resume()与Fiber#transfer组合的修复#6089binding.eval处理def表达式与 CRuby 不一致#6098无法调用被包装方法的 superclass#6099proc 内 return 退出时ensure段不执行。2. 数值计算#5724Rational#**缺失commit 0906cd7大数舍入函数问题#597564 位整数极值上的相等比较失败#5985get_int_operand()中OP_LOADI32的符号扩展#5987~(-1 64)结果错误。3. 字符串 / IO / 网络#5986String#bytesplice缺陷#5991mruby 3.2.0 中gets不工作#5994mruby-io/src/io.c拼写错误#5943TCPSocket#write失败#6061String#codepoints性能问题#6051mrb_addrinfo_unix_path空指针解引用#6118IO#read带 buf 时的问题#6120check_file_descriptor()失败时设置 EBADF#6134String#unpack1返回数组而非单个字符串#6067mrb_string_value_cstr空指针解引用。4. 内存 / GC / 构建#5789栈错误导致 backtrace 信息内存不释放commit b47c8b7分代 GC 的clear_all_old缺陷#6041GC 性能下降#6029mrbgems 目录下构建失败commit a264965mruby-os-memsize的 irep 尺寸计算#6044生成的presym/table.h含非法字符#6064MRUBY_PACKAGE_DIR并非总有值#6055VisualC 下 libmruby 命名问题#6084Linux 构建中的错误符号 sink#6087构建时 Remote branch HEAD not found in upstream origin#6066Struct.new()相关的空指针解引用#5974Windows 下gem_init.c中非法转义序列。十、升级检查清单把上文所有NOTE项汇总为可直接执行的迁移清单全局搜索并替换MRB_NO_DIRECT_THREADING→MRB_USE_VM_SWITCH_DISPATCHinclude/mrbconf.h 仍兼容旧宏但新代码应使用新宏检查mrb_bug()调用改为传简单字符串或改用mrb_raise()系列检查 C 扩展中对mrb_f_raise()、mrb_make_exception()、mrb_open_allocf()的使用这三个 API 已降级/弃用分别改为公开错误处理 API、覆盖mrb_default_allocf与mrb_open()检查_inspect、__printstr__的调用分别替换为inspect与print检查对Class#allocate的依赖确认自定义类是否需要MRB_DEFINE_ALLOCATOR()显式放行子类默认继承禁止标志见 include/mruby/class.hmrbgem 改名mruby-binding-core→mruby-binding→必要时mruby-eval同时Kernel#binding仅响应 Ruby 调用构建产物路径rake install后mruby/bin/下为符号链接分发时改用mruby/build/host/bin/下的实体File.new不再接受块、File#path不再做#to_path隐式转换、mruby-enumerator内部属性方法已移除——逐项排查相应调用利用新能力String#bytesplice、Range#overlap?、Enumerator#size、String#valid_encoding?、IO.open的x模式、mruby-pack的j/J/b/B/#指令、Fiber#resume从 C 调用等新特性可放心采用。结语mruby 3.3 是一次以收敛内部实现、对齐 CRuby 语义、扩展嵌入式平台为主线的版本语言层面对齐了super/别名、respond_to_missing?、块return跨 C 边界等语义C API 层引入了更安全的错误处理范式、冻结值检查与 allocate 禁令构建层面新增了 Docker 支持、DJGPP 与 Wii 平台并重构了 presym 与安装任务。对于从 3.2 升级的开发者重点是把上文九项检查清单逐条过一遍对于新项目直接采用 3.3 的 API 与配置即可。所有细节均可回到 doc/mruby3.3.md 及文中给出的源码路径进一步核验。赞分享编程语言语言运行时编译器解释器嵌入式【免费下载链接】mrubyLightweight Ruby项目地址https://gitcode.com/gh_mirrors/mr/mruby点击查看免费下载相关推荐mruby 3.3 从 mruby 3.2 升级的完整变更指南语言、C API 与构建系统的破坏性改动mruby 3.3 从 mruby 3.2 升级的完整变更指南语言、C API 与构建系统的破坏性改动 mruby 是轻量级 Ruby 实现本仓库在 lib可观测性日志分析云原生流处理mruby 3.2 用户可见变更全解析语言特性、工具链、mrbgems 与安全修复mruby 3.2 用户可见变更全解析语言特性、工具链、mrbgems 与安全修复 导读 mruby3.2.md 是 mruby 官方发布说明文档系统梳理了后端网络mruby 3.1 升级指南语言特性、字节码格式与 VM 指令集全面变更解析mruby 3.1 升级指南语言特性、字节码格式与 VM 指令集全面变更解析 导读 本文基于 deps/mruby/doc/mruby3.1.md http后端网络创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?