有一个众所周知的事实:C++ templates are turing-complete , CSS is turing-complete (!)并且 C# overload resolution is NP-hard (即使没有泛型)。
但是 C# 4.0(具有协变/逆变、泛型等)编译时图灵完备吗?
最佳答案
与 C++ 中的模板不同,C#(和其他 .net 语言)中的泛型是运行时生成的功能。编译器确实会进行一些检查来验证类型的使用,但是实际的替换发生在运行时。如果我没记错的话,Co 和逆变也是如此,甚至 preprocessor directives 也是如此。 。很多 CLR 魔法。
(At the implementation level, the primary difference is that C# generic type substitutions are performed at runtime and generic type information is thereby preserved for instantiated objects)
参见 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 的确切定义,因为我自己不确定我是否完全掌握了它,所以请随意填写空白并在适用时纠正我)所以我会说有点惶恐,是的,是的,可能是这样。
关于c#-4.0 - C# 4.0 编译时图灵完整吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11984490/