免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
夢寐以求的編程語言

我的朋友曾對一位著名的操作系統(tǒng)專家說他想要設(shè)計一種真正優(yōu)秀的編程語言。那位專家回答,這是浪費時間,優(yōu)秀的語言不一定會被市場接受,很可能無人使用,因為語言的流行不取決于它本身。至少,那位專家設(shè)計的語言就遭遇到了這種情況。

那么,語言的流行到底取決于什么因素呢?流行的語言是否真的值得流行呢?還有必要嘗試設(shè)計一種更好的語言嗎?如果有必要的話,怎樣才能做到這一點呢?

為了找到這些問題的答案,我想我們可以觀察黑客,了解他們使用什么語言。編程語言本來就是為了滿足黑客的需要而產(chǎn)生的,當且僅當黑客喜歡一種語言時,這種語言才能成為合格的編程語言,而不是被當做“指稱語義”(denotational semantics)或者編譯器設(shè)計。

流行的秘訣

沒錯,大多數(shù)人選擇某一種編程語言,不是因為這種語言有什么獨特的特點,而是因為聽說其他人使用這種語言。但是我認為,外界因素對于編程語言的流行其實并沒有想象中那么大的影響力。我倒是覺得,問題出在對于什么是優(yōu)秀編程語言,黑客的看法與大多數(shù)的語言設(shè)計者不一樣。

黑客的看法其實比語言設(shè)計者的更重要。編程語言不是數(shù)學(xué)定理,而是一種工具,為了便于使用,它們才被設(shè)計出來。所以,設(shè)計編程語言的時候必須考慮到人類的長處和短處,就像設(shè)計鞋子的時候必須符合人類的腳型。如果鞋子穿上去不舒服,無論它的外形多么優(yōu)美,多么像一件藝術(shù)品,你也只能把它當做一雙壞鞋。

大多數(shù)程序員也許無法分辨語言的好壞。但是,這不代表優(yōu)秀的編程語言會被埋沒,專家級黑客一眼就能認出它們,并且會拿來使用。雖然他們?nèi)藬?shù)很少,但就是這樣一小群人寫出了人類所有的優(yōu)秀軟件。他們有著巨大的影響力,他們使用什么語言,其他程序員往往就會跟著使用。老實說,很多時候這種影響力更像是一種命令,對于其他程序員來說,專家級黑客就像自己的老板或?qū)?,他們說哪種語言好用,自己就會乖乖地跟進。

專家級黑客的看法不是決定一種語言流行程度的唯一因素,某些古老的軟件(Fortran和Cobol的情況)和鋪天蓋地的廣告宣傳(Ada和Java的情況)也會起到作用。但是,我認為從長期來看,專家級黑客的看法是最重要的因素。只要有了達到“臨界數(shù)量”(criticalmass)的最初用戶和足夠長的時間,一種語言就可能會達到應(yīng)有的流行程度。而流行本身又會使得這種優(yōu)秀的語言更加優(yōu)秀,進一步拉大它與平庸語言之間的好壞差異,因為使用者的反饋總是會導(dǎo)致語言的改進。你可以想一下,所有流行的編程語言從誕生至今的變化有多大。Perl和Fortran是極端的例子,但是甚至就連Lisp都發(fā)生了很大的變化。

所以,即使不考慮語言本身的優(yōu)秀是否能帶動流行,我想單單流行本身就肯定會使得這種語言變得更好,只有流行才會讓它保持優(yōu)秀。編程語言的最高境界一直在發(fā)展之中。雖然語言的核心功能就像大海的深處,很少有變化,但是函數(shù)庫和開發(fā)環(huán)境之類的東西就像大海的表面,一直在洶涌澎湃。

當然,黑客必須先知道這種語言,才可能去用它。他們怎么才能知道呢?就是從其他黑客那里。所以不管怎樣,一開始必須有一群黑客使用這種語言,然后其他人才會知道它。我不知道“一群”的最小數(shù)量是多少,多少個黑客才算達到“臨界數(shù)量”呢?如果讓我猜,我會說20人。如果一種語言有20個獨立用戶,就意味著有20個人是自主決定使用這種語言的,我覺得這就說明這種語言真的有優(yōu)點。

