歡迎光臨
每天分享高質量文章

編程語言之父談語言設計,龜叔大贊TypeScript

爭論哪門編程語言孰優孰劣,長期以來都是程式員樂此不疲的“娛樂活動”。之所以說是娛樂活動,因為這些爭論到最後往往只是各自在發泄情緒,再則就是,脫離使用場景去討論所謂哪門語言更好並沒意義。

但如果讓編程語言作者坐在一起討論編程語言會產生怎樣的反應,水平是否會比我們高到不知哪裡去?

本月初由西雅圖 Python 開發者舉辦的首屆年度慈善活動(Puget Sound Programming Python, PuPPy)邀請到了 Java, Python, TypeScript 和 Perl 創始人共同討論編程語言設計的過去和未來。

PuPPy 活動旨在為 Computer Science for All (CSforALL) 籌集資金,該組織致力於使計算機課程成為教育中不可或缺的一部分。

參與本次討論的嘉賓為四位編程語言創始人,分別是:

  • Guido van Rossum,Python 作者
  • James Gosling,Java 作者和首席設計師
  • Anders Hejlsberg,Turbo Pascal 編譯器的主要作者,Delphi、C# 和 TypeScript 開發者
  • Larry Wall,Perl 作者

活動中這四位編程語言之父的談論主題包括設計編程語言的主要原則、編程語言的型別系統、編程語言的可維護性和編程語言設計的未來

下麵不妨看看這些開山鼻祖級別的大牛,對編程語言設計有怎樣的看法。

設計編程語言的主要原則

在討論這個話題時,Python 之父 Guido van Rossum 認為,設計編程語言與 JK羅琳寫《哈利波特》有許多共通之處,羅琳為整部小說打造的架構是天才的操作,她在第一本書中描寫的某些細節在第六和第七本中成了重要的情節。這和設計編程語言一樣 —— 需要關註某些細節,比如關鍵字和編碼風格但無論決定什麼都必須保證在未來找到使用這些細節的新方法,就像JK羅琳一樣。

Java 作者 James Gosling 被問到 Java 遵守的設計原則時表示,Java 並不是由個人熱情驅動的專案,最初只是計劃構建一個原型(當時 Gosling 和他的團隊正在進行一個涉及嵌入式系統領域的專案,Gosling 負責從編程語言的角度來簡化工作),一開始只是希望要做得比 C 語言更好,然而後來失控了,專案的其它部分變成了某種背景,最終只留下 Java。它基本上是為了幫助開發者解決關於資料的問題,這些問題往往是因較差的網絡、安全性和可靠性而導致。

Perl 作者 Larry Wall 稱自己是“語言學家”而不是計算機科學家,他希望創造出類似自然語言的語言。對此,Larry Wall 舉了一個例子進行解釋,與其讓人們進入大學校園去決定他們走向何處,倒不如通過觀察他們想走的路,然後在這些地方鋪設捷徑Perl 的基本設計原則是為所有事物都提供 API,標的是成為出色的文本處理語言,同時也是膠水語言。

Anders Hejlsberg 表示他參與開發編程語言的過程中都會遵守一個原則:「一個方法只做一件事」。Hejlsberg 認為過多的方法很可能會導致誤入歧途,併在開發後期才會意識到問題。與 Guido 的觀點類似,Hejlsberg 也認為在設計編程語言時,所做的任何決定都必須進行全域性考慮,與之共存的理念理應貫穿整個開發過程。

編程語言的型別系統

Java 之父 Gosling 表示在打造 Java 的雛形時就已重點關註性能問題,而提高性能的一個關鍵因素就是型別系統,這對構建優化編譯器和提前進行正確性檢查等問題非常有用。

Hejlsberg 將型別系統視為“工具性”的功能,開發者喜歡 IDE 提供的代碼補全、重構和代碼導航這些功能,而這背後都離不開具有型別系統的編譯器。Hejlsberg 也不認為編程語言添加了型別系統就能提升開發者的生產力,他覺得開發者使用動態語言,然後以非侵入性方式來添加型別特性反而能提高開發效率。

編程語言的可維護性

Guido 認為,如果希望編程語言具有可維護性,在靈活和規範的方法之間保持平衡非常重要。動態語言對於開發小型專案非常有用,但大型專案需要採用嚴格的型別檢查,因此如果編程語言本身能夠實現這種平衡就最好不過了。這就是為什麼 Guido 計劃在 Python 中添加類似 TypeScript 的技術。

除了型別系統,重構引擎對編程語言的可維護性也至關重要,通過它可以更容易地同時執行數百萬行代碼的大規模重構。Hejlsberg 表示 TypeScript 的起源正是日益龐大的 JavaScript 代碼庫,代碼庫越大,維護它們就變得越加困難,這些代碼逐漸成了 “write-only code”。為了易於重構,需要對代碼進行語意理解,而這些語意理解的工作恰好需要一個型別系統。

編程語言設計的未來

當被問及編程設計的未來時,James Gosling 分享了一個尚未充分探索的領域 —— 為 GPU 編寫代碼他特別指出目前尚沒有任何編程語言可以像 GPU 那樣工作,而在該領域有很大的發展空間。

TypeScript 核心開發者 Anders Hejlsberg 表示,編程語言的發展速度不會像硬體或其他技術一樣快,在演進方面,編程語言更像是數學和大腦。因為直到今天,我們還在用 50 年前發明的語言在編程,而函式式編程的原則幾乎也都是在 50 年前提出的。另外,Hejlsberg 也認為不能將簡單地把語言分為面向物件或函式式編程這樣的單獨類別,因為現代編程語言正逐漸成為多範式編程語言。

    已同步到看一看
    赞(0)

    分享創造快樂