Unity 热更新 之 如何使用 AST 转换 C# -> Lua

2020-02-24 12:15:52 +08:00
 unn

本文转自 Unity Connect 博主 郡墙

本篇主要论述 如何将 C# 代码自动转换为 Lua 代码的解决方案

方案流程

  1. 利用 Mono ceil 库分析程序集中的类、字段、方法签名,然后将其翻译成对应的 Lua 模块所模拟的类型结构

  2. 通过 ILSpy 工具分析 IL 指令集,重建由语句表达式组成的 AST (抽象语法树),并翻译成对应的 Lua 方法体

  3. 把 Lua 类型与 Lua 方法体合并成完整的 Lua 代码

按照同样的原理可以翻译成其他的语言 其中 Mono ceil 负责从程序集中提取类、字段、方法; ILSpy (基于 Mono ceil 开发的工具) 则负责分析方法体指令序列。 架构设想

翻译流程思路分享

  1. 类型结构翻译,通过 Mono.ceil 分析程序集中包含的所有类,以及类中定义的字段和方法,收集到这些信息后,就可以生成 Lua 对应的类型和结构及方法定义(无方法体)

  2. 方法体翻译,利用 ILSpy 将方法体中的 IL 指令序列重建成 AST,翻译工具将 AST 转换成 Lua 语句和表达式,形成 Lua 方法体

  3. 整合 1,2 步骤

因为源码在编译后,将会对字符串、常量、枚举、计算等进行一系列优化,比如删除无效的无用代码,预处理各种字符串、减少运行时开销等 。对翻译后的 Lua 代码逻辑也是编译器优化后的。 翻译细节分析 类关系

类成员

方法体

原文链接:https://connect.unity.com/p/unity-re-geng-xin-zhi-ru-he-shi-yong-astzhuan-huan-c-lua?app=true

欢迎戳上方原文链接,下载 Unity 官方技术社区 app,在线技术答疑,发现更多资源干货!

2395 次点击
所在节点    UNITY
1 条回复
billzhuang
2020-02-24 15:24:36 +08:00
nice

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/647052

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX