Hotdry.
compiler-design

自由 JavaScript:本土编译实现运行时主权

通过 AOT 将 JS 编译为无 VM 依赖的本土二进制,绕过 V8/QuickJS 锁定,实现可移植可执行文件与运行时自由。

在 JavaScript 生态中,运行时依赖已成为隐形枷锁。V8 引擎主导 Node.js、Deno 和浏览器,QuickJS 等轻量替代虽小巧,却仍需嵌入 VM。商标层面,Oracle 垄断 “JavaScript” 一词,进一步限制自由使用。这种双重锁定阻碍了 JS 的真正主权:无法生成独立、可移植的本土二进制。

Deno 团队发起 #FreeJavaScript 运动,挑战 Oracle 商标,旨在将 JS 推向公共领域。该行动强调 JS 作为通用语言不应受单一公司控制,已吸引数万开发者签名,支持通过 GoFundMe 筹资诉讼。

运行时自由需 AOT(Ahead-of-Time)本土编译:将 JS 直接转为机器码,无需运行时 VM。Porffor 项目提供实验性解决方案。它用 JS 编写解析器和代码生成器,将 JS/TS 转为 Wasm 字节码,经优化后输出 C 代码,再由 Clang/GCC/Zig 编译为本土 exe。Porffor 绕过传统 VM,生成零依赖可执行文件,体积仅几十至数百 KB,启动瞬时。

Porffor 编译流程:Acorn 解析 JS → 生成 Wasm → 字节码优化 → Wasm-to-C → 本土链接。示例:编写 hello.js 输出 “Hello from Porffor native binary!”,命令 porf native hello.js output.exe 生成 exe,直接运行无额外依赖。

工程化参数:

  • 编译器选择--compiler=clang(默认,高兼容);GCC 平衡速度 / 体积;Zig 跨平台最佳。
  • 优化级别--cO=Ofast(默认,激进);O3 安全,O2 体积小。结合 -strip 去除符号,减 20% 大小。
  • 监控阈值:体积 <500KB(CLI 工具);启动 <10ms;内存峰值 <1MB。基准测试:比解释器快 2-5x,接近 JIT。
  • 清单
    1. npm i -g porffor@latest
    2. 测试 JS:纯函数、无 eval / 动态 Function。
    3. 编译:porf native app.js app.exe --cO=O3 --compiler=zig
    4. 部署:静态链接 libc,跨 Linux/Windows/macOS。
    5. 回滚:若 async 有限,fallback QuickJS qjsc 生成含 VM exe(~200KB)。

QuickJS 作为过渡:qjsc app.js -o app 生成自包含 exe,虽内嵌解释器(无外部 deps),体积小、支持 ES2023。Deno 行动引用:“Oracle 未创造、维护或使用 JS,却垄断名称。”

风险控制:

  • 功能限:Porffor 无 eval、有限 async;阈值:静态分析覆盖 >90% 代码。
  • 兼容:目标平台测试(x64/arm64);回滚策略:VM 模式。
  • 安全:静态编译减反射攻击;监控崩溃率 <0.1%。

此路径实现 JS 主权:商标自由 + 运行时独立。未来,成熟 AOT 将 JS 从 VM 牢笼解放,适用于 CLI、IoT、边缘计算。资料来源:https://javascript.tm/(Free JS 宣言);Porffor 项目文档。

查看归档