編程語(yǔ)言的優(yōu)劣六合網(wǎng)站架設(shè) 2952777280【源碼鏈接】 hxforum.com ,一直眾說(shuō)紛紜。倘若編程語(yǔ)言的創(chuàng)造者們相聚一起共談自己所設(shè)計(jì)的語(yǔ)言,是否又會(huì)掀起一番“腥風(fēng)血雨”?
其實(shí)就在近日,Python 創(chuàng)始人 Guido van Rossum、Java 創(chuàng)始人 James Gosling、C# 創(chuàng)始人 Anders Hejlsberg、Perl 創(chuàng)始人 Larry Wall 四位技術(shù)大拿相聚西雅圖,共同探討編程語(yǔ)言的設(shè)計(jì)與未來(lái)發(fā)展。
4月初,在Puget Sound Programming Python(簡(jiǎn)稱(chēng)PuPPy)舉辦的第一屆年度慈善活動(dòng)中,四位傳奇的編程語(yǔ)言創(chuàng)始人聚集在一起就編程語(yǔ)言設(shè)計(jì)的過(guò)去和未來(lái)展開(kāi)了熱烈的討論。此次活動(dòng)旨在為面向所有人的計(jì)算機(jī)科學(xué)教育(Computer Science For All,美國(guó)前總統(tǒng)奧巴馬當(dāng)年年初提出的新計(jì)劃,旨在美國(guó)教育體系中普及計(jì)算機(jī)科學(xué))籌集資金。
與會(huì)的小組成員包括以下流行編程語(yǔ)言的創(chuàng)始人:
Guido van Rossum:Python的創(chuàng)始人;
James Gosling:Java編程語(yǔ)言的創(chuàng)始人兼首席設(shè)計(jì)師;
Anders Hejlsberg:Turbo Pascal的原作者,他也致力于C#和TypeScript的開(kāi)發(fā);
Larry Wall:Perl的創(chuàng)始人。
此次討論會(huì)由Carol Willing主持,目前她是Jupyter項(xiàng)目的指導(dǎo)委員會(huì)成員和開(kāi)發(fā)人員。她還是首屆Python指導(dǎo)委員會(huì)成員,Python軟件基金會(huì)研究員和前任主任。
編程語(yǔ)言設(shè)計(jì)的關(guān)鍵原則
小組成員提出的第一個(gè)問(wèn)題是:“編程語(yǔ)言設(shè)計(jì)的原理是什么?”
Guido van Rossum認(rèn)為:
編程語(yǔ)言的設(shè)計(jì)與J·K·羅琳撰寫(xiě)她的哈利波特系列叢書(shū)的方式非常相似。
他解釋說(shuō),J·K·羅琳是一個(gè)天才,她在第一本哈利波特書(shū)中提到的一些細(xì)節(jié)與第六和第七本書(shū)中重要的情節(jié)相呼應(yīng)。
在解釋這與編程語(yǔ)言設(shè)計(jì)之間的關(guān)系時(shí),他表示:“在編程語(yǔ)言設(shè)計(jì)中亦是如此,我們需要做到首尾呼應(yīng)?!痹谠O(shè)計(jì)編程語(yǔ)言時(shí),首先我們會(huì)承諾某些細(xì)節(jié),例如我們想要使用的關(guān)鍵字,我們想要遵循的編碼風(fēng)格等等。但是,無(wú)論我們做了何種決定,都必須堅(jiān)持到底,將來(lái)我們需要像J·K·羅琳一樣,找到使用這些細(xì)節(jié)的新方式。
他補(bǔ)充說(shuō)道:“一方面,在設(shè)計(jì)編程語(yǔ)言的工作中,最開(kāi)始你要做出一系列的選擇,為你的故事發(fā)展埋下伏筆。另一方面,設(shè)計(jì)編程語(yǔ)言的藝術(shù)在于,你需要不斷回顧你的故事,并展開(kāi)奇思妙想,以你始料未及的方式推進(jìn)故事發(fā)展。”
當(dāng)談?wù)摰絁ames Gosling創(chuàng)建Java的過(guò)程,以及他所遵循的設(shè)計(jì)原則時(shí),他只是淡淡地說(shuō):“Java的出現(xiàn)并不像個(gè)人熱愛(ài)的項(xiàng)目那樣。其實(shí)我們只是想試著建立一個(gè)原型。”當(dāng)時(shí),James Gosling和他的團(tuán)隊(duì)開(kāi)展了一個(gè)涉及嵌入式系統(tǒng)領(lǐng)域的項(xiàng)目。為此,他們與許多為嵌入式系統(tǒng)構(gòu)建軟件的開(kāi)發(fā)人員進(jìn)行了交談,并了解了他們的工作流程。
該項(xiàng)目大約有十幾個(gè)人,Gosling負(fù)責(zé)從編程語(yǔ)言的角度來(lái)盡量簡(jiǎn)化項(xiàng)目。他補(bǔ)充說(shuō):“最初我們只想做比C更好的東西,但是后來(lái)就失去了控制,最終項(xiàng)目的其余部分只是提供了素材?!彼摇癑ava”從該項(xiàng)目中活了下來(lái)?;旧显摼幊陶Z(yǔ)言就是為了解決身居數(shù)據(jù)中心之外的人的問(wèn)題,這些人常常為網(wǎng)絡(luò)、安全性和可靠性等問(wèn)題困擾。
Larry Wall覺(jué)得自己更像“語(yǔ)言學(xué)家”,而不是計(jì)算機(jī)科學(xué)家。他想創(chuàng)造一種更接近自然語(yǔ)言的編程語(yǔ)言。他舉了一個(gè)例子:“就好像我們不必讓每個(gè)人都走進(jìn)大學(xué)校園才能決定他們各自的去向,我們可以觀(guān)察人們想去哪里,然后設(shè)置通向這些地方的捷徑。”P(pán)erl創(chuàng)建背后的一項(xiàng)基本原則是通過(guò)API提供一切功能。這種編程語(yǔ)言的目標(biāo)不僅是建立一種優(yōu)秀的文本處理語(yǔ)言,而且也想成為一種膠水語(yǔ)言。
Wall進(jìn)一步說(shuō),雖然在90年代Perl非常穩(wěn)定,但也確實(shí)存在一些問(wèn)題。因此,2000年的時(shí)候,Perl團(tuán)隊(duì)決定打破一切,并提出了一套全新的設(shè)計(jì)原則。而且,他們還根據(jù)這些原則,重新設(shè)計(jì)出了Perl 6。其中一些原則做出了正確的選擇——保守地使用括號(hào),否則算上Unicode的括號(hào)也不夠用;無(wú)需蹩腳地重新發(fā)明面向?qū)ο蟮鹊取?/p>
他補(bǔ)充說(shuō),
“大量的重新設(shè)計(jì)就像是說(shuō),我們?cè)撚媚母又我磺??新的設(shè)計(jì)是面向?qū)ο蟮膯??是在詞法作用域內(nèi)重新設(shè)計(jì),還是在更大的范圍內(nèi)?每片信息的正確的支柱是什么?如果我們根本沒(méi)有支柱的話(huà),該如何創(chuàng)建?”
Anders Hejlsberg表示,他遵循了他所接觸過(guò)的所有編程語(yǔ)言的共同原則,即“做某件事情的方法只有一種?!彼J(rèn)為,如果開(kāi)發(fā)人員有四種不同的方法,那么最終很有可能會(huì)選擇錯(cuò)誤的道路,而且要過(guò)很久才能在開(kāi)發(fā)中意識(shí)到這個(gè)錯(cuò)誤。根據(jù)Hejlsberg的說(shuō)法,這就是為什么開(kāi)發(fā)人員總是會(huì)創(chuàng)建一種名為“簡(jiǎn)單的復(fù)雜”的東西,也就是說(shuō)拿到一些復(fù)雜的東西后,通過(guò)簡(jiǎn)單的打包來(lái)掩蓋復(fù)雜性。
與Guido van Rossum的觀(guān)點(diǎn)相似,他進(jìn)一步補(bǔ)充說(shuō),在設(shè)計(jì)一種編程語(yǔ)言的時(shí)候,無(wú)論你做出怎樣的決定,都必須堅(jiān)持到底。在設(shè)計(jì)編程語(yǔ)言的時(shí)候,你需要謹(jǐn)慎地決定“不”將哪些東西引入到這種編程語(yǔ)言中。通常,人們會(huì)向你提出他們的建議,但你無(wú)法真正改變編程語(yǔ)言的本質(zhì)。雖然你無(wú)法真正改變語(yǔ)言的基本性質(zhì),但是你可以進(jìn)行擴(kuò)展?;旧夏阌袃蓚€(gè)選擇:要么堅(jiān)持語(yǔ)言的本質(zhì),要么開(kāi)發(fā)一個(gè)新的編程語(yǔ)言。
編程語(yǔ)言的類(lèi)型系統(tǒng)
在談?wù)摰絇ython決定類(lèi)型的方法時(shí),Guido van Rossum分享了Python首次推出時(shí)的一個(gè)故事。起初,int不是一個(gè)類(lèi),實(shí)際上它是一個(gè)轉(zhuǎn)換函數(shù)。后來(lái),Guido意識(shí)到這是一個(gè)錯(cuò)誤?!拔覀冇泻芏噙@樣的功能,我們意識(shí)到我們犯了一個(gè)錯(cuò)誤,我們向用戶(hù)提供了與內(nèi)置對(duì)象類(lèi)型不同的類(lèi)。”
于是,Python團(tuán)隊(duì)決定重新構(gòu)建Python的整個(gè)類(lèi)型,并進(jìn)行了大量的清理。因此,他們將函數(shù)int更改為類(lèi)int的指定符?,F(xiàn)在,調(diào)用這個(gè)類(lèi)意味著構(gòu)造該類(lèi)的實(shí)例。
James Gosling表示一直以來(lái)他都很注重性能,而提高性能的一個(gè)因素是類(lèi)型系統(tǒng)。在構(gòu)建優(yōu)化編譯器和提前檢查正確性等方面,類(lèi)型系統(tǒng)非常實(shí)用。擁有類(lèi)型系統(tǒng)也有助于為小型設(shè)備構(gòu)建系統(tǒng)的情況。他說(shuō):“為了能在有限的空間內(nèi)工作,你必須了解設(shè)備提供的每一種可能性,而且你知道得越早,就越有可能出色地完成工作?!?/p>
Anders Hejlsberg將類(lèi)型系統(tǒng)視為一種工具。開(kāi)發(fā)人員喜歡他們的IDE,他們習(xí)慣于使用語(yǔ)句的自動(dòng)補(bǔ)齊、重構(gòu)和代碼導(dǎo)航等。這些功能是通過(guò)代碼的語(yǔ)義知識(shí)而實(shí)現(xiàn)的,而這種語(yǔ)義知識(shí)正是由類(lèi)型系統(tǒng)的編譯器提供的。Hejlsberg認(rèn)為,添加類(lèi)型可以大大提高開(kāi)發(fā)人員的生產(chǎn)力,雖然這與我們的直覺(jué)相反。
他補(bǔ)充說(shuō):“我們以為動(dòng)態(tài)語(yǔ)言更容易掌握,因?yàn)槟銛[脫了類(lèi)型的束縛。然而,事實(shí)證明,如果你以非侵入的方式添加類(lèi)型,同時(shí)努力做好類(lèi)型推斷等,那么就可以提高效率。”
談到Perl中的類(lèi)型系統(tǒng)時(shí),Wall表示Perl 5和Perl 6有不同類(lèi)型的系統(tǒng)。在Perl 5中,所有類(lèi)型都會(huì)被視為字符串,即便是數(shù)字或浮點(diǎn)類(lèi)型。該團(tuán)隊(duì)希望在重新設(shè)計(jì)Perl 6的時(shí)候依然保留這個(gè)功能,然而他們意識(shí)到:“如果新用戶(hù)對(duì)可互換性感到困惑,那還好;但如果連計(jì)算機(jī)都感到困惑,那就不妙了?!?/p>
于是,在Perl 6中,Wall和他的團(tuán)隊(duì)希望將其打造成更好的面向?qū)ο笠约案玫暮瘮?shù)式編程語(yǔ)言。為了實(shí)現(xiàn)這一目標(biāo),他們需要一個(gè)非常合理的類(lèi)型系統(tǒng),并在底層建立一個(gè)非常合理的元對(duì)象模型。此外,你還需要非常重視“一切都是對(duì)象,一切都是閉環(huán)”的口號(hào)。
影響編程語(yǔ)言維護(hù)性的因素有哪些?
Guido van Rossum認(rèn)為,如果想加強(qiáng)編程語(yǔ)言的維護(hù)性,那么就需要在靈活性和規(guī)范性之間取得恰當(dāng)?shù)钠胶猓@一點(diǎn)非常重要。雖然對(duì)于小型程序來(lái)說(shuō),動(dòng)態(tài)類(lèi)型更好用,但大型程序則需要采用嚴(yán)格的方法。而且,最好能夠通過(guò)編程語(yǔ)言本身實(shí)現(xiàn)規(guī)則,不要給用戶(hù)留下太多自由發(fā)揮的空間。出于這個(gè)原因,Guido打算在Python中添加類(lèi)似TypeScript的技術(shù)。他補(bǔ)充說(shuō):
“實(shí)際上,TypeScript非常實(shí)用,因此我們也想在Python中添加類(lèi)似的概念。當(dāng)然我們的添加方式會(huì)略有不同,因?yàn)槲覀兊恼Z(yǔ)言環(huán)境不同?!?/p>
除了類(lèi)型系統(tǒng)以外,事實(shí)證明重構(gòu)引擎也非常有用。有了重構(gòu)引擎后,就可以一次執(zhí)行數(shù)百萬(wàn)行代碼的大規(guī)模重構(gòu)了。通常,人們不會(huì)重命名方法,因?yàn)槟愫茈y認(rèn)真看完一段代碼,然后正確地給每一個(gè)變量重命名。如果你有一個(gè)重構(gòu)引擎,那么只需點(diǎn)下幾個(gè)按鈕,輸入新名稱(chēng),然后30秒內(nèi)就可以完成重構(gòu)。
Anders Hejlsberg表示,TypeScript項(xiàng)目源自一些龐大的JavaScript代碼庫(kù)。隨著這些代碼庫(kù)變得越來(lái)越大,維護(hù)工作變得異常艱難。后來(lái)基本上這些代碼庫(kù)變成了“只寫(xiě)的代碼”。他補(bǔ)充說(shuō),因此我們需要理解代碼的語(yǔ)義,而這個(gè)過(guò)程也降低了重構(gòu)工作的難度。他表示:“這種語(yǔ)義的理解需要一個(gè)類(lèi)型系統(tǒng),而且在你開(kāi)始添加類(lèi)型系統(tǒng)時(shí),你還可以添加代碼的文檔?!盬all也支持“良好的詞法作用域有助于重構(gòu)”的觀(guān)點(diǎn)。
編程語(yǔ)言設(shè)計(jì)的未來(lái)
在談?wù)摰骄幊陶Z(yǔ)言設(shè)計(jì)的未來(lái)時(shí),James Gosling分享了編程中一個(gè)未充分探索的領(lǐng)域——編寫(xiě)使用GPU的代碼。他強(qiáng)調(diào)說(shuō),目前我們的編程語(yǔ)言都無(wú)法直接利用GPU,我們應(yīng)該加大這個(gè)領(lǐng)域的發(fā)展。
Anders Hejlsberg表示,編程語(yǔ)言不會(huì)像硬件或所有其他技術(shù)那樣快速地變化。就發(fā)展速度而論,編程語(yǔ)言更像是數(shù)學(xué)和人腦。他說(shuō):“我們?nèi)匀辉谑褂?0年前發(fā)明的語(yǔ)言進(jìn)行編程,所有的函數(shù)式編程原理都是50多年前的研究成果。”
但是,他也相信,如今的編程語(yǔ)言趨于多范式,不會(huì)嚴(yán)格區(qū)分面向?qū)ο缶幊袒蚝瘮?shù)式編程等類(lèi)別。
“語(yǔ)言正在走向多范式。我覺(jué)得我們不應(yīng)該再說(shuō)我只喜歡面向?qū)ο蟮木幊?、命令式編程或函?shù)式編程語(yǔ)言?!?/p>
如今,更重要的是我們需要了解最新的研究、新思維和新范式,并優(yōu)雅地將這些新思想融入到我們的編程風(fēng)格中。
讀者福利:Java架構(gòu)師進(jìn)階學(xué)習(xí)指南
如果你是Java程序員,對(duì)于上訴所說(shuō)的技術(shù)提升很感興趣,可以加QQ群:867923845點(diǎn)擊立即加入免費(fèi)獲取筆者整理的適合1~5年的Java工程師學(xué)習(xí)參考的資源。還有大量面試題以及解析。歡迎各位工程師加入,合理利用自己每一分每一秒的時(shí)間來(lái)學(xué)習(xí)提升自己,不要再用"沒(méi)有時(shí)間“來(lái)掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來(lái)的自己一個(gè)交代!
還有更多你不知道的面試題資料哦(含答案)
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。