您可以不执行就指定一种编程语言吗?


11

从理论上讲,可以指定一种不存在任何实现的编程语言吗?编程语言是定义函数的一种方式。一种实现是指一种方法,该方法在给定输入上以该语言执行给定程序,该输入对应于该输入上的程序的功能输出。

这种语言的最低要求是什么?


3
什么是语言的“实现”?
拉斐尔

@Raphael:是您将“编程语言”更改为“语言”。在进行编辑之前,很明显一种语言的实现意味着什么。
伊藤刚(Tsuyoshi Ito)

@TsuyoshiIto:不完全;我只修改了标题以匹配该问题,该问题在cstheory.SE中进行了更改。我把它改回来了,但是仍然不清楚那是什么意思。编译器?口译员?无论如何,在这里迁移了将近一年之久的问题,显然是由一个从未回访过该问题的用户提出的,这是最不明智的选择。
拉斐尔

@Raphael:问“什么是语言的实现?” 删除所有线索之后,我根本无法理解。但是我同意这个问题从一开始就不清楚。
伊藤刚(Tsuyoshi Ito)

我认为您对“编程语言”的假定定义是错误的。至少应通过将“功能”替换为“可计算的功能”来进行修改。否则,不清楚为什么您会选择将该语言称为“编程语言”。修改后,该问题将变得毫无意义,因为没有这样的“无法实现的编程语言”。
Uday Reddy 2012年

Answers:


7

通常,实现一种编程语言至少是为一种解释器提供一种图灵完备的语言(或该语言的编译器)。

使用此“定义”,我们可以指定如下编程语言:

  • 只有一个可能的程序是HALT;

  • 规范HALT:它是解决暂停问题的功能。

实现这种编程语言需要解决实现中的停顿问题。(这是不可能的,因为我们的实现不应比图灵机更强大)。

规范处理逻辑,因此可以要求更多。另一个不可能实现的规范是“ false”。(或规范中任何矛盾的句子)但这听起来不像是规范,这就是我使用停顿问题示例的原因。


1
广义的:任何指定解决无法解决的问题的功能的语言都无法实现。
edA-qa mort-ora-y 2012年

@ edA-qamort-ora-y从技术上讲,它可以实现。您无法确定停止问题,但是TM可以模拟另一台机器并接受该机器是否停止;这种TM接受的语言恰好是停止的机器(的编码)的语言。但是出于实际目的,我们通常希望保证编程语言的原始操作可以终止!(至少在“明智”输入)

1
Ø

1/0 let loop = loop in loopΩ

3

只是一个奇怪的提示:C ++模板引擎是图灵完备的

定理1: 在没有实例化边界的情况下,C ++模板是图灵完备的。

推论1: 在没有实例化限制的情况下,不确定C ++编译器在编译给定程序时是否会暂停。

...所以C ++本身可以被视为一种不存在任何“实现”的编程语言... :-D


如果一个人不关心所生成的代码,而只关心所生成的诊断信息,那么可以将C“编译器”用作解释器吗?
2014年

是的,如本文所示,编译器将暂停一系列与Turing机器(及其最终磁带配置)的计算历史相匹配的错误。显然,输入不能是交互式的(在运行编译器之前必须在源代码中对其进行编码)。
2014年

2

您不清楚“编程语言”和“某种语言的实现”是什么意思。您需要提供这两个的严格定义才能得到答案。

Σ2Σ

中号中号0

但这不是人们使用短语“编程语言”时所指的那种规范语言。甲编程语言通常意味着是表示可计算函数(进程,...)和所述指令传达给一台机器,因此存在能够模拟这些方案和它们的输出结果的TM语言。因此,从某种意义上说,拥有无法实现的编程语言是没有意义的。

(我的猜测是,您可能会将编程语言规范语言正式语言相混淆。在任何情况下,我们都可以定义不可计算的语言。)


我敢肯定,“编程语言”是指我们通常谈论它时所用的编程语言,而“一种语言的实现”是指在实际计算机上以该语言执行程序的环境。这个问题还没有正式化,但是肯定还不清楚吗?我可以轻松地为新的编程语言编写规范,而不必费心去实现它。问题只是问是否有可能以这种语言无法实现的方式做到这一点。
2012年

@Ben,如果您查看cstheory上的原始问题,您会发现问题中仅标题中没有单词编程。OP发表的问题肯定很明确。ps:我对什么是编程语言的严格(不一定是正式的)定义感兴趣。我们不能仅凭直觉和例子就证明编程语言的负面结果。如果您有定义的参考,请将其发布为对该问题的编辑或评论。
卡夫

相当公平,尽管SE声称您在迁移和编辑很久之后的9个小时前就回答了它。无论如何,我仍然会根据原始问题做出相同的解释。就编程语言的定义而言,我想说的是一种显而易见的说法,即形式语法,或者是对某种其他易于理解的计算模型(拉姆达演算,图灵机等)的简化,或者是严格的操作语义。减少模型显然会使这个问题的答案变得微不足道。
2012年

1

已经指定了许多没有实现的语言,例如Algol 60被认为是用于编写算法的语言,而不是要实现的语言。在实现之前很久就已经指定了许多“仅用于娱乐”语言,Intercal浮现在脑海。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.