【发布时间】:2012-08-12 15:28:27
【问题描述】:
众所周知,C++ templates are turing-complete、CSS is turing-complete (!) 和 C# overload resolution is NP-hard(即使没有泛型)。
但是 C# 4.0(具有协/逆变、泛型等)编译时图灵完备吗?
【问题讨论】:
标签: c#-4.0 computation-theory turing-complete
众所周知,C++ templates are turing-complete、CSS is turing-complete (!) 和 C# overload resolution is NP-hard(即使没有泛型)。
但是 C# 4.0(具有协/逆变、泛型等)编译时图灵完备吗?
【问题讨论】:
标签: c#-4.0 computation-theory turing-complete
与 C++ 中的模板不同,C#(和其他 .net 语言)中的泛型是运行时生成的功能。编译器会进行一些检查以验证使用的类型,但实际替换发生在运行时。如果我没记错以及preprocessor directives,Co 和逆变也是如此。很多 CLR 魔法。
(在实现层面,主要区别在于 C# 泛型类型替换在运行时执行,泛型类型 从而为实例化对象保留信息)
参见 MSDN
http://msdn.microsoft.com/en-us/library/c6cyy67b(v=vs.110).aspx
更新: CLR 通过存储在与已编译程序集关联的元数据中的信息进行预执行类型检查 (Vis-à-vis Jit Compliation),它作为其众多服务之一执行此操作 (ShuggyCoUk answer on this question explains it in detail)(其他包括内存管理和异常处理)。因此,我会推断编译器将状态理解为进程,并将状态理解为机器内部状态(TC,部分意味着能够参考以前的数据(符号)来查看数据(符号),有条件地评估)(我犹豫是否要说明TC 的确切定义,因为我自己不确定我是否完全掌握了它,所以请随时填写空白并在适用时纠正我)所以我会说有点忐忑,是的,是的,可以。
【讨论】: