為什麼很多編程語言用 end 作為區塊結束符,而放棄花括弧?
像 Pascal 之類可能是歷史原因,但一些比較新的語言,比如 Lua,Julia 等,也都是採用 end
如果一個語言支持花括弧的 map/table 字面量, 還用花括弧來表示區塊, 就容易導致程序員在看代碼時分不清. 解析器也需要 lookahead 相當長的內容才能知道這個花括弧到底代表什麼.
一種解決方案是用 end 結束.
一種解決方案是用其他括弧表達 map/table 字面量, 例如: Groovy 用中括弧, Scala 用圓括弧.
也有不解決這個問題的, 例如 Javascript, 這麼做既燒人腦也燒電腦...
瀉藥
julia不熟,lua是1993年出來的,其他一些可能覺得「新」的語言其實出現也很早,比如python是1989年,ruby是1993年(95年才發表),要知道java在1995年才出來,之前用大括弧的語言主要就是C和C++,而且還不成熟(C最早標準應該是1989,C++到1998年才把一些東西在標準上確定下來),就算是借鑒已有成熟語言,也不是只有花括弧一種形式,一開始就沒這麼設計,談何」放棄「呢?
end 有一種『以上』即視感,很有逼格的感覺。
偏好罷了。花括弧還是大多數是不?什麼都要來個「為什麼」,那為什麼Go要用花括弧?然後花括弧還不換行呢?為什麼、為什麼呢?
散了吧,沒什麼好解釋的。就看造語言那幾個人心裡是怎麼想的。
裡面沒有太複雜的原理,也沒有性能上面的考慮。單純是發明者覺得語法怎麼好看怎麼來。
Python連End都不需要,你覺得這是出於性能的考慮?只不過是發明語言的人的任性罷了。他們只不過不想敲花括弧而已,所以就取消了這個設計。
Java造出來的時候只是為了屏蔽面對煩人的指針並且OOP,所以它保留了C/C++的語法,以及花括弧。
你覺得牛逼的東西,也許只是發明者的任性。。。。Python就不要,大括弧end統統都不要,有把遊標卡尺就行。
謝邀,其他的語言我不太清楚,但我自己的CovScript編程語言( http://covscript.org )選擇end而不是花括弧有以下幾個原因:1. CovScript編程語言的前身CovBasic編程語言初期版本是純解釋型編程語言,解釋器能力孱弱,選擇end有利於簡化解釋器。2. CovScript編程語言重構編譯器後可以支持花括弧,但由於難以區分數組和語句塊之間的差別所以沒改。
3. 對於用戶來說,end更容易區分,程序可讀性更好。
當然如果我能寫出來更強大的編譯器,我會毫不猶豫的選擇花括弧而不是end。各種語言都有自己的語法形式來表現代碼段,很多語言使用使用花括弧標記代碼段,這些語言一定程度上受C語言語法影響,以至於在當今計算機語言中,花括弧已經被太多人再潛意識中內化為代碼段的默認表示法,一種語言完全可以使用尖括弧,方括弧,圓括弧(windows 批處理腳本語言,lisp),甚至不用前後標記的形式,比如haskell和python,但這的確會造成各種語言語法的混淆和增加學習難度,花括弧的設計已經非常簡化了輸入量並且可以很好的兼顧可了讀性。lua是綜合考慮了各種因素才選擇了end關鍵字結束代碼段,1.lua注重可讀性,而單詞可讀性大於符號,2.從lua簡潔性考慮,lua函數使用function作為函數起始關鍵字,所以它已經有了函數前標記,如果再使用左右花括弧或其他成對符號,就會產生語法冗餘,而如果以function開始以右花括弧結束,會喪詞法的一致性3.end已經被許多流行或流行過語言用在同樣的用途,basic,pascal等,所以這種表示並不特立獨行
這裡只說一下Lua吧。Lua語言的語法借鑒了Modula語言,包括這個end關鍵字。具體可以看看《The Evolution of Lua》這篇論文。
花括弧需要按兩個鍵,有一種打字中斷添加符號的感覺。而 begin - end 不用。
感覺很難看,不如用begin,end。比如Verilog。而且能減少很多治安案件的發生率,畢竟用花括弧容易打起來。用end的話,一般都會換行吧
推薦閱讀:
※unity中lua的開發工具?
※學習哪些 Functional programming language 能夠拓寬眼界,學到和其他編程範式明顯不一樣的東西?
※Lua 為什麼在遊戲編程領域被廣泛運用?