iT邦幫忙

2024 iThome 鐵人賽

0

很遺憾即使完賽之後又趕工了三天,在開頭吹的牛實現到三分之一不到,勉強做了一個支援遞迴跟分支的編譯器,由於當前零版編譯器是用 Rust 寫的,原計劃是把我在零版編譯器用到的 Rust 的主要特性也實現之後,就可以自己抄襲自己,用音界咒寫出一版編譯器,完成自舉。

距離這個目標,至少也還要設計類型系統(支援抽象數據類型)、記憶體管理,這兩項都是牽一髮而動全身,就此決定了語言的屬性,自問還需要許多研究跟調查才能做得不要太糟糕。零版編譯器還有用到泛型跟巨集,這兩種特性我較少使用,更遑論設計了。

剛開賽前幾天我其實十分惶恐,每天晚上都不曉得要寫什麼內容,但大概一個禮拜之後確立了寫作策略:慢慢迭代音界咒,一版一版加入新功能直到可以自舉。

確立策略之後我感覺自己能寫三個月哈,編譯器有太多內容都還沒提及了,就連詞法與語法分析我都只講述了簡單的算法,連常見的 LL、LR 都沒介紹,Parsing Techniques 裡琳琅滿目的剖析算法我更是都沒空去瀏覽。再來中端該如何選擇中間表達式,後端該怎麽做些通用優化、暫存器分配,又怎麽針對微架構優化......太多主題了,只修過一堂課的我所知也是滄海一粟。

如果活動更長一些想必能學到更多。但畢竟結束了,我也讓文章告一段落,接下來該去忙其他事情了。

我把所有文章集結在一個文件網站離塵指引.卷之一.試結丹,往後更新都會放在上面,IT邦這裡可能就不再更新或勘誤了。

本系列文章的姐妹專案音界咒也一直公開在 github ,歡迎道友參閱與提 issue 。

最後來問個思考題,實現了遞迴跟分支真的就圖靈完備了嗎?沒有陣列跟指標,真的能圖靈完備嗎?


上一篇
參考資料
系列文
離塵指引.卷之一.試結丹:程式語言自舉36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
sixwings
iT邦研究生 3 級 ‧ 2024-10-21 21:39:33

提供一個額外思路:不追求擬真(貼近物理現實),可以資料存取抽象為 key-value 的 get/set,這樣就不一定要陣列跟指標了

mros iT邦新手 5 級 ‧ 2024-10-22 00:39:15 檢舉

因為現在的編譯目標是 RISC-V 組合語言,所以實作陣列跟指標反而比較容易

我要留言

立即登入留言