当前位置:网站首页>【ZeloEngine】反射系统填坑小结
【ZeloEngine】反射系统填坑小结
2022-07-25 15:59:00 【zoloypzuo】
【ZeloEngine】反射系统填坑小结
// 1. vs qsmoc
// 2. 自我怀疑掣肘,专家权威误导
总结一下反射系统,下称ZHT
ZHT架构/数据流图
今天是入行两周年,本想写个入行小结,想想还是踏实点把坑填完,写个DevLog
本文接续之前一篇文章的原理描述,主要讲讲开发后的反思
另外说明,ZHT当然是下班时间开发的,所以进度会慢很多,好在能每天坚持写一点,代码也就攒起来了
【ZeloEngine】重写反射和对象系统_zoloypzuo的博客-CSDN博客
Demo
Demo,生成代码位于__ZHT/
zoloypzuo/cyclone: 《游戏物理引擎开发》源码魔改
PropertySheet,类似Unity的MonoBehavior,自动在Inspector上画界面编辑数据

特性列表
- 对标Swig的自动Lua脚本绑定
- 对标Moc,UBT的元信息标记
- RTTR反射,WIP,快了,现在已经够用了
语法特性
支持
- 全局函数
- 全局变量
- namespace
- struct/class // 统一为class
a. 成员变量
b. 成员函数 - enum
- 嵌套的clas和enum
不支持
- C++模板
- property // 没必要
meta.cs不支持 // 不能打元信息
- 全局函数
- 全局变量
特色:meta.cs
理解moc:是一种标记语言
moc的缺点
- moc标记,都是宏,缺乏IDE支持,重构,报错等
- moc标记,淹没在大量moc编译器不关心的代码中
- 整个项目里有哪些标记?
- 不支持给第三方库打moc标记
meta.cs解决了以上问题
- 标记是C#语法,可以报错
- 标记与源码分离,容易统计分析和定位
- 支持第三方库
UBT vs ZHT
应用
- PropertySheet,配置表编辑器,还没开头,思路已经有了
- 替代Ver1的手工Lua脚本绑定,写脚本胶水从此无摩擦
- C++反射,可以走RTTR反射来调用了,更加动态了
- 对象模型中的其他子模块,GC,序列化,都依赖于反射系统
【里程碑】终于有一套完整的Lua脚本开发框架了!
IDE,debugger,log,binding-generator,hot-reload,lua game framework,etc
懒人模式
对标C#,最好不要写标记,正常写C++,然后就自带反射和导出Lua
这是目前努力的方向
Lua脚本绑定
对标Swig
反思
- 基本思路清楚,快速搭建出第一个能跑的原型,只花了一周
- 实际填坑,实现规格(spec)以及自动化到铺量可用,花了一个月,细节很多
- 反复问自己几个问题
- 是什么?解决了什么问题?
- 重点难点是什么?
- 竞品方案对比
ZHT是什么
- 解析C++代码结构到反射信息(中间表示),然后再生成多种目标代码
- 使用C#为C++标记上元信息,为ZHT和游戏/编辑器运行时提供元信息
重点是什么
- 理解源语言,也就是C++编译器
- 理解目标语言
- 代码生成是一种优化方法/自动化方法,要切实地自动化
对于反射系统而言,我们在乎声明,结构,类型,不在乎函数体里的计算代码
这块把重点放在了C++上,增进对C++编译器的理解对我目前的作用很大
边栏推荐
- 没错,请求DNS服务器还可以使用UDP协议
- MySQL tutorial 67- filter duplicate data using distinct
- High score technical document sharing of ink Sky Wheel - Database Security (48 in total)
- MySQL table write lock
- 解决Win10磁盘占用100%
- Upgrade esxi6.7.0 to 7.0u3f (updated on July 12, 2022)
- leetcode:6127. 优质数对的数目【位运算找规律 + 两数之和大于等于k + 二分】
- MySQL隐式锁
- 百奥赛图与LiberoThera共同开发全人GPCR抗体药物取得里程碑式进展
- 食品安全丨无处不在的冷冻食品,你真的了解吗?
猜你喜欢

产品动态丨Android 13 高效适配全新升级

【莎士比亚:保持做人的乐趣】

Analysis and solution of data and clock mismatch delay in SPI transmission

电阻电路的等效变化(Ⅱ)

今天睡眠质量记录84分

The second revolution of reporting tools

I interviewed 8 companies and got 5 offers in a week. Share my experience

tkinter模块高级操作(一)—— 透明按钮、透明文本框、自定义按钮及自定义文本框
![Beyond compare 4 realizes class file comparison [latest]](/img/ab/4babd7d4ee4ea132a6039858dd6451.png)
Beyond compare 4 realizes class file comparison [latest]

General test case writing specification
随机推荐
Basic usage of MFC thread afxbeginthread, passing multiple parameters
MySQL教程71-WHERE 条件查询数据
Wavelet transform --dwt2 and wavedec2
Upgrade esxi6.7.0 to 7.0u3f (updated on July 12, 2022)
MATLAB optimization tool manopt installation
权限管理-删除菜单(递归)
JWT diagram
The second revolution of reporting tools
MySQL pessimistic lock
今天睡眠质量记录84分
Golang review summary
How matlab saves all the data after running
MySQL教程65-MySQL操作表中数据
MySQL explicit lock
mysql 表读锁
Visual studio 2022 view class diagram
Recursive menu query (recursion: check yourself)
Zhaoqi Kechuang high-level innovation and Entrepreneurship Talent Service Platform at home and abroad, mass entrepreneurship and innovation achievement transformation platform
ServletConfig 类和ServletContext 类
July 25th, 2022 Daily: Microsoft proposed CodeT: a new SOTA for code generation, with 20 points of performance improvement