在我所瞭解的解釋型語言(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