没有。至少,如果您找到一种这样的语言,那么这将是对 Church-Turing Thesis 的证伪。
然而,存在一些图灵完备的语言,但在其中编写某些程序会非常麻烦,例如FORTRAN中的字符串处理、COBOL中的数值编程、sed中的整数算术以及x86汇编中的几乎所有内容。
当然还有brainfuck。
是的,你可以有一种语言,它不允许你直接操作硬件。例如,使用 Bourne shell 编写操作系统会很困难。但这些限制比你想象的要少。操作系统已经用 Standard ML、Scheme 甚至 Haskell 编写过了!
如果您在谈论语用学,那么当然...您可以想象一种没有读写文件能力的编程语言(例如,一个可以计算任何整数函数但仅限于此的语言)... 仅仅因为一种语言不能操作我的烤面包机并不意味着它不是图灵完备的,但这确实意味着它有一些事情做不了,所以我不确定这种区别有多么“重要”或有用。
for(var i=0;i<10;i++){
mov("ax",i);
int(0x21);
}
并且将其编译成机器码也不应该很难。
在现代世界中,你不仅选择语言,还选择平台、标准和非标准库、文献、社区、支持等。所有这些都影响你完成某些事情的能力,而它们一起可能是或可能不是对于你的任务“足够完整”。但如果我不能将C++代码编译为Java小程序,这并不意味着C++语言不完整。这只是缺少将C++代码转换为JVM可加载内容的编译器。
如果你想要,你可以设计一种具有“OpenFile、PingNetworkHost、DownloadMpeg4FileOverHttpsAndPlayBackwards”等语言特性的语言。但如果语言没有它们,它们仍然可以通过其他语言特性和环境支持实现,因此缺乏这些特性并不会使语言不完整。如果你的语言类似于C,但没有goto运算符、循环运算符(for、while、do while)和函数,则无法编写循环程序,也没有环境和库可以帮助你。
当谈到编程语言时,通常认为这些语言运行在一些非常简单的机器上。因此,任何从文件中读取或访问网络的概念通常不会考虑到语言的能力。
有不同类别的编程语言经常用于可计算性理论(每种语言都有无数的修改版本)。
有限状态自动机。这是最简单的机器类别,它们可以识别最小的语言类别,这恰好是正则表达式可以识别的确切语言,例如:字符串是否以两个“a”开头并以“d”结尾。它们无法用于识别字符串是否包含一个平衡的括号集。我认为,除了图灵(或正则表达式、下推自动机)之外的完备性定义对于语言并不相关。但是这种完备性仅针对数字或符号计算设施。
你提到的事情在我看来更多地是运行时和环境的功能,而不是语言本身。这是一个重要的区别,形式上的完备性概念通常只适用于语言本身。