eopXD
eopXD

Hi 我是 eop 。 畢業於台灣大學資訊工程系(NTU CSIE), 現在是 Sifive 的 Compiler Engineer。 (Ex-Skymizer Compiler Engineer) 你可以在 eopxd.com 找到我! 我會發布一些對技術的整理、閱讀或觀影的心得或是生活的感悟。 如果覺得這些創作有價值,歡迎支持我。 希望人生能一直過得有趣又有挑戰。

2019 秋 編譯器設計

這算是在台大最後一次的修課,朝思暮想終於修到了。延畢的這一學期除了跟徐贊昇教授繼續原本的研究專題還有當電腦對局理論的助教之外,再來就是這門課了。足見我對這門課的期待。

上課

上學期修了徐慰中教授開的虛擬機器,對教授的上課風格算是很熟悉了。老師上課真的很活躍,非常鼓勵同學們提問與思考技術細節。同時認為學生自己對上課內容要有主動性,所有留下許多空間給學生去課本中尋找。

上課教的就是傳統的編譯器實作技巧,從 xxx 到 LR parsing ,然後到轉成組合語言。後半段講編譯器到優化,register spilling, dead code elimination 還有變數的 copy-on-write 。最後作業六也會實作到一部分的優化技巧。

作業

這次上課是用 Crafting a Compiler with C ,整門課的作業也環繞在自己從頭到尾蓋出一個簡單的編譯器。隨著時代演進我們的 target ISA 是 RISC-V 。因為這是十分新穎的語言所以網路上基本上都要去 RISC-V Instruction Manual 裡查詢第一手資訊。跟上學期修虛擬機器的感覺一樣,老師的作業總是讓我感受到非常實務的經驗,獲益良多。

其中作業五所有的 function call 都是由自己定義,難度相較作業四大幅提升需要提早開始。但作業六助教有提供他的版本,也可以從他身上學到正式的 compiler 如何呼叫與實作。

  • 作業一:Simple Ac to DC compiler
  • 作業二:Lexer
  • 作業三:Parser generator with YACC
  • 作業四:Type Checker
  • 作業五:Code Generation 1 / 2
  • 作業六:Code Generation 2 / 2 + Optimization

考試

因為還是一門具有相當歷史性的學科,考試仍然不可少。所以有期中考還有期末考。老師的投影片脈絡蠻清楚看不懂的話還可以跟課本互相對照。不像是上學期虛擬機器題目是上課內容的更延伸問題,這門課考你對上課內容有沒有充分的了解。

小結

謝謝又因為老師的課收穫良多!實作一個編譯器我覺得在實作經驗還有資料結構又多了一些認識。可惜要畢業了所以修不到高等編譯器了。

也謝謝阿寬跟我一起寫完一個完整的編譯器!附上完成的 C to RISCV 編譯器:

Github repository – RISCVcompiler

如果你覺得我寫的東西是有價值的,可以用 PayPal 支持我

如果喜歡的事情能帶來不只是快樂的報酬,那自然是再好不過了!

NT$30.00

Click here to purchase.

Original link: eopXD

CC BY-NC-ND 2.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…

发布评论