達到這一步并非易事。如果說用戶數(shù)從0到20比從20到1000更困難,我也不會感到驚訝。發(fā)展最早的20個用戶的最好方法可能就是使用特洛伊木馬:你讓人們使用一種他們需要的應(yīng)用程序,這個程序碰巧就是用某種新語言開發(fā)的。

外部因素

我們得先承認,確實有一個外部因素會影響到語言的流行。一種語言必須是某一個流行的計算機系統(tǒng)的腳本語言(scriptinglanguage),才會變得流行。Fortran和Cobol是早期IBM大型機的腳本語言。C是Unix的腳本語言,后來的Perl和Python也是如此。Tcl是Tk的腳本語言,VisualBasic是Windows的腳本語言,(某種形式的)Lisp是Emacs的腳本語言,PHP是網(wǎng)絡(luò)服務(wù)器的腳本語言,Java和JavaScript是瀏覽器的腳本語言。

編程語言不是存在于真空之中。“編程”其實是及物動詞,黑客一般都是為某個系統(tǒng)編程,在現(xiàn)實中,編程語言總是與它們依附的系統(tǒng)聯(lián)系在一起的。所以,如果你想設(shè)計一種流行的編程語言,就不能只是單純地設(shè)計語言本身,還必須為它找到一個依附的系統(tǒng),而這個系統(tǒng)也必須流行。除非你只想用自己設(shè)計的語言取代那個系統(tǒng)現(xiàn)有的腳本語言。

這種情況導(dǎo)致的一個結(jié)果就是,無法以一種語言本身的優(yōu)缺點評判這種語言。另一個結(jié)果則是,只有當一種語言是某個系統(tǒng)的腳本語言時,它才能真正成為編程語言。如果你對此很吃驚,覺得不公平,那么我會跟你說不必大驚小怪。這就好比大家都認為,如果一種編程語言只有語法規(guī)則,沒有一個好的實現(xiàn)(implementation),那么它就不能算完整的編程語言。這些都是很正常很合理的事情,編程語言本來就該如此。

當然,編程語言本來就需要一個好的實現(xiàn),而且這個實現(xiàn)必須是免費的。商業(yè)公司愿意出錢購買軟件,但是黑客作為個人不會愿意這樣做,而你想讓一種語言成功,恰恰就是需要吸引黑客。

編程語言還需要有一本介紹它的書。這本書應(yīng)該不厚,文筆流暢,而且包含大量優(yōu)秀的范例。布賴恩·柯尼漢和丹尼斯·里奇合寫的《C程序設(shè)計語言》(CProgrammingLanguage)就是這方面的典范。眼下,我大概還能再加一句,這一類書籍之中必須有一本由O’Reilly公司出版發(fā)行。這正在變成是否能吸引黑客的前提條件了。

編程語言還應(yīng)該有在線文檔。事實上,在線文檔可以當做一本書來寫,但是目前它還無法取代實體書。實體書并沒有過時,它們讀起來很方便,而且出版社對書籍內(nèi)容的審核是一種很有用的質(zhì)量保證機制(雖然做得很不完美)。書店則是程序員發(fā)現(xiàn)和學(xué)習(xí)新語言的最重要的場所之一。

簡潔

假定你的語言已經(jīng)能夠滿足上面三項條件——一種免費的實現(xiàn),一本相關(guān)書籍,以及語言所依附的計算機系統(tǒng)——那么還需要做什么才能使得黑客喜歡上你的語言?

黑客欣賞的一個特點就是簡潔。黑客都是懶人,他們同數(shù)學(xué)家和現(xiàn)代主義建筑師一樣,痛恨任何冗余的東西或事情。有一個笑話說,黑客動手寫程序之前,至少會在心里盤算一下哪種語言的打字工作量最小,然后就選擇使用該語言。這個笑話其實與真實情況相差無幾。就算這真的是個笑話,語言的設(shè)計者也必須把它當真,按照它的要求設(shè)計語言。

簡潔性最重要的方面就是要使得語言更抽象。為了達到這一點,首先你設(shè)計的必須是高級語言,然后把它設(shè)計得越抽象越好。語言設(shè)計者應(yīng)該總是看著代碼,問自己能不能使用更少的語法單位把它表達出來。如果你有辦法讓許多不同的程序都能更簡短地表達出來,那么這很可能意味著你發(fā)現(xiàn)了一種很有用的新抽象方法。

