溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

四大編程語(yǔ)言之父聚首六合網(wǎng)站架設(shè),編程語(yǔ)言要變天?

發(fā)布時(shí)間:2020-08-05 10:20:42 來源:網(wǎng)絡(luò) 閱讀:165 作者:kelsma 欄目:云計(jì)算

編程語(yǔ)言的優(yōu)劣六合網(wǎng)站架設(shè) <Q> 2952777280【源碼鏈接】 hxforum.com ,一直眾說紛紜。倘若編程語(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ì)與未來發(fā)展。

4月初,在Puget Sound Programming Python(簡(jiǎn)稱PuPPy)舉辦的第一屆年度慈善活動(dòng)中,四位傳奇的編程語(yǔ)言創(chuàng)始人聚集在一起就編程語(yǔ)言設(shè)計(jì)的過去和未來展開了熱烈的討論。此次活動(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的開發(fā);

Larry Wall:Perl的創(chuàng)始人。

此次討論會(huì)由Carol Willing主持,目前她是Jupyter項(xiàng)目的指導(dǎo)委員會(huì)成員和開發(fā)人員。她還是首屆Python指導(dǎo)委員會(huì)成員,Python軟件基金會(huì)研究員和前任主任。

編程語(yǔ)言設(shè)計(jì)的關(guān)鍵原則
小組成員提出的第一個(gè)問題是:“編程語(yǔ)言設(shè)計(jì)的原理是什么?”

Guido van Rossum認(rèn)為:

編程語(yǔ)言的設(shè)計(jì)與J·K·羅琳撰寫她的哈利波特系列叢書的方式非常相似。

他解釋說,J·K·羅琳是一個(gè)天才,她在第一本哈利波特書中提到的一些細(xì)節(jié)與第六和第七本書中重要的情節(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)格等等。但是,無論我們做了何種決定,都必須堅(jiān)持到底,將來我們需要像J·K·羅琳一樣,找到使用這些細(xì)節(jié)的新方式。

他補(bǔ)充說道:“一方面,在設(shè)計(jì)編程語(yǔ)言的工作中,最開始你要做出一系列的選擇,為你的故事發(fā)展埋下伏筆。另一方面,設(shè)計(jì)編程語(yǔ)言的藝術(shù)在于,你需要不斷回顧你的故事,并展開奇思妙想,以你始料未及的方式推進(jìn)故事發(fā)展?!?/p>

當(dāng)談?wù)摰絁ames Gosling創(chuàng)建Java的過程,以及他所遵循的設(shè)計(jì)原則時(shí),他只是淡淡地說:“Java的出現(xiàn)并不像個(gè)人熱愛的項(xiàng)目那樣。其實(shí)我們只是想試著建立一個(gè)原型?!碑?dāng)時(shí),James Gosling和他的團(tuán)隊(duì)開展了一個(gè)涉及嵌入式系統(tǒng)領(lǐng)域的項(xiàng)目。為此,他們與許多為嵌入式系統(tǒng)構(gòu)建軟件的開發(fā)人員進(jìn)行了交談,并了解了他們的工作流程。

該項(xiàng)目大約有十幾個(gè)人,Gosling負(fù)責(zé)從編程語(yǔ)言的角度來盡量簡(jiǎn)化項(xiàng)目。他補(bǔ)充說:“最初我們只想做比C更好的東西,但是后來就失去了控制,最終項(xiàng)目的其余部分只是提供了素材?!彼摇癑ava”從該項(xiàng)目中活了下來?;旧显摼幊陶Z(yǔ)言就是為了解決身居數(shù)據(jù)中心之外的人的問題,這些人常常為網(wǎng)絡(luò)、安全性和可靠性等問題困擾。

Larry Wall覺得自己更像“語(yǔ)言學(xué)家”,而不是計(jì)算機(jī)科學(xué)家。他想創(chuàng)造一種更接近自然語(yǔ)言的編程語(yǔ)言。他舉了一個(gè)例子:“就好像我們不必讓每個(gè)人都走進(jìn)大學(xué)校園才能決定他們各自的去向,我們可以觀察人們想去哪里,然后設(shè)置通向這些地方的捷徑?!盤erl創(chuàng)建背后的一項(xiàng)基本原則是通過API提供一切功能。這種編程語(yǔ)言的目標(biāo)不僅是建立一種優(yōu)秀的文本處理語(yǔ)言,而且也想成為一種膠水語(yǔ)言。

