⚙️ GS2 虚拟机
引擎 · GS2(GeneralScript 2.0)反射式嵌入式脚本语言的虚拟机与汇编器。
📌 技术定位
GS2 是一种「对反射特化、类汇编 + 兼容 JS」的嵌入式脚本语言,设计意图是用短脚本通过反射访问宿主的绝大多数对象。 它适合嵌入到其它程序中运行:自身不定义数据结构,而是通过反射访问宿主对象,并把宿主语言中复杂的反射机制 (重载、泛型等)简短化。配套地,虚拟机负责执行、汇编器负责编译。
✨ 核心特性
🐚 双语法并存
类 Shell 管道化语法(getc "System.Math"|.Max 3 4)适合控制台逐行调试与人类编写; JS 表达式((a = b*c; return a))适合数学与 AI 生成,两者可完整混写。
🔎 强反射、无协议通信
不预注册即可访问宿主的 private 成员、泛型、重载与跨程序集内容;程序之间可以不约定协议, 直接向对方发送脚本执行请求。
⚡ 寄存器式架构
类汇编指令与机器码近似一对一、无 AST、现场编译快;参数预分配并复用覆盖,以内存换速度。 默认函数调用类似 goto 不压栈,并提供压栈指令兜底支持递归。
📦 可裁剪部署
编译器与虚拟机分离:客户端仅需部署虚拟机以接收远程已编译脚本。除词法外不依赖框架其余部分,可移植到其它语言。
🛡️ 对象级信任安全模型
反射分 0/1/2/3 级;低等级虚拟机不再一刀切报错,而是按目标对象的信任等级放行 (运行快照 > 值类型通配 > 信任类字典 > 信任接口有序表)。
🍬 丰富语法糖
中括号内联指令注入、后缀表达式注入、行首变量/点号/链式调用语法糖、语句结尾 !(输出结果或等待 Task)与 ..(不改变寄存器)。
🔧 关键技术点
- 执行管线:词法分析 → 汇编器编译为可序列化的脚本对象 → 虚拟机逐行执行。
- 指令扩展:派生 CPU 类即可注册函数委托,扩展编译期无法识别的指令。
- 对象池复用:管理器按「类型 + 池名」两层对象池复用虚拟机实例。
- 兼容性校验:版本号末尾带时间戳,用于校验虚拟机与汇编器的兼容性。
- 参数表:脚本参数表位于脚本对象而非虚拟机,以内存换效率;多实例异步执行同一脚本需各自独立副本。
- 最小版本:另有一个最小化虚拟机版本独立维护,供跨语言客户端移植使用。
🧪 示例
// 类 Shell 语法(适合控制台逐行调试)
getc "System.Math"|.Max 3 4
// JS 语法(适合数学与 AI 生成)
(a = 3 * 4; return a)