A note for 2015 FOSSAPC course in NCTU, Hsinchu, Taiwan

配合課程使用 Hackpad 後續更新請看:



How A Compiler Works

課程連結:20150302 - From Source to Binary: GNU Toolchain 是如何運作? - 自由開源軟體與專案協作

投影片連結:How A Compiler Works: GNU Toolchain

  • 1985 - Richard Stallman - GNU FSF (GNU Free Software Foundation)
  • 屠龍書 - Syntax Directed Translator (SDT)
  • Embedded System - Toolchain 太新或太舊都不行

    在嵌入式系統中,Toolchain 的版本匹配度影響到個別軟體元件的正確性,如 kernel, libc, graphics framework 等等,而且通常開發者會從個別套件的原始碼一路編譯並建立 system/firmware image,就會遇到各式編譯錯誤、來自個別工具產生的潛在錯誤,或者需要 workaround 的狀況。於是,開發過程就會限定某個版本的 toolchain

  • 第一版 gcc 是 RMS 寫的,之後的版本漸漸偏離 RMS 的初衷
  • Dead Code Elimination
  • Code Motion, Loop invariant, Pointer Aliasing
    • Pointer Aliasing 是 Compiler 最佳化瓶頸之一,如果不同的 Pointer 指向同個 address,會造成某些generic 的最佳化出錯
    • C99, Restrict Pointer Aliasing
  • Static Single Assignment (SSA)
  • cc1: 真正的 GNU C Compiler
    • Source Code
    • Simplified AST
    • Gimple IR
    • Tree SSA Form
    • RTL IR (LISP Style)
    • Final SAM
  • Pipeline Scheduling
  • LLVM

    • UIUC Vikram Adve, Chris Lattner in 2000
    • 高度模組化
    • LLVM bitcode (IR)
    • LLVM 一開始是用 GCC 的 Front-end (GPLv2) 結合自己的 Back-end 成為 llvm-gcc,但 RMS 對 LLVM 這種行為感到非常不滿,並在 gcc43 時將授權改為 GPLv3 來反對 LLVM 這種偷幹 Front-end 的方式,導致後來 Apple 發展自己的 Front-end Clang

      LLVM 的授權是 BSD License,沒有一定要 GPL 形式的強制釋出原始碼條款,但 llvm-gcc 實際上是一種「掏空」GPL 授權的 gcc 的方式,也就是讓 BSD 授權的部份在整個編譯器系統中越來越多,這是 Richard Stallman 不滿之處,他認為 GPL 在這樣的狀況下,不再保證 GPL 的效力。

    • Clang 採模組化設計 (Clang C API)
      • 可 export AST
      • 改善錯誤訊息
    • LLVM Bitcode 用來當傳遞格式還有很多問題
      • Binary Compatibility
    • 目前效能已經逼近 GCC 但還差一點
  • Objective-C

    • 1988
    • Steve Jobs
    • NeXT
    • GCC 2.7

在 Open Source 圈中,誠信是很重要的,千萬別幹抄襲這種事。


Revolution OS

課程連結:20150302 - 《Revolution OS》影片背景知識補充 - 自由開源軟體與專案協作


Misc.

Linking the Object code File ...Linux comes with its own linker, called ld. (The name is actually short for "load", and "loader" was what linkers were originally called, in the First Age of Unix, back in the 1970s.)


Share


Donation

如果覺得這篇文章對你有幫助, 除了留言讓我知道外, 或許也可以考慮請我喝杯咖啡, 不論金額多寡我都會非常感激且能鼓勵我繼續寫出對你有幫助的文章。

If this blog post happens to be helpful to you, besides of leaving a reply, you may consider buy me a cup of coffee to support me. It would help me write more articles helpful to you in the future and I would really appreciate it.


Related Posts