# 2025q1 Homework1 (ideas) contributed by <`DrXiao`> --- 參照去年的期末專題列表後,目前選定以下專題來閱讀並撰寫我的疑惑與見解 * Linux 核心專題: shecc * Linux 核心專題: 多核 RISC-V 模擬和 Linux 驗證 ## Linux 核心專題: shecc 其他相關素材或資料 * [2020q3 專題: 可自我編譯的 C 編譯器](https://hackmd.io/@sysprog/HkqE5DKqP) * [從零開始建構 C 語言最佳化編譯器](https://docs.google.com/presentation/d/1RoSFZQdy4dqEYR9LRI5ShIFA_LMMlCmJImKIN3V_ry0) * [2024 COSCUP 發表錄影](https://youtu.be/eSDWZJhpU30?t=24023) ### 疑問 1:shecc 的目標或限制 shecc 起初是為了教學為而建立的編譯器專案,自 2019 年便持續發展至今,老師也會在實體課堂、線上授課或是其他公開場合講解 shecc 時,數次提起 shecc 的設計理念。 在閱讀開發紀錄之前,我有粗略地知道 shecc 有以下目標、限制: * 建立**可自我編譯**的編譯器 * 將 shecc 的程式碼**限制在 xxxx 行**以內 (這點我依稀記得是老師在某次授課時曾講過,希望可公開一個程式碼精簡的編譯器案例) * 實作編譯器前端、中間表示式(IR)、建立 SSA 並實施與硬體無關的最佳化、輸出特定硬體架構的機器碼,**涵蓋經典的編譯流程**。 不過不論是去年的開發紀錄,抑或是 2020 年的開發紀錄,似乎**對上面幾點沒有更深入的說明**。 --- 以第一點來說,雖然我知道 shecc 可以自我編譯,但我從過往的開發紀錄中沒有閱讀到: 1. 為什麼要讓編譯器可以自己編譯自己? 2. 這件事情可以帶來什麼好處? 3. 與不能自我編譯的編譯器會有什麼樣具體的差別? 4. 要讓編譯器可以自我編譯,大概哪些什麼地方要特別花功夫設計並實作? 上面列舉的 1 ~ 3 點或許是可以透過閱讀其他素材而得知觀念,但 shecc 作為一個可自我編譯編譯器的典範,我仍期待可以在今年的開發紀錄中,逐漸加入上面幾點的說明。我想至少以第 4 點來說,就可以 shecc 舉例說明,帶出要花時間處理的那些地方,讓閱讀者了解自我編譯的困難跟實作議題。 --- 再來第二點「原始程式碼限制在 xxxx 行」,這點我想今年的開發紀錄便可以加入,可以與老師或過往投入的開發者討論,為什麼會要有前述的限制,並在今年的開發紀錄撰寫之。 像這點我就依稀知道,就是如前面所述「可公開一個程式碼精簡的編譯器案例」,但是否還有其他原因,我暫時不得而知,若有其他原因,也期待今年的開發紀錄涵蓋這些內容。 此外一旦有了某些限制,也會連帶影響到實作,所以「限制程式碼行數會連帶影響什麼事不能做或是受限?」也是一個可以撰寫的點。 同樣地,我也是依稀知道程式碼行數的限制會連帶到 lexer/parser 的實作。以 shecc 來說,目前並**沒有實作前置處理器的功能**,沒有做的一個原因是,一旦真的實作,程式碼行數便會大幅增長,這樣就超過程式碼行數的限制,導致 shecc 就不會是一個精簡的編譯器實作了。 --- 第三點,因為 shecc 已涵蓋前面所提及的那些經典流程,同樣地,shecc 作為一個經典編譯器案例,去年已經有了那些流程的基本介紹,今年或許可以開始更深入地講解每個環節。 但反過來說,其實 shecc 也是有部份環節是沒有做到的,例如: * 抽象語法樹(Abstract Syntax Tree) * 與硬體架構有關的最佳化 為什麼沒有做這些事情,或許也是一個今年可以撰寫的點。 --- 以上是我想到的,可以更深入說明的細節,並且如果 shecc 事實上還有其他設定目標,今年也可以一併列舉,做出一個目前為止的總結報告。 ### 疑問 2:shecc 的發展歷史 這點是去年有了 GitHub [issue#174](https://github.com/sysprog21/shecc/issues/174#issuecomment-2551086150) 的討論,我才有的疑問。 上面給定的超連結,是當時候某位開發者利用 GitHub issue 提出疑問(詢問 `ph1_ir_t` 的使用方式),當時候看到之前貢獻的 `vacantron` 同學給出的回覆,令我有點意外: > The `ph1_ir`-related functionality, such as `add_ph1_ir()`, had been deprecated, but it still be preserved for the backward compatibility of @ChAoSUnItY 's work. Use `add_insn()` to build the IR instead. 原來 shecc 早在過往發展的某個時間點,就已經改用 `insn` 的結構體,以後者為主建立中間表示式並進行後續編譯工作,`ph1_ir_t` 則保留使用,但它的中間表示式不會用來做後續工作了。 當時看完之後我才恍然大悟,爾後才終於看懂 shecc 的前端處理。例如說產生中間表示式的方式,可以先聚焦在 `add_insn()` 函式的使用即可。 --- 因為前面的遭遇,就讓我想知道「shecc 的發展歷史」,這個歷史並不是說要將 2019 年到現今一直以來的更改通通逐一說明,而是說**有一些關鍵的變動,或許今年的開發紀錄可以論述**,這樣其他開發者在閱讀部份原始程式碼的時候,就可以減少類似我前面描述的那個遭遇。 不過什麼修改是「關鍵」的,或許是一個要討論的點。 ### 小結 因為 shecc 已發展了約 5 ~ 6 年的時間,對於想學編譯器的人來說,可以當作一個學習的案例,不過以我目前發現到的事情來說,如果今年的開發紀錄可以更加描述我前面提及的那些點,相信可以讓 shecc 的閱讀素材,完整性更加提昇,吸引更多人來閱讀並投入編譯器研究。 ## Linux 核心專題: 多核 RISC-V 模擬和 Linux 驗證 ### 疑問 1 [SBI HSM Extension](https://hackmd.io/@sysprog/HyQ9UQ2E0#SBI-HSM-Extension) 一節有提到 hart 在 HSM 的管理中會有 7 種狀態,其中 `STOP_PENDING` 、 `START_PENDING` 、 `SUSPEND_PENDING` 、 `RESUME_PENDING` 等狀態,**可以不用在 semu 模擬** 這樣的描述對我來說還是有點模糊空間,這樣的說明似乎也可以解讀成「要模擬還是可以進行模擬」,如果這裡可以更加細說不用模擬的原因,或許會更好 ### 補充 1 在 [Device tree](https://hackmd.io/@sysprog/HyQ9UQ2E0#Device-tree) 一節有說明到 Device tree 存在的原因,並且引用 Bootlin 公司製作的簡報 〈Device Tree for Dummies〉,來輔助說明如何撰寫並定義 Device tree 前陣子在 GitHub 上瀏覽開源專案時,有看到 [devicetree-org/devicetree-specification](https://github.com/devicetree-org/devicetree-specification)(可簡稱為 DTSpec) 這個儲存庫,想學習 Device tree ,可以作為一個參考材料之一。 DTSpec 目前有提供 [v0.4 版的 PDF 文件](https://github.com/devicetree-org/devicetree-specification/releases/tag/v0.4) 可以直接下載,本質上就是一本電子書,對於 Device tree 的相關介紹及說明很詳盡,對比簡報形式的素材(簡報通常僅以條列式文字解說),相信若能提供這份素材在開發紀錄中,可以讓大家更好閱讀並學習 Device tree。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up