1. 程式人生 > 其它 >LLVM 0: LLVM和Clang的背景

LLVM 0: LLVM和Clang的背景

筆記:

一、P2Tree-LLVM基本概念入門

1. Chris Lattner nb

2.Clang的發音是/ˈklæŋ/,這是官方確認過的

3. IR的第三種表示是一種記憶體格式,只儲存在記憶體中,所以談不上檔案格式和檔案字尾,這種格式是LLVM之所以編譯快的一個原因,它不像gcc,每個階段結束會生成一些中間過程檔案

4.Clang前端和Clang驅動程式是兩個不同的概念,通常我們在命令列上呼叫的clang工具,是Clang驅動程式

二、小乖他爹-LLVM每日談之二 LLVM IR

1.IR的三種格式

三、Douglas Chen-不深不淺,帶你認識 LLVM (20191218@系統貓)

1. GCC沒有及時的合併apple的gcc分支,所以Apple搞了Clang

2. LLVM將Rust轉成WASM

Other language中Rust的支援最好

3. LLVM將C檔案轉成Verilog

4. JIT(Just in time): Java會越跑越快

JIT編譯是介於AOT(提前編譯)和解釋之間,是一種執行計算機程式碼的方法,程式在執行過程中(執行期)而不是在執行之前進行編譯。通常,這包括將原始碼或更常見的位元組碼到機器碼的轉換,然後直接執行

例如,java中,.java檔案被編譯成由JVM解釋的與平臺無關的位元組碼(.class),JIT編譯器在執行時將位元組碼編譯成本機程式碼(本機的彙編程式碼)

這種不提前編譯而是執行期間編譯,可以做一些執行期的優化:

  • JIT編譯可以針對目標平臺和作業系統進行優化。例如,JIT可以在檢測到CPU支援SSE2向量CPU指令時選擇它們
  • JIT編譯可以利用程式實際執行中的統計資訊,重新排列,以及對頻繁使用的本機程式碼進行快取等

5. JIT的一個例子:QEMU

Guest Code通過JIT技術動態編譯成Host Code,並且TB Buffer可以用作這個過程的快取(也就是說如果Translated過了,就不用再通過JIT翻譯了)

個性簽名:時間會解決一切