使用和研究過這么多程序語言之后,我覺得幾乎不包含多余功能的語言湿痢,只有一個:Smalltalk癞己。所以我覺得它是學習程序設計最好的入手點和進階工具窑眯。當然 Smalltalk也有少數(shù)的問題,而且缺少一些我想要的功能湘换,但這些都瑕不掩瑜宾舅。在用了很多其它的語言之后,我覺得 Smalltalk真的是非常優(yōu)美的語言彩倚。
要想指出 Smalltalk所有的優(yōu)點筹我,并且跟其它語言比較,恐怕要寫一本書才講的清楚帆离。所以在這篇文章里崎溃,我只提其中一個最簡單,卻又幾乎被所有人忽視的方面:語法盯质。
其它的 面向?qū)ο笳Z言也有跟 Smalltalk類似的語法(都是基于“面向?qū)ο蟆保┰栽谶@篇(僅限這篇)文章里我所指出的“Smalltalk 的優(yōu)點”,其實也可以作用于其它的 面向?qū)ο笳Z言呼巷。從現(xiàn)在開始囱修,“Smalltalk”和“面向?qū)ο笙到y(tǒng)”這兩個詞基本上含義相同。
我覺得 Smalltalk(面向?qū)ο笙到y(tǒng)) 的基于“消息”的語法王悍,是世界上最完美的設計破镰。其實我希望它能更簡單一點,但是在現(xiàn)存的語言中压储,我沒有找到第二種能與它比美鲜漩。也許在讀過這篇文章之后,你會發(fā)現(xiàn)這種語法設計的合理性集惋,已經(jīng)接近理論允許的最大值孕似。
為什么我喜歡這樣一個“全是對象,消息”的語言呢刮刑?這是出于對語言結(jié)構(gòu)本質(zhì)的考慮喉祭。其實,我覺得語法是完全不應該存在的東西雷绢。即使存在泛烙,也應該非常的簡單。因為語法其實只是對語言的本質(zhì)結(jié)構(gòu)翘紊,“抽象語法樹”(abstract syntax tree蔽氨,AST),的一種編碼。一個良好的編碼鹉究,應該極度簡單中捆,不引起歧義,而且應該容易解碼坊饶。在程序語言里泄伪,這個“解碼”的過程叫做“語法分析”(parse)。
為什么我們卻又需要語法呢匿级?因為受到現(xiàn)有工具(操作系統(tǒng)蟋滴,文本編輯器)的限制,到目前為止痘绎,幾乎所有語言的程序都是用字符串的形式存放在文件里的津函。為了讓字符串能夠表示“樹”這種結(jié)構(gòu),人們才給程序語言設計了“語法”這種東西孤页。但是人們喜歡耍小聰明尔苦,在有了基本的語法之后,他們開始在這上面大做文章行施,使得簡單的問題變得復雜允坚。
Lisp(Smalltalk 的前身)是世界上第二老的程序語言。最老的是 Fortran蛾号。Fortran 的程序稠项,最早的時候都是用打孔機打在卡片上的,所以它其實是幾乎沒有語法可言的鲜结。
顯然展运,這樣寫程序很痛苦。但是它卻比現(xiàn)代的很多語言有一個優(yōu)點:它沒有歧義精刷,沒有復雜的 parse 過程拗胜。
在 Lisp 誕生的時候,它的設計者們一下子沒能想出一種好的語法怒允,所以他們決定干脆先用括號把這語法樹的結(jié)構(gòu)全都括起來埂软,一個不漏。等想到更好的語法再換误算。
仔細想一下仰美,如果要表達一顆“樹”,最簡單的編碼方式是什么儿礼?就是用括號把每個節(jié)點的“數(shù)據(jù)”和“子節(jié)點”都括起來放在一起。Lisp 的設計者們就是這樣想的庆寺。他們把這種完全用括號括起來的表達式蚊夫,叫做“S表達式”(S 代表 “symbolic”)。這貌似很“粗糙”的設計懦尝,甚至根本談不上“設計”知纷。奇怪的是壤圃,在用過一段時間之后,他們發(fā)現(xiàn)自己已經(jīng)愛上了這個東西琅轧,再也不想設計更加復雜的語法伍绳。于是S表達式就沿用至今。
在使用過 Smalltalk乍桂,Scheme冲杀,Haskell,ML睹酌,和常見的 Java权谁,C,C++憋沿,Python旺芽,Perl,…… 之后辐啄,我也驚訝的發(fā)現(xiàn)采章, Smalltalk 的語法,不但是最簡單壶辜,而且是最好看的一個共缕。這不是我情人眼里出西施,而是有一定理論依據(jù)的士复。
首先图谷,把所有的結(jié)構(gòu)都用對象表示起來,輕松地避免了別的語言里面可能發(fā)生的“歧義”阱洪。程序員不再需要記憶任何“運算符優(yōu)先級”便贵。
其次,把“對象”全都放在表達式的最前面冗荸,使得基本算術(shù)操作和函數(shù)調(diào)用承璃,在語法上發(fā)生完美的統(tǒng)一,而且使得程序員可以使用幾乎任何符號作為函數(shù)名蚌本。
談語法
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門中鼠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來可婶,“玉大人,你說我怎么就攤上這事援雇∶剩” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵惫搏,是天一觀的道長具温。 經(jīng)常有香客問我,道長晶府,這世上最難降的妖魔是什么桂躏? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮川陆,結(jié)果婚禮上剂习,老公的妹妹穿的比我還像新娘。我一直安慰自己较沪,他們只是感情好鳞绕,可當我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著尸曼,像睡著了一般们何。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上控轿,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼刚梭!你這毒婦竟也來了肠阱?” 一聲冷哼從身側(cè)響起,我...
- 正文 年R本政府宣布肆糕,位于F島的核電站,受9級特大地震影響在孝,放射性物質(zhì)發(fā)生泄漏诚啃。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一私沮、第九天 我趴在偏房一處隱蔽的房頂上張望始赎。 院中可真熱鬧,春花似錦仔燕、人聲如沸造垛。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽五辽。三九已至,卻和暖如春外恕,著一層夾襖步出監(jiān)牢的瞬間杆逗,已是汗流浹背。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 附錄B 編程的本質(zhì) 編程的本質(zhì) N 尼古拉斯·沃斯(Niklaus Wirth竞川,1934年2月15日—)店溢,生於于瑞...
- 附錄3 編程簡史 1940之前 1801,Joseph Marie Jacquard用打孔卡為一臺織布機編寫指令,...