📜 GRJS 解释器

引擎 · 在 C# 中运行的 JavaScript 解释器,为「反射宿主对象」特化。

📌 技术定位

GRJS(General Reflection JavaScript)是一个把 JavaScript 字符串编译为后缀表达式、由栈机执行的 C# 解释器。 它不是通用的浏览器 JS 引擎,而是为反射特化:可以低成本地与宿主 C# 对象高频通信, 直接操作宿主对象而不存在序列化过程。语法上是 ECMAScript ES5 的超集(并已实现多数现代语法), 但不追求适配 ES6 及更晚版本。

C# 宿主 ES5 超集 后缀表达式 + 栈机 反射特化

✨ 核心特性

🪜 三层递进版本

同一套源码继承出三个版本,按场景取「性能—功能」甜点:
· GRJSExpression:表达式 / 运算符 / 短路,适合过滤器与配置;
· GRJSConditional:增加 if / while / for / let / function / return;
· GRJSClosure:增加闭包、箭头函数、async/await 与解构。

🔌 为反射特化

弱类型读、强类型写(如把 "123" 赋给宿主 float 字段会自动转换); 可直接迭代宿主的 List<int> 而无需先转成 JS 数组。

🧩 反射扩展运算符

in 可做子串检查;as / is 右侧可接宿主类名字符串;import 导入的是 C# 类。

🛡️ 受限反射安全模型

未显式设置解析器时,只允许值类型 / string / 已注入对象的属性访问与方法调用,其余引用类型被拒; 显式设置后才获得完整反射能力。

💉 两级注入

运行时变量可随时替换;编译期常量会内联进产物,性能更好。内置类不默认加载,按需注入。

🤖 对 AI Agent 友好

借助大模型庞大的 JS 语料,只需极少约束即可生成可用的反射脚本,是 AI 驱动自动化的理想入口语言。

🔧 关键技术点

🧪 示例

// 一行过滤器(表达式版本即可胜任)
this.num > 10 && this["name"].length < 3

// 反射:以宿主类名字符串做类型判断
obj is "System.Collections.IList"
obj as "System.Collections.IList"

// 闭包:返回给宿主稍后回调
var handler = function (x) { return x * 2; };
本页用于分享开发思路与展示作品,目前未承诺开源或提供下载地址。作者应用技术不含GPL等强制开源协议。