编译扩展
编译扩展是高级的 Scratch 扩展,直接与 Bilup 的 JavaScript 编译器集成以提供优化性能。与通过 VM 解释器运行的常规扩展不同,编译扩展将代码直接注入编译输出中,实现原始 JavaScript 性能。
什么是编译扩展?
编译扩展通过为编译器的代码生成阶段打补丁来修改 Bilup 的内部编译过程。当项目使用编译扩展时,扩展的积木被转换为优化的 JavaScript 代码,以原始速度运行而不是通过 Scratch 的虚拟机。
与常规扩展的主要区别
常规扩展
- 通过 Scratch 的 VM 解释器运行
- 每个积木调用经过多个抽象层
- 由于运行时解释,执行速度较慢
- 开发和调试更容易
- 与所有 Scratch 环境兼容
编译扩展
- 在编译期间生成直接 JavaScript 代码
- 完全绕过 VM 解释
- 接近原始 JavaScript 性能
- 开发过程更复杂
- 仅在支持编译的环境中工作(如 Bilup)
编译工作原理
当 Bilup 编译项目时,它经历多个阶段:
- 脚本树生成:将积木结构转换为中间表示
- IR 生成:将树转换为中间表示(IR)
- JavaScript 生成:将 IR 转换为可执行的 JavaScript 代码
编译扩展使用补丁系统在每个阶段注入自定义行为。