← 回到天際線 寫程式的人第 9 層 / 31

EP 1312020-10-192:42:40 ROUND 2

程式語言與晶片背後的設計思考

Chris Lattner

Chris Lattner 談程式語言的設計取捨、Python 的 BDFL 風波,以及轉戰晶片產業後如何看運算的未來。

Chris Lattner: The Future of Computing and Programming Languages | Lex Fridman Podcast #131在 YouTube 看 ↗

重點6 條

  1. value semantics:他用 Python 裡 tensor 常需要 clone 的困擾,解釋 reference semantics 的陷阱——賦值只是共用同一份資料。Swift 的陣列、字串預設用 value semantics,複製後兩者互不影響,還靠 copy-on-write 兼顧效能。
  2. 函式庫要能跟語言內建的東西一樣「原生」:Swift 裡 int 本身只是標準函式庫的一個 struct,不是語言寫死的特例,這讓使用者也能寫出手感一樣好的函式庫;他認為這才是程式語言設計裡最美的部分。
  3. Swift 交給核心團隊集體決定:Swift 由核心團隊加數百人的 Evolution 社群討論提案,決策公開並附完整理由,讓爭議對事不對人;LLVM 那邊他說自己仍在領導。
  4. walrus operator 與 Guido 卸任:Lex 提到 Python 3.8 的 walrus operator 讓 Guido 卸下 BDFL;他認為語法糖最容易兩極化,而加進語言的東西拿不掉,社群放慢腳步是對的,Guido 的問題在於決策壓力與個人認同全綁在一個人身上。他也談到創辦人交棒給繼任者時常見的兩難。
  5. LLVM 快滿 20 年,MLIR 從它的毛病裡長出來:他觀察到社群裡待了十年左右的人反而看不到自己系統的毛病;MLIR 提供大量共用的編譯器基礎建設,讓人更快做出特定領域的編譯器,也能處理電路合成這類 CPU 以外的硬體。
  6. 轉戰 SiFive 之後,他把晶片設計也當成編譯器問題:RISC-V 是任何人都能實作的開放指令集;他認為從電路描述到晶圓代工這段流程,工具破碎、標準鬆散,本質上跟編譯器要解決的問題一樣。

時間軸29 段

01 02:21
開場比較三巨頭

Lex 請他比較 Steve Jobs、Elon Musk 與 Jeff Dean 的特質;他認為 Jobs 較重視人的感受,Musk 更偏技術與指數成長,Dean 則靠自己寫程式帶人,把大家凝聚起來。

02 05:00
從他們身上學到的領導心法

他說領導的關鍵是搞懂自己在講什麼、理解團隊真正在意什麼,打造一個讓人敢說「這個點子還不成熟」的安全環境;領導不是自己要有正確答案,而是要讓團隊一起找到答案。

03 07:54
為什麼程式語言重要

他認為程式語言的價值在於「表達」——把想法轉成電腦懂的東西;語言一半是底層的效能與型別機制,另一半是給人用的介面,而後者其實是設計問題,很多人不這樣看。他以 Python 為例:效能要求高的函式庫只能用 C/C++ 寫,開發者變成活在兩個世界,除錯工具也接不起來。

04 16:05
value semantics

他以 Python 裡 tensor 常需要 clone 為例解釋 reference semantics 的陷阱;Swift 的陣列、字串預設是 value semantics,複製後兩者互不影響,還靠 copy-on-write 兼顧效能。

05 23:09
漸進式揭露複雜度

Swift 讓新手可以先寫 print hello world,之後才慢慢碰到套件、模組、類別這些進階概念;真的要底層控制也能直接下探,拿到 C 等級的效能與指標控制(例如呼叫 malloc)。

06 25:13
Swift 的治理流程

六、七人的核心團隊負責延續性,記得哪些位置是留給未來功能的;外圈是數百人的 Swift Evolution 社群,透過提案流程討論,核心團隊負責整合出共識、設護欄。他說真正難的是那些大家都想做、但現有提案有明顯缺點的決定。

07 30:07
Python 只有一種型別

他認為 Python 其實只有一種型別(一切都是 python object),寫起來快,但把型別檢查這種除錯機制推到執行期才爆炸;他也談到 Lisp、JavaScript 這類精簡語言,若沒處理套件管理,複雜度最後會被推到 npm 這類生態系裡,容易變得分散混亂。

