剑网3指尖江湖职业推荐 www.1468054.com 本文分析了編程語言變得過于龐大復雜的原因,并討論了如何進行控制。

改編自2015 年的 es-discuss 主題帖子?!癈ommon Lisp”不是主題。它只是眾多說明性反例的其中之一。

自 2007 年以來,我一直是 JavaScript 標準委員會的成員。關于TC39,我們欣賞語言簡單性的價值。但是,隨著時間的流逝,我們對日益增長的復雜性失去了警惕。我們必須更好地理解這是如何自然發生的,如果不加以控制,那么代價是什么,以及該怎么辦。本文不僅僅針對 TC39,還針對所有那些希望影響 JavaScript 標準或任何面臨類似壓力的人。請從我們的錯誤中汲取教訓!

圖0:Common Lisp 的悲劇:為什么大型編程語言會大到爆

Algol、Smalltalk、Pascal 和早期的 Scheme 語言都因為小巧美觀而備受稱贊。早期的 C 語言和 JavaScript 語言因為很多事情受到合理的批評,但是很少被誤認為是美觀的。但是,它們很小,這方面受到了恰當和廣泛的贊賞。當一種編程語言很小的時候,我們欣賞它通常是因為“我可以學整個內容,然后就可以掌握它了”,然后“我知道一切。我很高興沒有我不知道的”。對于 C 語言和 JavaScript 語言,很少有人認為他們實際上知道全部內容了——事實上,細節相當復雜。盡管如此,這種感覺還是讓人們對日常使用的滿意度大大增加了。

JavaScript 的小巧美學貫穿 EcmaScrip-5。對于 EcmaScript-5 和 EcmaScript-2015,我都參與了很多工作,并且我為自己在這兩項工作中做出的貢獻感到自豪。EcmaScript-2015 的規模更大一些,盡管如此,它仍然是一種更好的編程語言??悸塹轎頤槍ぷ韉鈉鸕?,如果在規模上沒有增加,那么我們不可能在 JavaScript 的實用性方面獲得這些成果。對 EcmaScript-5 發展到 EcmaScript-2015 所添加的大多數新增功能,我不后悔。對其中的很多功能,如果我們把 EcmaScript-2015 標準流程重做一遍,我可能會做類似的添加工作。

把 EcmaScript-5 發展到 EcmaScript-2015,添加的每個功能都必須通過一個非常高的標準。從心理上講,這對我們所有人都有意義,因為我們從 EcmaScript-5 這個語言開始,我們仍然可以欣賞它的小巧。當一種語言很小巧時,添加的每個功能都能直觀地感覺到語言的規模大小有顯著比例的增加。一個功能的特定好處對它的擁護者來說總是可以看到的。對于小巧的語言來說,人人都可以看到新功能增加復雜性的總體成本。

圖1:Common Lisp 的悲劇:為什么大型編程語言會大到爆

JavaScript 的未來?
一旦一種編程語言超過了一定的復雜度,比如 LaTex、Common Lisp、C++、PL/1 和現代 Java,那么編程體驗就更像是從一個看似無盡的功能海洋中劃出一部分功能供個人使用,而功能海洋中的大部分我們從不會去學習。而一旦感到一種編程語言變成無限時,新功能的特定好處仍然顯而易見。但是,新功能增加復雜性的總體成本不再可見。那些討論新功能的人不再感覺到這些。無窮加上 1 還是等于無窮。甚至,一個很大的數字加上 1 后還是一個很大的數字。這不是一刀斃命的死亡,導致了這些怪物無限制地成長。

因此,我請每個對編程語言有影響的人在考慮新功能時,設置一個更高的標準,而不只是這個標準:“如果我們也用這種方式來編寫,是不是會更好?”我認為,EcmaScript-2015 處于中間地帶,無限制的增長還不可避免。作為社區,我們需要對 EcmaScript-2015 已經發展到的規模有共同的恐慌感。理想情況下,隨著我們的規模接近不可逆轉的臨界點,我們的恐慌感應該進一步增加而不是減少。

一些區別

圖2:Common Lisp 的悲劇:為什么大型編程語言會大到爆

保持小的非均勻壓力
隨著我們從核心語言轉向標準化庫,極簡主義的緊迫性變得越來越弱。整個標準語言可以看作是由以下主要部分組成:

  • 基本語法——不能通過對其他語法的局部擴展忠實地解釋的特殊形式
  • 語義狀態——計算操作的狀態
  • 內核內置——內置庫中提供功能的部分,如果不存在,那么無法通過用戶代碼提供。
  • 非內核 intrinsics——內置在可以用 JavaScript 實現的庫中,但是,語義狀態或內核內置依賴這些庫。比如,借助代理,能夠采用用戶代碼實現數組(Array)。但是,其他內核內置已經特別依賴于數組,使其比任何置換都有特權。
  • 語法糖——可以通過對基本語法的局部擴展來解釋的語法
  • 全局便利庫——可以通過非特權用戶代碼實現,但是,在原始全局命名空間中給出標準的全局命名路徑
  • 標準便利???/strong>——祝福社區開發的??槌晌曜?/li>

根據我對增長成本和極簡主義的緊迫感,我把這些按順序列出。對所有這些,我們仍然需要訓練紀律。只是對最后一項,我們應該考慮絕對大小的增長是無限的;當我們等待候選者通過事實上的社區接受過程首先證明自身時,只限制增長率。理想情況下,TC39 無論如何都應該不再是最后一項的瓶頸,因為外部事實和法律上的過程完全能夠獨立地討論和發展標準便利???。

余下全文(1/3)

本文最初發表在www.infoq.cn,文章內容屬作者個人觀點,不代表本站立場。

分享這篇文章:

請關注我們:

發表評論

電子郵件地址不會被公開。 必填項已用*標注