c#-4.0 - 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++ 中的模板不同,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/

相关文章:

stack - 基于堆栈的语言的图灵完备性证明

context-free-grammar - 是 { w | w <> w^R } 在字母表 {0,1} 上是一种上下文无关的语言?

regular-language - a*b* 是常规的吗?

programming-languages - 像 Coq 这样的非图灵完备语言的实际限制是什么?

c# - 递归代替多个嵌套的 for 循环?

compiler-construction - 可编译为无堆运行时的语言类

binary - Brainfuck 与 1 位存储单元?

c# - 如何在 C# 中正确使用 lambda 表达式的参数?

c# - Ienumerable concat 不适用于每个循环

asp.net - 在我的网页中避免 try/catch hell