8

众所周知,C++ 模板是图灵完备的CSS 是图灵完备的(!),并且C# 重载解决方案是 NP-hard(即使没有泛型)。

但是 C# 4.0(具有协/逆变、泛型等)编译时图灵是否完整

4

1 回答 1

2

与 C++ 中的模板不同,C#(和其他 .net 语言)中的泛型是运行时生成的功能。编译器会进行一些检查以验证所使用的类型,但实际替换发生在运行时。如果我没记错的话,Co 和逆变也是如此,甚至预处理器指令也是如此。很多 CLR 魔法。

(在实现级别,主要区别在于 C# 泛型类型替换是在运行时执行的,因此为实例化对象保留了泛型类型信息)

见 MSDN

http://msdn.microsoft.com/en-us/library/c6cyy67b(v=vs.110).aspx

更新: CLR 通过存储在与已编译程序集关联的元数据中的信息进行预执行类型检查(Vis-à-vis Jit Compliation),它作为其众多服务之一执行此操作,(ShuggyCoUk 对此问题的回答详细解释了它) (其他包括内存管理和异常处理)。因此,我会推断编译器将状态理解为进程,并将状态理解为机器内部状态(TC,部分意味着能够参考先前的数据(符号)来查看数据(符号),有条件地和评估)(我犹豫要说明TC的确切定义因为我自己不确定我是否完全掌握了它,所以请随时填写空白并在适用时纠正我)所以我会有点恐惧地说,是的,是的。

于 2012-09-20T21:38:13.580 回答