您好,登錄后才能下訂單哦!
編程語言的優劣六合網站架設 <Q> 2952777280【源碼鏈接】 hxforum.com ,一直眾說紛紜。倘若編程語言的創造者們相聚一起共談自己所設計的語言,是否又會掀起一番“腥風血雨”?
其實就在近日,Python 創始人 Guido van Rossum、Java 創始人 James Gosling、C# 創始人 Anders Hejlsberg、Perl 創始人 Larry Wall 四位技術大拿相聚西雅圖,共同探討編程語言的設計與未來發展。
4月初,在Puget Sound Programming Python(簡稱PuPPy)舉辦的第一屆年度慈善活動中,四位傳奇的編程語言創始人聚集在一起就編程語言設計的過去和未來展開了熱烈的討論。此次活動旨在為面向所有人的計算機科學教育(Computer Science For All,美國前總統奧巴馬當年年初提出的新計劃,旨在美國教育體系中普及計算機科學)籌集資金。
與會的小組成員包括以下流行編程語言的創始人:
Guido van Rossum:Python的創始人;
James Gosling:Java編程語言的創始人兼首席設計師;
Anders Hejlsberg:Turbo Pascal的原作者,他也致力于C#和TypeScript的開發;
Larry Wall:Perl的創始人。
此次討論會由Carol Willing主持,目前她是Jupyter項目的指導委員會成員和開發人員。她還是首屆Python指導委員會成員,Python軟件基金會研究員和前任主任。
編程語言設計的關鍵原則
小組成員提出的第一個問題是:“編程語言設計的原理是什么?”
Guido van Rossum認為:
編程語言的設計與J·K·羅琳撰寫她的哈利波特系列叢書的方式非常相似。
他解釋說,J·K·羅琳是一個天才,她在第一本哈利波特書中提到的一些細節與第六和第七本書中重要的情節相呼應。
在解釋這與編程語言設計之間的關系時,他表示:“在編程語言設計中亦是如此,我們需要做到首尾呼應。”在設計編程語言時,首先我們會承諾某些細節,例如我們想要使用的關鍵字,我們想要遵循的編碼風格等等。但是,無論我們做了何種決定,都必須堅持到底,將來我們需要像J·K·羅琳一樣,找到使用這些細節的新方式。
他補充說道:“一方面,在設計編程語言的工作中,最開始你要做出一系列的選擇,為你的故事發展埋下伏筆。另一方面,設計編程語言的藝術在于,你需要不斷回顧你的故事,并展開奇思妙想,以你始料未及的方式推進故事發展。”
當談論到James Gosling創建Java的過程,以及他所遵循的設計原則時,他只是淡淡地說:“Java的出現并不像個人熱愛的項目那樣。其實我們只是想試著建立一個原型。”當時,James Gosling和他的團隊開展了一個涉及嵌入式系統領域的項目。為此,他們與許多為嵌入式系統構建軟件的開發人員進行了交談,并了解了他們的工作流程。
該項目大約有十幾個人,Gosling負責從編程語言的角度來盡量簡化項目。他補充說:“最初我們只想做比C更好的東西,但是后來就失去了控制,最終項目的其余部分只是提供了素材。”所幸“Java”從該項目中活了下來。基本上該編程語言就是為了解決身居數據中心之外的人的問題,這些人常常為網絡、安全性和可靠性等問題困擾。
Larry Wall覺得自己更像“語言學家”,而不是計算機科學家。他想創造一種更接近自然語言的編程語言。他舉了一個例子:“就好像我們不必讓每個人都走進大學校園才能決定他們各自的去向,我們可以觀察人們想去哪里,然后設置通向這些地方的捷徑。”Perl創建背后的一項基本原則是通過API提供一切功能。這種編程語言的目標不僅是建立一種優秀的文本處理語言,而且也想成為一種膠水語言。
Wall進一步說,雖然在90年代Perl非常穩定,但也確實存在一些問題。因此,2000年的時候,Perl團隊決定打破一切,并提出了一套全新的設計原則。而且,他們還根據這些原則,重新設計出了Perl 6。其中一些原則做出了正確的選擇——保守地使用括號,否則算上Unicode的括號也不夠用;無需蹩腳地重新發明面向對象等等。
他補充說,
“大量的重新設計就像是說,我們該用哪根柱子支撐一切?新的設計是面向對象的嗎?是在詞法作用域內重新設計,還是在更大的范圍內?每片信息的正確的支柱是什么?如果我們根本沒有支柱的話,該如何創建?”
Anders Hejlsberg表示,他遵循了他所接觸過的所有編程語言的共同原則,即“做某件事情的方法只有一種。”他認為,如果開發人員有四種不同的方法,那么最終很有可能會選擇錯誤的道路,而且要過很久才能在開發中意識到這個錯誤。根據Hejlsberg的說法,這就是為什么開發人員總是會創建一種名為“簡單的復雜”的東西,也就是說拿到一些復雜的東西后,通過簡單的打包來掩蓋復雜性。
與Guido van Rossum的觀點相似,他進一步補充說,在設計一種編程語言的時候,無論你做出怎樣的決定,都必須堅持到底。在設計編程語言的時候,你需要謹慎地決定“不”將哪些東西引入到這種編程語言中。通常,人們會向你提出他們的建議,但你無法真正改變編程語言的本質。雖然你無法真正改變語言的基本性質,但是你可以進行擴展。基本上你有兩個選擇:要么堅持語言的本質,要么開發一個新的編程語言。
編程語言的類型系統
在談論到Python決定類型的方法時,Guido van Rossum分享了Python首次推出時的一個故事。起初,int不是一個類,實際上它是一個轉換函數。后來,Guido意識到這是一個錯誤。“我們有很多這樣的功能,我們意識到我們犯了一個錯誤,我們向用戶提供了與內置對象類型不同的類。”
于是,Python團隊決定重新構建Python的整個類型,并進行了大量的清理。因此,他們將函數int更改為類int的指定符。現在,調用這個類意味著構造該類的實例。
James Gosling表示一直以來他都很注重性能,而提高性能的一個因素是類型系統。在構建優化編譯器和提前檢查正確性等方面,類型系統非常實用。擁有類型系統也有助于為小型設備構建系統的情況。他說:“為了能在有限的空間內工作,你必須了解設備提供的每一種可能性,而且你知道得越早,就越有可能出色地完成工作。”
Anders Hejlsberg將類型系統視為一種工具。開發人員喜歡他們的IDE,他們習慣于使用語句的自動補齊、重構和代碼導航等。這些功能是通過代碼的語義知識而實現的,而這種語義知識正是由類型系統的編譯器提供的。Hejlsberg認為,添加類型可以大大提高開發人員的生產力,雖然這與我們的直覺相反。
他補充說:“我們以為動態語言更容易掌握,因為你擺脫了類型的束縛。然而,事實證明,如果你以非侵入的方式添加類型,同時努力做好類型推斷等,那么就可以提高效率。”
談到Perl中的類型系統時,Wall表示Perl 5和Perl 6有不同類型的系統。在Perl 5中,所有類型都會被視為字符串,即便是數字或浮點類型。該團隊希望在重新設計Perl 6的時候依然保留這個功能,然而他們意識到:“如果新用戶對可互換性感到困惑,那還好;但如果連計算機都感到困惑,那就不妙了。”
于是,在Perl 6中,Wall和他的團隊希望將其打造成更好的面向對象以及更好的函數式編程語言。為了實現這一目標,他們需要一個非常合理的類型系統,并在底層建立一個非常合理的元對象模型。此外,你還需要非常重視“一切都是對象,一切都是閉環”的口號。
影響編程語言維護性的因素有哪些?
Guido van Rossum認為,如果想加強編程語言的維護性,那么就需要在靈活性和規范性之間取得恰當的平衡,這一點非常重要。雖然對于小型程序來說,動態類型更好用,但大型程序則需要采用嚴格的方法。而且,最好能夠通過編程語言本身實現規則,不要給用戶留下太多自由發揮的空間。出于這個原因,Guido打算在Python中添加類似TypeScript的技術。他補充說:
“實際上,TypeScript非常實用,因此我們也想在Python中添加類似的概念。當然我們的添加方式會略有不同,因為我們的語言環境不同。”
除了類型系統以外,事實證明重構引擎也非常有用。有了重構引擎后,就可以一次執行數百萬行代碼的大規模重構了。通常,人們不會重命名方法,因為你很難認真看完一段代碼,然后正確地給每一個變量重命名。如果你有一個重構引擎,那么只需點下幾個按鈕,輸入新名稱,然后30秒內就可以完成重構。
Anders Hejlsberg表示,TypeScript項目源自一些龐大的JavaScript代碼庫。隨著這些代碼庫變得越來越大,維護工作變得異常艱難。后來基本上這些代碼庫變成了“只寫的代碼”。他補充說,因此我們需要理解代碼的語義,而這個過程也降低了重構工作的難度。他表示:“這種語義的理解需要一個類型系統,而且在你開始添加類型系統時,你還可以添加代碼的文檔。”Wall也支持“良好的詞法作用域有助于重構”的觀點。
編程語言設計的未來
在談論到編程語言設計的未來時,James Gosling分享了編程中一個未充分探索的領域——編寫使用GPU的代碼。他強調說,目前我們的編程語言都無法直接利用GPU,我們應該加大這個領域的發展。
Anders Hejlsberg表示,編程語言不會像硬件或所有其他技術那樣快速地變化。就發展速度而論,編程語言更像是數學和人腦。他說:“我們仍然在使用50年前發明的語言進行編程,所有的函數式編程原理都是50多年前的研究成果。”
但是,他也相信,如今的編程語言趨于多范式,不會嚴格區分面向對象編程或函數式編程等類別。
“語言正在走向多范式。我覺得我們不應該再說我只喜歡面向對象的編程、命令式編程或函數式編程語言。”
如今,更重要的是我們需要了解最新的研究、新思維和新范式,并優雅地將這些新思想融入到我們的編程風格中。
讀者福利:Java架構師進階學習指南
如果你是Java程序員,對于上訴所說的技術提升很感興趣,可以加QQ群:867923845點擊立即加入免費獲取筆者整理的適合1~5年的Java工程師學習參考的資源。還有大量面試題以及解析。歡迎各位工程師加入,合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!
還有更多你不知道的面試題資料哦(含答案)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。