为了让大家更好的了解MakeEditor,所以先画个饼.
MakeEditorRun 插件框架,目标是制作跨桌面的各种编辑工具,其构造如下:
插件服务 | 负责管理所有插件,通过接口提供各种服务 如资源服务,输入服务,图像服务,网络服务等 插件通过接口或注册的事件触发逻辑处理 支持插件的热插拔 | |
资源服务 | 资源分3个域:公共域,私有域,开放域 公共域:所有插件都可以在里面读写删资源 私有域:插件只能读写删自己的资源 开放域:插件可以读写删自己的资源,同时能读取其他插件的资源 | 其实域就是数据库,具体表现形式是加密散文件,主要是为了保护插件的数据 |
输入服务 | 给插件提供鼠标键盘等事件 | |
图像服务 | 提供渲染图片,动画,绘制曲线等UI服务skia负责2d相关,silk.net负责3d相关 | skiasharp,silk.net |
网络服务 | 主要是http,ws服务,然后插件注册对应的协议响应,还有上传下载等 | |
声音服务 | silk.net里有对应功能 | |
Log服务 | 提供同步或异步的log打印 | |
脚本虚拟机 | 基于mydog语言的vm,用于执行插件的逻辑 | Mydog是基于属性集和寄存器的新一代脚本语言 |
插件编辑 基于MER的插件,用于辅助插件开发
UI控件编辑 | 可视化的控件编辑,主要是各种拉图各种属性填写 |
插件配置 | 编写插件的相关配置插件 |
插件测试 基于MER的插件,用于辅助插件开发
常规测试 | 插件加载/卸载/更新 |
事件驱动 | 可模拟各种事件进行测试,可录制鼠标键盘事件 |
数据驱动 | 可引入各种虚拟数据进行插件的测试 |
UI编辑器,脚本编辑器,各种编辑器...
这些都是基于ME开发出来的产品,UI编辑器就是可视化的拖拉控件,设置属性和事件.脚本编辑器是为mydog语言开发的IDE.不单单把脚本翻译成字节码,还可以翻译成c#,js等native code,嵌入到项目里使用.至于直接生成机器码?长期都没这个打算.
上述产品生成的ui文件.ui,脚本字节码.dog,调试文件.dogbrak,这些都是加载入内存使用的,所以跨端跨平台.
至于3d的,因为silk.net的加入,所以可实现3d场景编辑器等
MakeEditorCross 和MER的区别是没有插件机制,跨三端.这个放到最后,其实现有很多方式:基于maui实现,原生实现,基于某些平台实现(比如u3d,laya,cocoscreater)等.最终方案,要等其他完成再考虑,反正方向没错就好了.
最后的篇幅,隆重介绍一下mydog语言的vm.
在实际开发中,所有app的设计都可以基于这种模式:
实体->组件->属性和逻辑
实体由组件组成,组件数据就是一个属性集,组件逻辑可以是机器码,也可以是脚本字节码.基于这么个大前提而设计的vm.
mydog是解释型,和lua不一样的是,mydog基于虚拟的属性集和虚拟的寄存器,并不模拟cpu运行.
mydog不支持外部的数据结构.所有数据都在mydog里管理,由属性集描述,所以唯一需要gc的就是属性集,从而性能上比lua优先.(jit除外)
mydog使用C++开发
mydog也支持脚本->源码的导出,这种AOT要做成自动嵌入的,我称之为固化
jit的入侵性太强,前端就不考虑了.服务端只要解释脚本就够用了,维护重启时,将需要高性能的固化即可,如果不想影响在线用户,服务器框架支持冷更(重启服务器,但用户无感)也行啊.所以长期没有jit的打算.