不要覺得為用戶著想就是讓他們使用像英語一樣又長又啰唆的語法。這是不正確的做法,Cobol就是因為這個毛病而聲名狼藉。

如果你讓黑客像下面這樣求和:

add x to y giving z

而不是寫成:

z=x+y

那么你就是在侮辱黑客的智商,或者自己作孽了。

簡潔性是靜態(tài)類型語言的力所不及之處。不考慮其他因素時,沒人愿意在程序的頭部寫上一大堆的聲明語句。只要計算機可以自己推斷出來的事情,都應(yīng)該讓計算機自己去推斷。舉例來說,hello-world本應(yīng)該是一個很簡單的程序,但是在Java語言中卻要寫上一大堆東西,這本身就差不多可以說明Java語言設(shè)計得有問題了。

單個的語法單位也應(yīng)該很簡短。Perl和CommonLisp在這方面是兩個不同的極端。Perl的語法單位很短,導(dǎo)致它的代碼可以擁擠得讓人無法理解,而CommonLisp內(nèi)置運算符的名稱則長得可笑。CommonLisp的設(shè)計者們可能覺得文本編輯器會幫助用戶自動填寫運算符的長名稱。但是這樣做的代價不僅是增加了打字的工作量,還包括提高了閱讀代碼的難度,以及占用了更多的顯示器空間。

可編程性(Hackability)

對黑客來說,選擇編程語言的時候,還有一個因素比簡潔更重要,那就是這種語言必須能夠幫助自己做到想做的事。在編程語言的歷史上,防止程序員做出“錯誤”舉動的措施多得驚人。這是語言設(shè)計者很自以為是的危險舉動,他們怎么知道程序員該做什么不該做什么?我認為,語言設(shè)計者應(yīng)該假定他們的目標用戶是一個天才,會做出各種他們無法預(yù)知的舉動,而不是假定目標用戶是一個笨手笨腳的傻瓜,需要別人的保護才不會傷到自己。如果用戶真的是傻瓜,不管你怎么保護他,他還是會搬起石頭砸自己的腳。你也許能夠阻止他引用另一個模塊中的變量,但是你沒法防止他日日夜夜不知疲倦地寫出結(jié)構(gòu)混亂的程序去解決完全錯誤的問題。

優(yōu)秀程序員經(jīng)常想做一些既危險又令人惱火的事情。所謂“令人惱火”,我指的是他們會突破設(shè)計者提供給用戶的外部語義層,試著控制某些高級抽象的語言內(nèi)部接口。比如,黑客喜歡破解,而破解就意味著深入內(nèi)部,揣測原始設(shè)計者的意圖。

你應(yīng)該敞開胸懷,歡迎這種揣測。對于制造工具的人來說,總是會有用戶以違背你本意的方式使用你的工具。如果你制造的是編程語言這樣高度組合的系統(tǒng),那就更是如此了。許多黑客會用你做夢也想不到的方式改動你的語法模型。我的建議就是,讓他們這樣干吧,而且應(yīng)該為他們創(chuàng)造便利,盡可能多地把語言的內(nèi)部暴露在他們面前。

其實,黑客并不會徹底顛覆你的工具,在一個大型程序中,他可能只是對語言改造一兩個地方。但是,改動多少地方并不重要,重要的是他能夠?qū)φZ言進行改動。這可能不僅有助于解決一些特殊的問題,還會讓黑客覺得很好玩。黑客改造語言的樂趣就好比外科醫(yī)生擺弄病人內(nèi)臟的樂趣,或者青少年喜歡用手擠破青春痘的那種感覺。至少對男生來說,某些類型的破壞非常刺激。針對青年男性讀者的Maxim雜志每年出版一本特輯,里面一半是美女照片,另一半是各種嚴重事故的現(xiàn)場照片。這本雜志非常清楚它的讀者想看什么。

一種真正優(yōu)秀的編程語言應(yīng)該既整潔又混亂。“整潔”的意思是設(shè)計得很清楚,內(nèi)核由數(shù)量不多的運算符構(gòu)成,這些運算符易于理解,每一個都有很完整的獨立用途。“混亂”的意思是它允許黑客以自己的方式使用。C語言就是這樣的例子,早期的Lisp語言也是如此。真正的黑客語言總是稍微帶一點放縱不羈、不服管教的個性。