08 34:02
程式語言是心智的腳踏車

他引 Steve Jobs「腳踏車」的說法:抽象層次拉高,人腦能裝進更多東西;真正學會一個語言要靠一個那個語言剛好擅長、生態系也準備好的專案當催化劑,而語言能用在哪裡,很大程度取決於生態系。

09 43:13
最美的語言特性

他認為最美的設計是讓函式庫寫起來跟語言內建的東西一樣原生——int 在 Swift 裡只是標準函式庫的一個 struct。Lex 問到等於號為什麼當賦值用,他說打破慣例是投資報酬的取捨:理論上比較好還不夠,要看換到什麼,例如能不能消掉一整類錯誤;C 的 if(x=y) 其實編譯器警告就擋得住,Swift 則在開源後拿掉了 C 風格的 ++/--。

10 51:57
walrus operator 風波

Lex 提到 Python 3.8 的 walrus operator 讓 Guido 卸下 BDFL。他認為語法糖最容易兩極化,人總會高估學新東西的負擔;加進語言的東西就拿不掉,社群放慢腳步是對的。Guido 的問題在於決策壓力與個人認同全綁在一個人身上。他也談到創辦人交棒給繼任者時常見的兩難——繼任者沒經歷過每個決定背後的理由,容易把舊做法當成不能質疑的既定事實。

11 1:01:14
Swift 核心團隊怎麼做決定

Lex 問他還是不是 BDFL,他說自己仍然領導 LLVM 那邊;Swift 則把最終決定交給核心團隊的集體判斷,決策公開並附完整理由,像最高法院的判例,讓抱怨的人罵的是「這個決定」而不是某個人。核心團隊的成員慢慢輪替,來自 Apple、Google、SiFive 三家,人少但需要高度互信與共同原則。

12 1:03:35
LLVM 20 年、MLIR 誕生

LLVM 快滿 20 年,他觀察到社群裡待了十年左右的人反而看不到自己系統的問題。MLIR 是他和一群熟悉 LLVM 的人打造的新編譯器框架,提供大量共用的編譯器基礎建設(他舉 Swift 編譯器為例:底層 LLVM 與上層 Swift 專用的那套大量重複),讓人更快做出特定領域的編譯器,從矩陣乘法加速器到電路合成都能用,後來併入 LLVM 傘下專案。

13 1:10:42
轉戰 SiFive

他現在帶領 SiFive 的工程與產品團隊;SiFive 由三位打造 RISC-V 指令集的人創立,RISC-V 是開放標準,任何人都能實作;x86 只有 Intel 與 AMD 能做,ARM 靠授權。

14 1:12:51
晶片設計到晶圓代工

他把晶片設計比喻成一種編譯器:從電路描述一路轉換到 TSMC、Samsung 這類晶圓廠能生產的版本;這條路徑上的 EDA 工具經過多年收購,集中到三家大公司手上,卻依然破碎、標準鬆散、彼此接不起來。他認為 RISC-V 開放標準讓客戶不會被單一公司綁住(舉 HP 押 Itanium 為例),會逐步吃下更多生態系;設計成本降低之後,小廠也做得起客製晶片,不必買不合身的現成晶片。

15 1:23:12
摩爾定律是否已死

他說 Dave Patterson 與 Jim Keller 其實都對,只是討論的是不同層面:物理上還有空間繼續縮小製程,但單執行緒效能不再像以前那樣,等一年到一年半就自動翻倍,逼著大家改寫程式去用 GPU、多執行緒與客製化加速器。他也談到平行化的程式模型:硬體描述語言天生平行,CUDA 則把平行藏在驅動程式裡,程式寫起來像單執行緒。

16 1:30:47
Swift concurrency manifesto

他解釋三年前寫的 Swift 並發提案:先從非同步通訊出發,靠 value semantics 拿到記憶體安全,再提出 actor 模型——把程式切成邏輯上單執行緒的「島」,彼此用非同步訊息溝通,未來甚至能延伸到跨行程、跨機器。

17 1:37:14
不信任自動平行化編譯器

他認為平行化該由人決定、編譯器負責讓結果可預期,而不是交給編譯器自動猜;他舉例:某段程式靠編譯器的魔法跑得很快,結果改個功能就莫名其妙掉速十倍,因為你根本不知道編譯器當初做對了什麼假設。但他也說這要看程式模型:機器學習把運算拆成可組合的算子,抽象層級夠高,自動平行化反而做得到,一個 TensorFlow 模型就能跑在上千個 TPU 節點上。