Wall進(jìn)一步說,雖然在90年代Perl非常穩(wěn)定,但也確實(shí)存在一些問題。因此,2000年的時(shí)候,Perl團(tuán)隊(duì)決定打破一切,并提出了一套全新的設(shè)計(jì)原則。而且,他們還根據(jù)這些原則,重新設(shè)計(jì)出了Perl 6。其中一些原則做出了正確的選擇——保守地使用括號(hào),否則算上Unicode的括號(hào)也不夠用;無需蹩腳地重新發(fā)明面向?qū)ο蟮鹊取?/p>

他補(bǔ)充說,

“大量的重新設(shè)計(jì)就像是說,我們?cè)撚媚母又我磺校啃碌脑O(shè)計(jì)是面向?qū)ο蟮膯??是在詞法作用域內(nèi)重新設(shè)計(jì),還是在更大的范圍內(nèi)?每片信息的正確的支柱是什么?如果我們根本沒有支柱的話,該如何創(chuàng)建?”

Anders Hejlsberg表示,他遵循了他所接觸過的所有編程語(yǔ)言的共同原則,即“做某件事情的方法只有一種?!彼J(rèn)為,如果開發(fā)人員有四種不同的方法,那么最終很有可能會(huì)選擇錯(cuò)誤的道路,而且要過很久才能在開發(fā)中意識(shí)到這個(gè)錯(cuò)誤。根據(jù)Hejlsberg的說法,這就是為什么開發(fā)人員總是會(huì)創(chuàng)建一種名為“簡(jiǎn)單的復(fù)雜”的東西,也就是說拿到一些復(fù)雜的東西后,通過簡(jiǎn)單的打包來掩蓋復(fù)雜性。

與Guido van Rossum的觀點(diǎn)相似,他進(jìn)一步補(bǔ)充說,在設(shè)計(jì)一種編程語(yǔ)言的時(shí)候,無論你做出怎樣的決定,都必須堅(jiān)持到底。在設(shè)計(jì)編程語(yǔ)言的時(shí)候,你需要謹(jǐn)慎地決定“不”將哪些東西引入到這種編程語(yǔ)言中。通常,人們會(huì)向你提出他們的建議,但你無法真正改變編程語(yǔ)言的本質(zhì)。雖然你無法真正改變語(yǔ)言的基本性質(zhì),但是你可以進(jìn)行擴(kuò)展?;旧夏阌袃蓚€(gè)選擇:要么堅(jiān)持語(yǔ)言的本質(zhì),要么開發(fā)一個(gè)新的編程語(yǔ)言。

編程語(yǔ)言的類型系統(tǒng)
在談?wù)摰絇ython決定類型的方法時(shí),Guido van Rossum分享了Python首次推出時(shí)的一個(gè)故事。起初,int不是一個(gè)類,實(shí)際上它是一個(gè)轉(zhuǎn)換函數(shù)。后來,Guido意識(shí)到這是一個(gè)錯(cuò)誤?!拔覀冇泻芏噙@樣的功能,我們意識(shí)到我們犯了一個(gè)錯(cuò)誤,我們向用戶提供了與內(nèi)置對(duì)象類型不同的類。”

于是,Python團(tuán)隊(duì)決定重新構(gòu)建Python的整個(gè)類型,并進(jìn)行了大量的清理。因此,他們將函數(shù)int更改為類int的指定符?,F(xiàn)在,調(diào)用這個(gè)類意味著構(gòu)造該類的實(shí)例。

James Gosling表示一直以來他都很注重性能,而提高性能的一個(gè)因素是類型系統(tǒng)。在構(gòu)建優(yōu)化編譯器和提前檢查正確性等方面,類型系統(tǒng)非常實(shí)用。擁有類型系統(tǒng)也有助于為小型設(shè)備構(gòu)建系統(tǒng)的情況。他說:“為了能在有限的空間內(nèi)工作,你必須了解設(shè)備提供的每一種可能性,而且你知道得越早,就越有可能出色地完成工作?!?/p>

Anders Hejlsberg將類型系統(tǒng)視為一種工具。開發(fā)人員喜歡他們的IDE,他們習(xí)慣于使用語(yǔ)句的自動(dòng)補(bǔ)齊、重構(gòu)和代碼導(dǎo)航等。這些功能是通過代碼的語(yǔ)義知識(shí)而實(shí)現(xiàn)的,而這種語(yǔ)義知識(shí)正是由類型系統(tǒng)的編譯器提供的。Hejlsberg認(rèn)為,添加類型可以大大提高開發(fā)人員的生產(chǎn)力,雖然這與我們的直覺相反。

