动态模型和XWorker
一种创新的编程范式
作者:XWorker开发团队
2023年11月
动态模型简介
1. 抽象的编程方法
• 依赖其他编程语言实现
• 提供更高层次的编程抽象
• 基于XML的结构化数据定义
2. 从认知角度出发
• 系统事物可以先存在后认知
• 通过面向对象方法使用事物
• 模型结构可动态调整
3. 基本概念
• 事物(Thing): 结构化数据模型
• 动作(Action): 可执行的行为模型
• 两者共同构成动态模型基础
动态模型基本概念
1. 模型(Thing)
• 结构化数据表示,如XML/JSON
• 示例XML模型:
<Person name="zhangsan" age="40">
<actions>
<GroovyAction name="helloWorld"
code="println "hello world""/>
</actions>
</Person>
2. 动作(Action)
• 任何模型都可转化为可执行动作
• 相当于编程中的函数/方法
• 执行时递归解析到元语言
3. 动作上下文
• 存储变量和执行状态
• 采用栈结构管理执行流程
• 处理break/continue/return等控制流
4. 世界(World)
• 模型的容器系统
• 通过World获取和管理模型
• 概念对应"包含万物的世界"
动态模型生成链
1. 生成链结构
• 元模型 → 类模型 → 对象模型
• 生成方向:自上而下
• 示例XML结构:
<!-- 元模型 -->
<thing name="thing" descriptors="xworker.lang.MetaDescriptor3">
<attribute name="name"/>
<thing name="attribute" extends="_parent"/>
</thing>
<!-- 类模型 -->
<thing name="Person" descriptors="xworker.lang.MetaDescriptor3">
<attribute name="name"/>
<attribute name="age"/>
</thing>
<!-- 对象模型 -->
<Person name="zhangsan" age="40"/>
2. 通过命名生成
• 核心机制:属性赋值(name/descriptors)
• 元模型生成类:<thing name="Person"/>
• 类生成对象:<Person name="zhangsan"/>
• 统一生成方式:descriptors="..."
属性
3. 与解释链的关系
• 生成链(正向):元→类→对象
• 解释链(逆向):对象→类→元
• 两者构成完整认知闭环
• 示例对比:
<!-- 生成链 -->
<thing name="Person"/> → <Person name="zhangsan"/>
<!-- 解释链 -->
<Person name="zhangsan" descriptors="xworker.Person"/>
动态模型解释链
1. 事物通过类解释
• 对象模型通过描述者(类)解释
• 示例XML:
<Person name="zhangsan" descriptors="xworker.Person"/>
• 解释过程:通过descriptors属性找到类模型
2. 类的类是元模型
• 类模型通过元模型解释
• 示例XML:
<thing name="Person" descriptors="xworker.lang.MetaDescriptor3"/>
• 元模型定义类的结构和行为
3. 元模型自解释
• 元模型是自己的描述者
• 示例XML:
<thing name="thing" descriptors="xworker.lang.MetaDescriptor3"/>
• 形成解释闭环,确保系统完备性
动态模型执行链
1. 方法即模型
• 对象行为也是模型节点
• 示例XML:
<Person name="zhangsan">
<actions>
<GroovyAction name="sayHello"
code="println 'Hello World'"/>
</actions>
</Person>
• GroovyAction本身也是一个模型
2. 递归到元语言
• 执行链递归过程:
GroovyAction →
GroovyAction.run →
JavaAction →
Java字节码
• 终止条件:遇到元语言实现(如JavaAction)
• 示例递归路径:
<GroovyAction descriptors="xworker.groovy.GroovyAction"/>
→ <thing name="GroovyAction" descriptors="xworker.lang.MetaDescriptor3">
<JavaAction name="run"/>
→ <thing name="JavaAction" descriptors="xworker.lang.MetaDescriptor3"/>
3. 解释执行机制
• 执行流程:
- 查找要执行的模型行为
- 将模型转化为动作(Action)
- 执行动作的run方法
- 递归执行直到元语言层
• 动作上下文栈维护执行状态
• 示例执行上下文:
ActionContext {
stack: [
{model: GroovyAction, vars: {...}},
{model: JavaAction, vars: {...}}
]
}
动态系统特性
1. 模型的任意性
• 模型定义、解释和执行具有完全自由
• 示例XML:
<thing name="xdfdfdwwwx"/>
<person name="zhangsan" descriptor="xdfdfdwwwx"/>
• 行为实现同样可任意指定:
<Person name="zhangsan">
<actions>
<xdfdfdwwwx name="sayHello"/>
</actions>
</Person>
2. 维特根斯坦语言游戏说
• 语言意义在实践(游戏)中确立
• 示例:"白马非马"命题
<WhiteHorse descriptors="NonHorse"/>
• 动态模型通过以下机制实现语言游戏:
- 运行时绑定描述者(descriptors)
- 动态修改模型结构
- 上下文相关的行为解释
3. 动态生成/解释/执行
• 系统保障机制:
元模型 → 保证生成链/解释链完备性
元语言 → 保证执行链可终止
• 动态修改示例:
// 运行时修改描述者
model.set("descriptors", "new.Descriptor");
// 动态添加行为
model.add(new Thing("actions/SayHi")
.set("descriptors", "xworker.groovy.GroovyAction")
.set("code", "println 'Hi'"));
动态模型中的面向对象
1. 对象表示
• XML节点即为对象实例
<Person name="zhangsan" age="40">
<actions>
<GroovyAction name="helloWorld"
code="println 'hello world'"/>
</actions>
</Person>
2. 属性与子节点
• 节点属性作为对象属性
• 子节点作为复合属性
<!-- 属性示例 -->
name="zhangsan" age="40"
<!-- 子节点示例 -->
<Child name="Xiaoming" age="10"/>
3. 行为定义
• actions节点下定义行为
• 行为本身也是模型
<actions>
<GroovyAction name="sayHello"
code="println self.name + ' say hello'"/>
</actions>
4. 描述者(类)
• 通过descriptors属性指定
• 类模型定义结构和行为
<!-- 对象实例 -->
<Person name="zhangsan"
descriptors="xworker.example.Person"/>
<!-- 类定义 -->
<thing name="Person">
<actions>
<GroovyAction name="sayHello"/>
</actions>
<attribute name="name"/>
<attribute name="age"/>
</thing>
模型执行链
1. 转化为动作
• 任何模型都可转化为Action执行
<!-- 执行流程示例 -->
<Person name="zhangsan">
<actions>
<GroovyAction name="sayHello"
code="println 'hello'"/>
</actions>
</Person>
// 执行逻辑:
1. 查找sayHello行为
2. 将GroovyAction转化为可执行动作
2. 递归执行run
• 执行链递归过程:
执行Person.sayHello
→ 执行GroovyAction.run
→ 执行JavaAction.run (元语言层)
• 递归调用栈示意图:
ActionContext栈:
+-------------------+
| JavaAction.run | ← 元语言层
+-------------------+
| GroovyAction.run |
+-------------------+
| Person.sayHello |
+-------------------+
3. 终止条件
• 元语言保障递归终止:
<!-- 元语言层示例 -->
<thing name="JavaAction">
<actions>
<JavaAction name="run"
className="xworker.lang.actions.JavaActionExecutor"/>
</actions>
</thing>
• 终止原则:
- 遇到引擎原生支持的Action
- 检测到循环引用(使用顺序原则)
- 显式return/break指令
动态模型应用
1. 数字化编程
• 基础模型封装底层功能
<!-- Java类库封装示例 -->
<thing name="HttpClient" descriptors="xworker.lang.MetaDescriptor3">
<actions>
<JavaAction name="get"
className="xworker.net.http.HttpClientActions"/>
</actions>
</thing>
• 模型即数据,可动态修改执行
2. 高层模型
• 模型分层执行架构:
Person.sayHello (业务层)
→ GroovyAction.run (脚本层)
→ JavaAction.run (元语言层)
• 组合现有模型创建新功能
<!-- 编辑器配置模型示例 -->
<EditorConfig descriptors="xworker.editor.EditorTemplate">
<toolbars>...</toolbars>
<content>...</content>
</EditorConfig>
3. AI集成
• 元模型新增AI属性:
<!-- AI属性示例 -->
ai_needGenerate="true"
ai_promptRequirement="生成SWT按钮事件处理代码"
ai_promptSystem="你是一个Java专家"
• AI交互方法对应关系:
XML属性 | 对应方法 |
---|---|
ai_needGenerate | ai_isNeedGenerate() |
ai_promptRequirement | ai_getPromptRequirement() |
ai_promptSystem | ai_getPromptSystem() |
元模型核心特性
1. 编辑原理
• 类实例化对象 → 类作为对象需要元类编辑
<!-- 编辑迭代过程 -->
1. 对象编辑: 使用类生成表单
2. 类编辑: 使用元类生成表单
3. 元类编辑: 使用元模型生成表单
4. 终止条件: 元模型可编辑自身
2. 自解释能力
• 元模型作为自己的类:
<thing name="thing" descriptors="_self">
<attribute name="name"/>
<thing name="attribute">
<attribute name="name"/>
</thing>
<thing name="thing" extends="_root"/>
</thing>
• 解释链完备性保障:任何模型最终可通过元模型解释
3. 生成任意类
• 通过命名生成类模型:
<!-- 类生成示例 -->
<thing name="Person" descriptors="xworker.lang.MetaDescriptor3">
<attribute name="name"/>
<actions>
<GroovyAction name="sayHello"/>
</actions>
</thing>
• 生成方式统一性:类生成与对象生成采用相同命名机制
元模型发现过程
1. XML结构迭代
• 原始XML示例:
<Person name="Zhangsan" age="40">
<Child name="Xiaoming" age="10"/>
</Person>
• 结构定义迭代:
<!-- 第一层结构 -->
<thing name="Person">
<attribute name="name"/>
<attribute name="age"/>
<thing name="Child">
<attribute name="name"/>
<attribute name="age"/>
</thing>
</thing>
<!-- 第二层结构 -->
<thing name="thing">
<attribute name="name"/>
<thing name="attribute">
<attribute name="name"/>
</thing>
<thing name="thing">
<attribute name="name"/>
<thing name="attribute">
<attribute name="name"/>
</thing>
</thing>
</thing>
2. 无限层结构问题
• 无限递归的XML结构:
<thing name="thing">
<attribute name="name"/>
<thing name="attribute">
<attribute name="name"/>
</thing>
<thing name="thing">
<attribute name="name"/>
<thing name="attribute">
<attribute name="name"/>
</thing>
<thing name="thing">
...无限递归...
</thing>
</thing>
</thing>
3. 继承解决方案
• 引入extends属性实现逻辑无限:
<thing name="thing">
<attribute name="name"/>
<attribute name="extends"/>
<thing name="attribute">
<attribute name="name"/>
</thing>
<thing name="thing" extends="_root"/>
</thing>
• 关键机制:
- extends="_root"表示继承根节点
- 逻辑上实现无限层结构
- 实际存储只需有限节点
元模型哲学意义
1. 与"道"的关系
• 老子说:"无名世界之始,有名万物之母"
<!-- 元模型对应 -->
元模型 = "一" (无名之始)
类模型 = "有名" (万物之母)
对象 = "万物"
• "道生一,一生二,二生三,三生万物"的实现:
<thing name="thing" descriptors="_self">
<!-- 道生一 -->
<!-- 通过命名生成类模型 -->
<thing name="Person" descriptors="xworker.lang.MetaDescriptor3"/>
<!-- 一生万物 -->
<Person name="Zhangsan"/>
</thing>
2. 与"上帝"属性的相似性
• 创造者属性:
<!-- 任何对象都直接/间接通过元模型生成 -->
<thing name="thing" descriptors="_self">
<!-- 元模型生成类 -->
<thing name="Animal"/>
<!-- 类生成对象 -->
<Animal name="Cat"/>
</thing>
• 自解释属性:
- 元模型作为自己的类 (descriptors="_self")
- 既是父又是子的自包含结构
- 通过extends="_root"实现逻辑无限
XWorker简介
1. 动态模型实例
• XWorker是动态模型的具体实现
• 完整实现了三大链条:
- 模型生成链
- 模型解释链
- 模型执行链
<!-- XWorker模型示例 -->
<World name="MyWorld">
<Person name="Zhangsan" descriptors="xworker.example.Person"/>
</World>
2. Java实现
• 核心引擎:X-Meta
• 执行机制:
- 递归执行到Java层终止
- ActionContext维护执行状态
<!-- JavaAction示例 -->
<JavaAction name="run"
className="xworker.example.MyExecutor"
methodName="execute"/>
3. 封装库
• 丰富的Java类库封装:
- GUI: SWT, JavaFX
- 网络: Netty, Jetty, OkHttp
- 多媒体: FFmpeg, LibGDX
- 脚本: Groovy
<!-- Web服务示例 -->
<HttpServer port="8080">
<Handler path="/api" descriptors="xworker.http.MyApiHandler"/>
</HttpServer>
4. AI训练
• 理想AI训练语料
• 优势特性:
- 模型即数据,易于解析
- 独立模型单元,便于组合
- 动态修改能力
<!-- AI集成示例 -->
<Thing name="AIAssistant"
ai_needGenerate="true"
ai_promptRequirement="创建一个聊天机器人"/>
元模型AI集成能力
新增属性
<!-- AI控制属性 -->
<attribute name="ai_needGenerate"/> <!-- 标记需要AI生成 -->
<attribute name="ai_promptContainsVars"/> <!-- 是否包含变量描述 -->
<attribute name="ai_promptSystem"/> <!-- 角色设定提示词 -->
<attribute name="ai_promptRequirement"/> <!-- 用户需求描述 -->
<attribute name="ai_getPromptFormat"/> <!-- 输出格式要求 -->
新增方法
<!-- AI交互方法 -->
<actions>
<JavaAction name="ai_isNeedGenerate"/> <!-- 生成需求检查 -->
<JavaAction name="ai_generate"/> <!-- 内容生成入口 -->
<JavaAction name="ai_onResult"/> <!-- 结果处理 -->
<JavaAction name="ai_execute"/> <!-- 执行触发 -->
<JavaAction name="ai_getChatService"/> <!-- 服务获取 -->
<JavaAction name="ai_getPromptSystem"/>
<JavaAction name="ai_getPromptFormat"/>
<JavaAction name="ai_getPromptRequirement"/>
<JavaAction name="ai_getContent"/>
<JavaAction name="ai_getPrompt"/> <!-- 完整提示词组装 -->
</actions>
执行流程示例
<!-- 典型AI集成模型 -->
<Thing name="AIAssistant"
ai_needGenerate="true"
ai_promptSystem="你是一个Java专家"
ai_promptRequirement="创建SWT对话框"
ai_promptFormat="XML格式">
<actions>
<JavaAction name="ai_onResult"
code="this.set('code', content)"/>
</actions>
</Thing>
动态模型与XWorker核心价值总结
动态模型三大链条
- 生成链:元模型→类模型→对象模型→世界万物
- 解释链:对象→类→元模型→自解释闭环
- 执行链:方法调用→模型递归→元语言终止
<!-- 三大链条XML示例 -->
<MetaModel name="thing">
<ClassModel name="Person"/>
<ObjectModel name="Zhangsan"/>
</MetaModel>
XWorker核心价值
- 动态编程范式:运行时模型修改与执行
- Java生态集成:封装100+主流Java库
- AI友好架构:元模型原生AI支持
- 认知映射:模型即数据的编程哲学
<!-- XWorker AI集成示例 -->
<Thing name="AIIntegration"
ai_needGenerate="true"
ai_promptSystem="Java专家"
ai_promptRequirement="创建SWT对话框"/>
未来演进方向
- 增强模型可视化编辑能力
- 深化AI辅助生成功能
- 扩展多语言运行时支持
- 优化递归执行性能