|
昨天群里面讨论的蛮多,我也关注并看了下。
xlua 描述了一下几个优点(我觉得比较有特色的)
1)C# 代码的“HotFix” - // 要fix的C#类
- [Hotfix]
- public class HotfixCalc
- {
- public int Add(int a, int b)
- {
- return a - b;
- }
- public Vector3 Add(Vector3 a, Vector3 b)
- {
- return a - b;
- }
- }
复制代码 使用这种方式“HotFix”替换C#中的代码,支持用lua函数替换C#的构造函数,函数,属性,事件的替换。
很明显看出需要额外标记C#代码,这可能需要提前规划可能需要热更的C#代码,或者将尽可能多的C#代码打上标记(肯定会有额外性能开销)。这对实际工程的项目肯定会有影响,感觉也有些奇怪,还需要xlua的作者或者实际使用过的人详解一下。
2)编辑器下无需代码生成(tolua, slua 均需要手动点击菜单)
xlua 在编辑器模式下使用TypeBuilder,IlEmit 动态生成接口的C#代码,避免了每次新注册或者改变导入类时,都需要生成代码并加载。在实际项目中,确实经常由于未运行代码生成菜单,导致一些编译或运行错误。如果项目逻辑主要使用lua开发,并不设计到频繁的互操作的话,此问题有所缓解。
3)“No GC”的优化。
这一点也是tolua,slua优化的重点。
"设计了一个全新的复杂值类型支持方案,该方案支持的类型更多(只要struct的字段都是值类型即可),包括用户自定义的struct(别的方案都不支持)"
做到这一点,需要分析C#类型信息,看的出来xlua还是下了些功夫的,但是tolua, slua 均提供了常用的值类型例如Vector3的lua实现,用户在C#层自定义值类型需要导出到lua层使用,这种情况其实并不多见(甚至也不该这么做)。
我在工作中实际使用过静态语言,C/C++/Java/C#, 也使用过动态语言Python/Js/Lua。Lua/Js 相对 C/C++ 确实有明显的效率提高。但是和2000年之后的静态语言“C#/Scala/Go/Swift ” 相比却不尽然。TypeScript 的出现并流行,说明类型系统在实际复杂的工程实施中是非常有益处的。
其实我们想要的是在Unity下使用C#高效的开发,并可以热更新。
这里就不得不推荐我写的Bridge.lua编译器了。
yanghuan/bridge.lua
Bridge.lua可以将C#代码编译成Lua,生成的对应代码依然拥有良好的可读性,其已经在项目中得到验证并使用,欢迎需要的尝试并反馈。 |
|