動態

詳情 返回 返回

現代編譯器程序員到底在做些什麼? - 動態 詳情

第一次寫編譯技術相關的文章(>_<),想和大家分享一下:現代編譯器程序員到底在做些什麼?

在這裏插入圖片描述

為什麼選這個主題呢?因為我相信大家肯定有這樣的疑惑,像GCC/LLVM這些編譯器以及大家平常寫的Java、Go等語言的編譯器都已經非常成熟了,那還需要編譯器程序員做什麼?當然不是這樣。

在這裏插入圖片描述

要回答這個問題,我們先要了解一下編譯器的結構,現代編譯器一般分為前端中端後端,前端負責讀入高級語言源代碼,進行詞法分析語法分析並生成中間代碼(IR),中端對中間代碼做目標機器無關的優化,後端對中間代碼做目標機器相關的優化最終輸出彙編或者是二進制。目標機器可以理解為我們平常説的x86、ARM、RISCV等不同架構的芯片。

在這裏插入圖片描述

如果我們只看前端和後端,會發現當前端對接的高級語言或者後端對接的芯片有變化時,編譯器都需要有新的開發。這就代表了兩類典型的編譯器相關的工作。

  • 第一類:開發新的編程語言

開發新的編程語言的時候,需要開發新的編譯器,例如國內我知道的現在做編程語言的比較大團隊有華為的倉頡和IDEA研究院的Moonbit。
在這裏插入圖片描述
在這裏插入圖片描述

  • 第二類:自研新的芯片

還有一類就是自研新的指令集的芯片的時候,也需要開發新的編譯器。在國內這幾年芯片創業的熱潮下,這些公司就很多了,比如寒武紀摩爾線程這種。
在這裏插入圖片描述
在這裏插入圖片描述
但是這裏有個特殊的問題大家需要注意,即便是芯片的指令集一模一樣,比如你設計一款兼容ARM指令集的芯片,但是因為你芯片的內部實現不一樣,同樣一條機器指令消耗的芯片資源可能不一樣,那麼編譯器也要根據這些額外的特性做出調整,才能實現生成的機器指令最優。

  • 第三類:藉助編譯技術

除了上面典型的這兩類,還有一類就比較寬泛了。典型的編譯器是將高級語言編譯為彙編語言,但如果將這個概念放寬 ,只要是一種語言轉換為另一種語言的都可以被稱為編譯器,因為本質都需要藉助編譯器相關的技術。第三類就是這種寬泛概念下的比較雜的編譯器工作了,舉點例子,我看到過有公司有需求將一種類BASIC的很古老的編程語言翻譯到Lua然後跑在LuaJIT上想要提高性能,這種編譯器也可以被稱為轉譯器(Transpiler)。
在這裏插入圖片描述
還有近年來比較火的AI編譯器,把AI模型的計算圖編譯為在GPU和NPU上運行的Kernel,我認為也可以算在這類中。
在這裏插入圖片描述

現代編譯器程序員的工作基本就在我説的這三類範疇裏了,支持新語言,新芯片和其他藉助編譯技術的事情。

如果大家對編譯器以及其他計算機底層技術感興趣,喜歡我的文章的話,歡迎點贊關注我~ 我會持續輸出優質內容 :)

Add a new 評論

Some HTML is okay.