他補(bǔ)充說:“我們以為動(dòng)態(tài)語(yǔ)言更容易掌握,因?yàn)槟銛[脫了類型的束縛。然而,事實(shí)證明,如果你以非侵入的方式添加類型,同時(shí)努力做好類型推斷等,那么就可以提高效率?!?/p>

談到Perl中的類型系統(tǒng)時(shí),Wall表示Perl 5和Perl 6有不同類型的系統(tǒng)。在Perl 5中,所有類型都會(huì)被視為字符串,即便是數(shù)字或浮點(diǎn)類型。該團(tuán)隊(duì)希望在重新設(shè)計(jì)Perl 6的時(shí)候依然保留這個(gè)功能,然而他們意識(shí)到:“如果新用戶對(duì)可互換性感到困惑,那還好;但如果連計(jì)算機(jī)都感到困惑,那就不妙了?!?/p>

于是,在Perl 6中,Wall和他的團(tuán)隊(duì)希望將其打造成更好的面向?qū)ο笠约案玫暮瘮?shù)式編程語(yǔ)言。為了實(shí)現(xiàn)這一目標(biāo),他們需要一個(gè)非常合理的類型系統(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ì)于小型程序來說,動(dòng)態(tài)類型更好用,但大型程序則需要采用嚴(yán)格的方法。而且,最好能夠通過編程語(yǔ)言本身實(shí)現(xiàn)規(guī)則,不要給用戶留下太多自由發(fā)揮的空間。出于這個(gè)原因,Guido打算在Python中添加類似TypeScript的技術(shù)。他補(bǔ)充說:

“實(shí)際上,TypeScript非常實(shí)用,因此我們也想在Python中添加類似的概念。當(dāng)然我們的添加方式會(huì)略有不同,因?yàn)槲覀兊恼Z(yǔ)言環(huán)境不同?!?/p>

除了類型系統(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è)按鈕,輸入新名稱,然后30秒內(nèi)就可以完成重構(gòu)。

Anders Hejlsberg表示,TypeScript項(xiàng)目源自一些龐大的JavaScript代碼庫(kù)。隨著這些代碼庫(kù)變得越來越大,維護(hù)工作變得異常艱難。后來基本上這些代碼庫(kù)變成了“只寫的代碼”。他補(bǔ)充說,因此我們需要理解代碼的語(yǔ)義,而這個(gè)過程也降低了重構(gòu)工作的難度。他表示:“這種語(yǔ)義的理解需要一個(gè)類型系統(tǒng),而且在你開始添加類型系統(tǒng)時(shí),你還可以添加代碼的文檔?!盬all也支持“良好的詞法作用域有助于重構(gòu)”的觀點(diǎn)。

編程語(yǔ)言設(shè)計(jì)的未來
在談?wù)摰骄幊陶Z(yǔ)言設(shè)計(jì)的未來時(shí),James Gosling分享了編程中一個(gè)未充分探索的領(lǐng)域——編寫使用GPU的代碼。他強(qiáng)調(diào)說,目前我們的編程語(yǔ)言都無法直接利用GPU,我們應(yīng)該加大這個(gè)領(lǐng)域的發(fā)展。

Anders Hejlsberg表示,編程語(yǔ)言不會(huì)像硬件或所有其他技術(shù)那樣快速地變化。就發(fā)展速度而論,編程語(yǔ)言更像是數(shù)學(xué)和人腦。他說:“我們?nèi)匀辉谑褂?0年前發(fā)明的語(yǔ)言進(jìn)行編程,所有的函數(shù)式編程原理都是50多年前的研究成果?!?/p>

但是,他也相信,如今的編程語(yǔ)言趨于多范式,不會(huì)嚴(yán)格區(qū)分面向?qū)ο缶幊袒蚝瘮?shù)式編程等類別。

“語(yǔ)言正在走向多范式。我覺得我們不應(yīng)該再說我只喜歡面向?qū)ο蟮木幊?、命令式編程或函?shù)式編程語(yǔ)言?!?/p>

如今,更重要的是我們需要了解最新的研究、新思維和新范式,并優(yōu)雅地將這些新思想融入到我們的編程風(fēng)格中。

讀者福利:Java架構(gòu)師進(jìn)階學(xué)習(xí)指南

如果你是Java程序員,對(duì)于上訴所說的技術(shù)提升很感興趣,可以加QQ群:867923845點(diǎn)擊立即加入免費(fèi)獲取筆者整理的適合1~5年的Java工程師學(xué)習(xí)參考的資源。還有大量面試題以及解析。歡迎各位工程師加入,合理利用自己每一分每一秒的時(shí)間來學(xué)習(xí)提升自己,不要再用"沒有時(shí)間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個(gè)交代!

還有更多你不知道的面試題資料哦(含答案)

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI