完整编译管线
自研 lexer / parser / compiler / 字节码 VM,109 个操作码、定长 3 字节指令编码。不是 V8 绑定,也不是 JS 转 Go —— 每一层都可以单独阅读和测试。
看运行时模型
也可以不装:npx goxjs app.js;或从源码 go build。详见安装与创建工程。
一个用 Go 写的、从词法分析到字节码虚拟机全部自己实现的 JavaScript 运行时。不是 V8 的绑定,也不是把 JS 翻译成 Go。
跑 ES6+ 脚本、写 CLI 工具、写带窗口的桌面程序、把脚本打包成单个可执行文件发给别人,以及拿它学习编译器与虚拟机实现。
不追求替代生产环境的 Node 生态:没有 npm 兼容、没有 require、没有 JIT,也不实现 DOM。当作一门独立的小语言 + 自带 UI 框架来用。
一条清晰的管线,每一层都可以单独阅读和测试。
关键设计:无 GC 的显式内存管理(循环引用有专门处理)、单线程 VM + 跨 goroutine 调度(网络回调回投,JS 永远单线程无需加锁)、定长指令编码(解码即取即用)。
import { createSignal } from "gx/solid";
import { h, render } from "gx/gfx";
const [count, setCount] = createSignal(0);
render(
<window title="Counter" width={400} height={300}>
<column gap={8} padding={16}>
<text font={20}>{() => `count: ${count()}`}</text>
<button onClick={() => setCount(c => c + 1)}>加一</button>
</column>
</window>
);gox counter.js # 直接运行,弹出 400x300 窗口
go run ./packager counter.js --gui -o counter.exe # 打包成独立 GUI 程序属性或文本传函数即为响应式绑定:信号更新 → 依赖节点标脏 → 脏矩形合并后只重绘受影响区域。更多见GUI 桌面应用教程。
| 层面 | 内容 | 去哪看 |
|---|---|---|
| 语言 | ES6+ 子集:let/const、箭头函数、class、async/await、解构、模板字符串、可选链、ES 模块、JSX | 教程 · 语言基础 |
| 标准库 | Object / Array / String / Map / Set / Proxy / Promise / TypedArray / Temporal … | API · 标准内建 |
| 宿主模块(免 import) | console / fs / path / process / http / fetch | API · 宿主模块 |
| 响应式 | GetX 风格 obs / computed,SolidJS 风格 gx/solid 信号 | 教程 · 响应式 |
| GUI | 44 个内置元素 + JSX + 脏矩形局部重绘、路由、多窗口 | 组件参考 |
| 多端 | 桌面 Windows / Linux / macOS(win32 / X11 / cocoa)与移动 Android / iOS / 鸿蒙 —— 平台壳工程驱动同一渲染内核,界面逻辑一份 JS 通用 | 教程 · GUI 应用 |
| 内置模块(需 import) | gx/solid · gx/gfx · gx/view · gx/router · gx/screen · gx/dialog · gx/storage · gx/dev 与原生能力层六模块 | API · 内置模块 |
| 工具链 | REPL、gox create 脚手架、gox dev 热更新、jsbuild 打包、五平台 npm 预编译二进制 | 教程 · 安装 |
当前版本 v0.10.0,完整条目见 GitHub Releases。
| 版本 | 内容 |
|---|---|
| 0.9.0 | table / tree / list-item 数据展示组件、tabs 选项卡、tooltip 悬停提示;设计 token 与主题系统(32 项颜色 token、暗色预设、运行时切换);gx/update v1.1 自动更新(流式下载 / 断点续传 / 进度回调 / pre 通道);gox create --ts TypeScript / TSX 模板;var 声明与 class 表达式;运行时错误带源码帧定位 |
| 0.8.0 | Test262 合规率流水线(定时跑 language 套件、徽章自动回写);gox vs node 性能基准 harness;压力与帧预算测试(万级定时器风暴 / 并发 fetch / 489 节点渲染预算);3 个示例应用(TODO / 仪表盘 / 贪吃蛇);计算属性名;滚动条可拖拽与横向滚动 |
| 0.7.0 | gox cert 一键生成各平台签名证书、gox build android 自动接入签名、gox create 生成 certs/ 目录;gox build macos --arch universal(amd64+arm64 合并);iOS 相册多选保序与 media.preview 多文件预览 |
| 0.6.0 | macOS 窗口后端 cocoa(桌面 GUI 三平台齐);gox dev 热更新、gox.json 项目配置、gox build 统一构建入口 |
| 0.5.0 | 原生能力层六个内置模块(gx/device · gx/app · gx/geo · gx/media · gx/permission · gx/viewport) |
| 0.4.0 | 脚手架 gox create;路由 gx/router 与屏幕 gx/screen 成为内置模块 |
已知缺口
富文本(行内混排样式)尚未封装(虚拟化长列表已在 <scroll vlist> 落地) —— 表格 / 树 / tooltip / 图标 / spinner / tabs 等数据展示与反馈类组件已在 0.9.0 落地;原生能力层里依赖真机的部分(相机 / 定位 / 相册 / 权限)在桌面上诚实报 unsupported,移动端则由平台壳工程提供(Android 已模拟器实测、iOS 待验收、鸿蒙仍是桩)。逐项见限制与常见误区。