为什么解释/脚本语言很少有多行注释



在我知道的解释型语言(Python,Perl,R,bash)中,多行注释似乎通常涉及对语言另一个功能的滥用(例如多行字符串)。

解释器所做的解析类型是否固有的东西使多行注释变得困难?它似乎应该与多行字符串没有显着区别。

不,脚本语言没有理由不支持多行注释。JavaScript,Groovy,Lua,PHP,REXX,Smalltalk和Dart都支持多行注释。

事实上,我确信在实现任何形式的多行注释时没有意义(基于大多数解析器用来读取/执行脚本的方法)。在我个人看来,由于分发和解释,脚本最需要多行注释(大多数高级语言通常都是编译的,无论如何只有一部分是开源的)。我知道Lua,一种脚本语言,确实提供了多行注释:

--[==[
COMMENT
]==]--

我敢肯定,许多语言不支持此功能只是侥幸。通常可以只使用单行注释来创建多行注释。

//*****************************************\
//**                                     **\
//**            JOHN SMITH               **\
//**        COPYRIGHT 2008-2011          **\
//**                                     **\
//*****************************************\

许多人还将使用单行注释来创建很酷的图像(ASCII ART),使用注释字符开始图像(类似于上面显示的内容,其中//是注释字符/短语)。

在Python中,我们只是使用多行字符串作为注释。

为什么有两种语法,而一种语法就可以了?

并非所有解释型语言都缺少多行注释。例如,Ruby拥有它们。

我怀疑这主要是语言设计师的偏好。有些人只是不认为多行注释是必要的功能。(如今,许多代码编辑器都提供了使用单行注释注释/取消注释大块代码的快捷方式。

此外,多行注释增加了解析器的复杂性。例如,它必须处理嵌套注释的可能性。如果没有必要,为什么要增加复杂性?

我怀疑这只是一点语言偏见。C 风格的多行注释倾向于以 C 式语言显示,但大多数其他 lang 没有等效语言。

至于解析器本身。我没有理由想到解析器不实现多行注释,除了 lang 设计者不想实现。大多数解析器生成器可以轻松处理构造。

你的问题有两个错误的假设。

第一个错误的假设是"解释/脚本语言很少有多行注释"。你患有确认偏见。有带有单行注释的编译语言(例如Fortran,许多Lisp方言)和具有多行注释的解释语言(例如Perl,Python)。

第二个错误的假设是涉及"滥用另一个功能"。语言作为一个整体设计得更好,如果存在一些功能可以解决问题,则无需为多行注释引入额外的功能。例如,在 Python 中,存在多行字符串,并且仅由字符串组成的指令是无操作,因此多行字符串会做出精细的注释。在 Perl 中,拥有多行注释的一种方法是通过 Pod,一种文档格式;注释是一种文档,因此将=pod … =cut用于多行注释是很自然的(多行字符串,通过此处的文档<<'EOF'; … EOF,是另一种方法)。

最新更新