18 1:41:41
神經網路訓練的技術堆疊

他把加速神經網路訓練拆成好幾層:製程微縮、TPU 這類矩陣運算架構、叢集間的系統層優化,再加上訓練方法本身的演算法突破,這些進展合在一起,才能把 ResNet-50 的訓練時間從一週壓到 25 秒。

19 1:47:34
模擬宇宙與量子電腦

兩人半開玩笑聊起如果宇宙是一個模擬,背後可能是什麼樣的電腦;他認為量子電腦目前還停留在「科學計畫」階段,還沒有人確定有什麼問題非量子電腦不可、值得投入那樣的經濟規模。

20 1:52:54
COVID 改變矽谷

他認為遠端辦公是一種拉平:外表不再是對話的一部分,對過去代表性不足的群體有幫助,原本就遠距的員工也跟大家站上同一個起點;但他也說長時間見不到人真的很糟,兩種感受同時存在。

21 2:00:53
網路的圍攻文化

Lex 談到 2020 年機器學習圈的圍攻風氣,舉 Yann LeCun 談資料偏誤被過度解讀為例;他認為根源是人天生「我們對他們」的比較心態,網路讓世界變小、點擊誘餌的誘因又火上加油。他說自己也有過開會空檔匆匆回信、措辭出錯,結果被人記很久的經驗,所以大家該多一點同理:有時候對方只是那天過得很糟。

22 2:06:22
第三帝國與長期樂觀

Lex 說他正在讀《第三帝國興亡史》,擔心經濟蕭條疊上被羞辱的情緒;他則說多數人以為世界不會變,其實世界一直在變,可以回頭找出帶動改變的催化點,甚至主動促成。他自認是長期樂觀派:人類可以很糟,但以百年為單位看,進步很驚人。

23 2:10:01
GPT-3 與大型語言模型

他認為 GPT-3 本身不算意外——模型變大、資料變多本來就會變好,真正的成就是把它做出來的工程量;他也提到 Jeff Dean 談過的稀疏門控混合專家模型,覺得這類稀疏架構很有意思、可能帶來突破,但他坦言深度學習不是他的專長,也不知道會不會成功。

24 2:14:27
Software 2.0 之爭

針對 Karpathy 的 Software 2.0(用學習出來的模型逐步取代手寫程式碼),他認為深度學習是一種新的程式設計典範,而不是要取代傳統寫程式;能不能用深度學習取決於場景,像開機程式這種東西不會有人拿深度學習模型去寫。他同意 Karpathy 說的,深度學習也要學 1.0 的測試與持續整合。

25 2:21:25
模型能不能取代編譯

他認為語言模型能生成語法正確的程式碼,但還缺一塊——怎麼把人類要的需求講清楚給模型聽;光靠生成模型不夠,還需要類似定理證明的機制去驗證產出是否正確,這部分他坦言超出自己的專業。

26 2:27:45
給年輕人的建議

他建議儘早多方嘗試、找到自己真心喜歡又夠難的事,因為撐過低潮期靠的是熱情;他也提醒成功很大一部分是運氣,冒牌者症候群、自我懷疑是成功的人也一樣會有的感受。

27 2:32:49
人生意義的提問

面對「人生有沒有意義」的老問題,他說自己準備好接受答案是沒有意義,但更傾向相信世界值得投入。他說快樂多半來自其他人,包括孩子和人際關係;他想做的,是把自己擅長的事帶進真正重要的領域。

28 2:35:12
AGI 有沒有靈魂

被問到 AGI 會不會有意義感,他反問人類是不是也只是被設定好目標函式在運作,認為不該用人類自己的框架去否定還不了解的東西;他更擔心的不是 AGI 失控,而是人類失去挑戰與貢獻的目標後,可能激發出最糟的一面。

29 2:37:53
務實樂觀作結

Lex 說樂觀有幫助,他回「為什麼不?」,用有人「信神反正沒損失」的邏輯類比(他說自己不太信教);他也建議與其花時間看新聞、追劇、消費別人的內容,不如多花時間創造,那會帶來更多成長與樂觀。最後他半開玩笑推薦編譯器這一行:做的人少,薪水反而高。