在我知道的解释型语言(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
,是另一种方法)。