在我所了解的解释型语言(Python,Perl,R,bash)中,多行注释似乎通常涉及到某种语言的另一个功能(例如多行字符串)的一些误用。为什么解释/脚本语言很少有多行注释?
解析器的解析类型是否有固有的特性,使得多行注释变得困难?它似乎不应该与多行字符串有显着不同。
在我所了解的解释型语言(Python,Perl,R,bash)中,多行注释似乎通常涉及到某种语言的另一个功能(例如多行字符串)的一些误用。为什么解释/脚本语言很少有多行注释?
解析器的解析类型是否有固有的特性,使得多行注释变得困难?它似乎不应该与多行字符串有显着不同。
在Python中,我们只是使用多行字符串作为注释。
为什么会有两种语法?
事实上,当涉及到植入任何形式的多线注释(基于大多数解析器用来读取/执行脚本的方法)时,我确信没有任何意义。以我个人的观点来看,由于分发和解释(最高级别的语言通常被编译并且只有一部分是开源的),脚本最需要多线评论。我知道,一种脚本语言Lua的确使用了多线评论。
--[==[
COMMENT
]==]--
我敢肯定这只是一种侥幸,许多语言不支持这一点。使用单行注释创建多行注释通常是可以接受的。
//*****************************************\\
//** **\\
//** JOHN SMITH **\\
//** COPYRIGHT 2008-2011 **\\
//** **\\
//*****************************************\\
很多人也将利用单行注释使用注释字符开始关闭影像(什么样的上面显示,其中//
是注释字符(S来创造一个凉爽的图像(ASCII ART) )/短语)。
并非所有的解释性语言都缺少多行注释。例如,Ruby有它们。
我怀疑这在很大程度上是语言设计者的偏好。有些人并不认为多行评论是必要的功能。 (现在许多代码编辑器提供了使用单行注释评论/取消注释大块代码的快捷方式。)
此外,多行注释给分析器增添了复杂性。例如,它必须处理嵌套评论的可能性。为什么增加复杂性,如果你不需要?
“为什么增加复杂性,如果你不需要......”但这就是多行评论,以消除处理多个单行注释的复杂性。最好是让编译器/解释器比开发人员处理它。 – DarinH 2011-05-20 18:54:57
我不认为多行评论对任何人都更简单。脚本语言通常具有1个字符,例如'''这意味着一条评论的开始。这很简单。在解析器中实现起来很简单,程序员很容易记住,非编程人员很容易记住。如果你不想在评论中注意,很容易在注释中grep或省略)。没有必要增加复杂性,只有少量收益。 – nos 2011-05-20 18:58:48
@nos,@vocaro:多行注释的语言通常不允许它们嵌套。所以多行注释是常规的,因此等同于单行注释(即CFG中的终端)。我不认为这会使解析器显得更复杂。 – Xodarap 2011-05-20 19:01:54
我怀疑这只是一种语言偏见。 C风格的多行注释往往以c-esque语言显示,但大多数其他langs没有相同的语言。
至于解析器本身。没有理由我能想到解析器不实现多行注释,除了lang设计者不想要的。大多数解析器生成器可以轻松处理构造。
你的问题有两个错误的假设。
第一个错误的假设是“解释/脚本语言很少有多行注释”。你正在遭受确认偏见。有单行注释的编译语言(例如Fortran,许多Lisp方言)和带有多行注释的解释语言(例如Perl,Python)。
第二个错误的假设是涉及“滥用另一个功能”。语言的设计作为一个整体来说是更好的,如果某些功能无论如何都存在,那么就不需要为多行注释引入额外的功能。例如,在Python中,存在多行字符串,并且仅由一个字符串组成的指令是无操作的,所以多行字符串可以做出很好的评论。在Perl中,有多行注释的一种方式是通过文档格式Pod;注释是一种文档,因此使用=pod … =cut
进行多行注释是很自然的(多行字符串,通过here documents<<'EOF'; … EOF
是另一种方法)。
哦,来吧。你是否会直截了当地坐在那里,告诉我拉里沃尔排除了多行注释,因为[Perl会有多种方式来做同样的事情](http://en.wikipedia.org/wiki/There%27s_more_than_one_way_to_do_it) ? – Xodarap 2011-05-21 17:56:57
@ Xodarap:绝对。作为[第一美德]的冠军(http://en.wikipedia.org/wiki/Larry_Wall#Virtues_of_a_programmer),拉里沃尔并没有打算增加额外的功能,如果有其他方法来获得它。 – Gilles 2011-05-21 18:05:09
不,没有理由让脚本语言不支持多行注释。 JavaScript,Groovy,Lua,PHP,REXX,Smalltalk和Dart都支持多行注释。
也许这适用于Python,但Perl通常具有两种方式比一种更好的理念。甚至Python通常也可以让你以两种不同的方式做同样的事情,如果这样做更清晰。 (有一个字符串被分配给任何东西都不等于一个评论,至少对我来说并不明显。) – Xodarap 2011-05-20 18:55:12
@ Xodarap:我没有回答其他语言。我正在回答Python。你的问题可能太宽泛,不能有任何可能的答案,因为每种语言的答案很可能是**不同的**。 – 2011-05-20 19:26:57