優(yōu)秀的編程語言所具備的功能,應(yīng)該會使得言必稱“軟件工程”的人感到非常不滿、頻頻搖頭。與黑客語言形成鮮明對照的就是像Pascal那樣的語言,它是井然有序的模范,非常適合教學(xué),但是除此之外就沒有很大用處了。

一次性程序

為了吸引黑客,一種編程語言必須善于完成黑客想要完成的各種任務(wù)。這意味著它必須很適合開發(fā)一次性程序。這一點可能出乎很多人的意料。

所謂一次性程序,就是指為了完成某些很簡單的臨時性任務(wù)而在很短時間內(nèi)寫出來的程序。比如,自動完成某些系統(tǒng)管理任務(wù)的程序,或者(為了某項模擬任務(wù))自動生成測試數(shù)據(jù)的程序,以及在不同格式之間轉(zhuǎn)化數(shù)據(jù)的程序等。令人吃驚的是,一次性程序往往不是真的只用一次,就像二戰(zhàn)期間很多美國大學(xué)造的一大批臨時建筑后來都成了永久建筑。許多一次性程序后來也都變成了正式的程序,具備了正式的功能和外部用戶。

我有一種預(yù)感,最優(yōu)秀的那些大型程序就是這樣發(fā)展起來的,而不是像胡佛水壩那樣從一開始就作為大型工程來設(shè)計。一下子從無到有做出一個大項目是一件很恐怖的事。當人們接手一個巨型項目時,很容易被它搞得一蹶不振。最后,要么是項目陷入僵局,要么是做出來一個規(guī)模小、性能差的東西。你想造一片鬧市,卻只做出一家商場;你想建一個羅馬,卻只造出一個巴西利亞;你想發(fā)明C語言,卻只開發(fā)出Ada。

開發(fā)大型程序的另一個方法就是從一次性程序開始,然后不斷地改進。這種方法比較不會讓人望而生畏,程序在不斷的開發(fā)之中逐漸進步。一般來說,使用這種方法開發(fā)程序,一開始用什么編程語言,就會一直用到最后,因為除非有外部政治因素的干預(yù),程序員很少會中途更換編程語言。所以,我們就有了一個看似矛盾的結(jié)論:如果你想設(shè)計一種適合開發(fā)大型項目的編程語言,就必須使得這種語言也適合開發(fā)一次性程序,因為大型項目就是從一次性程序演變而來的。

Perl就是一個鮮明的例子。它不僅僅設(shè)計成適合開發(fā)一次性程序,而且它本身就很像一次性程序。最初的Perl只是好幾個生成表格的工具收集在一起而已。后來程序員用它寫一次性程序,當那些程序逐漸發(fā)展壯大后,Perl才隨之發(fā)展成了一種正式的編程語言。到了Perl5,這種語言才適合開發(fā)重要的程序,但是在此之前它已經(jīng)廣為流行了。

什么樣的語言適合寫一次性程序?首先,它必須很容易裝備。一次性程序是你只想在一小時內(nèi)寫出來的程序,所以它不應(yīng)該耗費很多時間安裝和配置,最好已經(jīng)安裝在你的電腦上了。它必須是想用就用的。C語言可以想用就用,因為它是操作系統(tǒng)的一部分;Perl可以想用就用,因為它本來就是一種系統(tǒng)管理工具,操作系統(tǒng)已經(jīng)默認安裝它了。

很容易裝備不僅僅指很容易安裝或者已經(jīng)安裝,還指很容易與使用者互動。一種有命令行界面、可以實時反饋的語言就具有互動性,那些必須先編譯后使用的語言就不具備互動性。受歡迎的編程語言應(yīng)該是前者,具有良好的互動性,可以快速得到運行結(jié)果。

一次性程序的另一個特點就是簡潔。對黑客來說,這一點永遠有吸引力。如果考慮到你最多只打算在這個程序上耗費一個小時,這一點就更重要了。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
代碼藝術(shù):編程語言了解
選擇學(xué)習(xí)“下一個”程序語言#more-429
小話計算機編程語言及其用武之地(拼湊之作,歡迎大家拍磚)
網(wǎng)頁編程語言
腳本語言
編程語言介紹
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服