编程语言之父谈语言设计
英文原文:A Conversation with the Creators Behind Python, Java, TypeScript, and Perl
爭(zhēng)論哪門(mén)編程語(yǔ)言孰優(yōu)孰劣,長(zhǎng)期以來(lái)都是程序員樂(lè)此不疲的“娛樂(lè)活動(dòng)”。之所以說(shuō)是娛樂(lè)活動(dòng),因?yàn)檫@些爭(zhēng)論到最后往往只是各自在發(fā)泄情緒,再則就是,脫離使用場(chǎng)景去討論所謂哪門(mén)語(yǔ)言更好并沒(méi)意義。
但如果讓編程語(yǔ)言作者坐在一起討論編程語(yǔ)言會(huì)產(chǎn)生怎樣的反應(yīng),水平是否會(huì)比我們高到不知哪里去?
本月初由西雅圖 Python 開(kāi)發(fā)者舉辦的首屆年度慈善活動(dòng)(Puget Sound Programming Python, PuPPy)邀請(qǐng)到了 Java, Python, TypeScript 和 Perl 創(chuàng)始人共同討論編程語(yǔ)言設(shè)計(jì)的過(guò)去和未來(lái)。
PuPPy 活動(dòng)旨在為 Computer Science for All (CSforALL) 籌集資金,該組織致力于使計(jì)算機(jī)課程成為教育中不可或缺的一部分。
參與本次討論的嘉賓為四位編程語(yǔ)言創(chuàng)始人,分別是:
-
Guido van Rossum:Python 作者
-
James Gosling:Java 作者和首席設(shè)計(jì)師
-
Anders Hejlsberg:Turbo Pascal 編譯器的主要作者,Delphi、C# 和 TypeScript 開(kāi)發(fā)者
-
Larry Wall:Perl 作者
活動(dòng)中這四位編程語(yǔ)言之父的談?wù)撝黝}包括設(shè)計(jì)編程語(yǔ)言的主要原則、編程語(yǔ)言的類(lèi)型系統(tǒng)、編程語(yǔ)言的可維護(hù)性和編程語(yǔ)言設(shè)計(jì)的未來(lái)。
下面不妨看看這些開(kāi)山鼻祖級(jí)別的大牛,對(duì)編程語(yǔ)言設(shè)計(jì)有怎樣的看法。
設(shè)計(jì)編程語(yǔ)言的主要原則
在討論這個(gè)話(huà)題時(shí),Python 之父 Guido van Rossum 認(rèn)為,設(shè)計(jì)編程語(yǔ)言與 JK 羅琳寫(xiě)《哈利波特》有許多共通之處,羅琳為整部小說(shuō)打造的架構(gòu)是天才的操作,她在第一本書(shū)中描寫(xiě)的某些細(xì)節(jié)在第六和第七本中成了重要的情節(jié)。這和設(shè)計(jì)編程語(yǔ)言一樣 ——需要關(guān)注某些細(xì)節(jié),比如關(guān)鍵字和編碼風(fēng)格。但無(wú)論決定什么都必須保證在未來(lái)找到使用這些細(xì)節(jié)的新方法,就像 JK 羅琳一樣。
Java 作者 James Gosling 被問(wèn)到 Java 遵守的設(shè)計(jì)原則時(shí)表示,Java 并不是由個(gè)人熱情驅(qū)動(dòng)的項(xiàng)目,最初只是計(jì)劃構(gòu)建一個(gè)原型(當(dāng)時(shí) Gosling 和他的團(tuán)隊(duì)正在進(jìn)行一個(gè)涉及嵌入式系統(tǒng)領(lǐng)域的項(xiàng)目,Gosling 負(fù)責(zé)從編程語(yǔ)言的角度來(lái)簡(jiǎn)化工作),一開(kāi)始只是希望要做得比 C 語(yǔ)言更好,然而后來(lái)失控了,項(xiàng)目的其它部分變成了某種背景,最終只留下 Java 。它基本上是為了幫助開(kāi)發(fā)者解決關(guān)于數(shù)據(jù)的問(wèn)題,這些問(wèn)題往往是因較差的網(wǎng)絡(luò)、安全性和可靠性而導(dǎo)致。
Perl 作者 Larry Wall 稱(chēng)自己是“語(yǔ)言學(xué)家”而不是計(jì)算機(jī)科學(xué)家,他希望創(chuàng)造出類(lèi)似自然語(yǔ)言的語(yǔ)言。對(duì)此,Larry Wall 舉了一個(gè)例子進(jìn)行解釋?zhuān)c其讓人們進(jìn)入大學(xué)校園去決定他們走向何處,倒不如通過(guò)觀(guān)察他們想走的路,然后在這些地方鋪設(shè)捷徑。Perl 的基本設(shè)計(jì)原則是為所有事物都提供 API,目標(biāo)是成為出色的文本處理語(yǔ)言,同時(shí)也是膠水語(yǔ)言。
Anders Hejlsberg 表示他參與開(kāi)發(fā)編程語(yǔ)言的過(guò)程中都會(huì)遵守一個(gè)原則:「一個(gè)方法只做一件事」。Hejlsberg 認(rèn)為過(guò)多的方法很可能會(huì)導(dǎo)致誤入歧途,并在開(kāi)發(fā)后期才會(huì)意識(shí)到問(wèn)題。與 Guido 的觀(guān)點(diǎn)類(lèi)似,Hejlsberg 也認(rèn)為在設(shè)計(jì)編程語(yǔ)言時(shí),所做的任何決定都必須進(jìn)行全局考慮,與之共存的理念理應(yīng)貫穿整個(gè)開(kāi)發(fā)過(guò)程。
編程語(yǔ)言的類(lèi)型系統(tǒng)
Java 之父 Gosling 表示在打造 Java 的雛形時(shí)就已重點(diǎn)關(guān)注性能問(wèn)題,而提高性能的一個(gè)關(guān)鍵因素就是類(lèi)型系統(tǒng),這對(duì)構(gòu)建優(yōu)化編譯器和提前進(jìn)行正確性檢查等問(wèn)題非常有用。
Hejlsberg 將類(lèi)型系統(tǒng)視為“工具性”的功能,開(kāi)發(fā)者喜歡 IDE 提供的代碼補(bǔ)全、重構(gòu)和代碼導(dǎo)航這些功能,而這背后都離不開(kāi)具有類(lèi)型系統(tǒng)的編譯器。Hejlsberg 也不認(rèn)為編程語(yǔ)言添加了類(lèi)型系統(tǒng)就能提升開(kāi)發(fā)者的生產(chǎn)力,他覺(jué)得開(kāi)發(fā)者使用動(dòng)態(tài)語(yǔ)言,然后以非侵入性方式來(lái)添加類(lèi)型特性反而能提高開(kāi)發(fā)效率。
編程語(yǔ)言的可維護(hù)性
Guido 認(rèn)為,如果希望編程語(yǔ)言具有可維護(hù)性,在靈活和規(guī)范的方法之間保持平衡非常重要。動(dòng)態(tài)語(yǔ)言對(duì)于開(kāi)發(fā)小型項(xiàng)目非常有用,但大型項(xiàng)目需要采用嚴(yán)格的類(lèi)型檢查,因此如果編程語(yǔ)言本身能夠?qū)崿F(xiàn)這種平衡就最好不過(guò)了。這就是為什么 Guido 計(jì)劃在 Python 中添加類(lèi)似 TypeScript 的技術(shù)。
除了類(lèi)型系統(tǒng),重構(gòu)引擎對(duì)編程語(yǔ)言的可維護(hù)性也至關(guān)重要,通過(guò)它可以更容易地同時(shí)執(zhí)行數(shù)百萬(wàn)行代碼的大規(guī)模重構(gòu)。Hejlsberg 表示 TypeScript 的起源正是日益龐大的 JavaScript 代碼庫(kù),代碼庫(kù)越大,維護(hù)它們就變得越加困難,這些代碼逐漸成了 “write-only code”。為了易于重構(gòu),需要對(duì)代碼進(jìn)行語(yǔ)義理解,而這些語(yǔ)義理解的工作恰好需要一個(gè)類(lèi)型系統(tǒng)。
編程語(yǔ)言設(shè)計(jì)的未來(lái)
當(dāng)被問(wèn)及編程設(shè)計(jì)的未來(lái)時(shí),James Gosling 分享了一個(gè)尚未充分探索的領(lǐng)域 ——為 GPU 編寫(xiě)代碼。他特別指出目前尚沒(méi)有任何編程語(yǔ)言可以像 GPU 那樣工作,而在該領(lǐng)域有很大的發(fā)展空間。
TypeScript 核心開(kāi)發(fā)者 Anders Hejlsberg 表示,編程語(yǔ)言的發(fā)展速度不會(huì)像硬件或其他技術(shù)一樣快,在演進(jìn)方面,編程語(yǔ)言更像是數(shù)學(xué)和大腦。因?yàn)橹钡浇裉欤覀冞€在用 50 年前發(fā)明的語(yǔ)言在編程,而函數(shù)式編程的原則幾乎也都是在 50 年前提出的。另外,Hejlsberg 也認(rèn)為不能將簡(jiǎn)單地把語(yǔ)言分為面向?qū)ο蠡蚝瘮?shù)式編程這樣的單獨(dú)類(lèi)別,因?yàn)楝F(xiàn)代編程語(yǔ)言正逐漸成為多范式編程語(yǔ)言。
總結(jié)
以上是生活随笔為你收集整理的编程语言之父谈语言设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 外媒:全球监管机构对Facebook展开
- 下一篇: “隼鸟2号”在小行星击出陨石坑,系全球首