【发布时间】:2011-04-04 06:51:11
【问题描述】:
Perl 是否被视为通用编程语言?
在Wikipedia阅读它
Perl 具有图灵完备的文法,因为解析会受到编译阶段执行的运行时代码的影响。[41]因此,Perl 不能被直接的 Lex/Yacc 词法分析器/解析器组合解析。相反,解释器实现了自己的词法分析器,它与修改后的 GNU bison 解析器协调以解决语言中的歧义。
人们常说“只有 perl 才能解析 Perl”,意思是只有 Perl 解释器 (perl) 才能解析 Perl 语言 (Perl),但即便如此,一般情况下也不是这样。因为 Perl 解释器可以在其编译阶段模拟图灵机,所以它需要确定停机问题才能在每种情况下完成解析。 Halting Problem 是不可判定的,这是一个长期存在的结果,因此即使 perl 也不能总是解析 Perl。 Perl 做出了不同寻常的选择,即让用户在其自己的编译阶段访问其全部编程能力。理论上的纯度成本很高,但实际不便似乎很少。
因此,它说虽然 Perl 具有图灵完备的标志,但它与其他语言不同,因为它让“用户在其自己的编译阶段访问其全部编程能力”。那是什么意思? Perl 在编译阶段为我提供了哪些其他人没有的编程能力?
【问题讨论】:
-
这是一个非主观回答的正确问题。
-
此维基百科条目需要编辑。编译器不需要在编译期间“决定”停止问题,即使它已经完成。这是循环逻辑。
标签: perl scripting programming-languages