Skip to content
YANG Huan edited this page Jun 4, 2018 · 11 revisions

1.Which C # syntax is not supported?

In principle all C # syntax will be supported, currently implemented to C # 7.0, only the following features are temporarily not implemented.

  • async & await
  • Most pointer operations
  • ref returns(C# 7.0)

If you find an error when you use it, you are welcome to pass Issues feedback.

2.Support which. NET class library?

The concrete has been realized see Coresystem.lua, it may be possible to add some commonly used, but not to increase the number of, these are basically enough, already contains the common collection classes and LINQ, The Coresystem.lua library is implemented against the source code of the. NET class library, ensuring consistency with the. NET class Library interface.

3.如果使用到了除基础类库以外的怎么办?

默认编译时,会自动引用基础类库中的所有程序集,除此之外的dll需要通过命令行参数'-l'进行加入,需使用完整路径。这样编译会通过,但是需要自行把这些库导入到lua环境,并保证接口调用和命名规则。

4.是否支持反射?

转换时仅保存了最为核心的元数据信息,由于lua是动态语言天然支持很多动态的操作,所以通过字符串创建类,调用方法等也是可以的。为保证C#的接口要求,也已经实现部分反射的接口,但是需要依赖复杂元数据信息的无法支持,例如获取指定名称与参数类型获取MethodInfo对象。可以使用C# dynamic关键字简化相关代码。

C#

public void TestDynamic(object obj) {
    dynamic a = obj;
    int name = a.Name;
    int age = a.Age;
    int money = a.Got();
}

lua

local testDynamic
testDynamic = function (this, obj) 
    local a = obj
    local name = a.Name
    local age = a.Age
    local money = a:Got()
end

5.Attribute支持

因为仅保存最为核心元数据信息的原则,默认编译时通过Attribute附加的元数据信息不会进行存储。可以使用命令行参数“-a”进行开启。

6.枚举没有导出?

枚举使用时会直接转换成常数数值处理,默认就不需要保存其字面量相关的信息, 当需要使用字符信息时,会进行导出,例如使用 typeof、ToString、 Enum.TryPase等操作。

7.为什么不再使用Bridge.lua?

Bridge.lua是在Bridge.NET基础上修改扩展而来的,Bridge.NET使用的是NRefactory来解析语法树,这个库已经不再维护,已经被Roslyn所替代,使用Roslyn才能更好的支持C# 6.0以及未来的语法标准(Bridge.NET在17版本有计划切换至Roslyn),且Bridge.NET使用的是字符串拼接生成代码的方式,而CSharp.lua是先输出lua AST,再输出lua源码,这种实现方式的差异导致CSharp.lua在以下几点拥有巨大的优势,代码简洁以及可读性、编译速度、Bug修正与维护、新语法标准的支持等,这对实现一个工业级的编译器至关重要。

8. 是否可在非windows环境下运行?

运行环境是.NET Core,可跨平台使用。

9.Unity3D的Lua热更新解决方案的支持

按照问题3的答复自行处理,使用ulua, slua, tolua, xlua 等等的,均需要自行完成适配工作,由于开发此工具时,项目已经近乎完成,也已经支持服务器端代码导出为lua提供给客户端使用,就没有再进行支持Unity环境的开发。

Clone this wiki locally