2012-01-12 49 views
6

我最近對編譯器及其工作方式非常感興趣。由於海灣合作委員會有它的來源,我認爲這將是最好的研究材料。學習gcc內部

我意識到的第一件事是,如果我沒有對簡單的編譯器設計原則有基本的理解,研究gcc是沒有意義的。從那以後,我一直在努力閱讀「龍書」,這本書是關於編譯器實現的事實上的書。

無論如何,閱讀這本書只會進一步加深我對編譯器(如gcc)的瞭解。另外,我發現它適合於說我對c/C++有一箇中等的理解(也就是說,我不想在不知道c的情況下研究gcc)。我希望研究gcc能幫助我改進這一點。

我已經下載了我能找到的最新版本;然而,當仔細閱讀源代碼時,我迷失了方向。

我在找的是關於如何繼續的建議。有沒有類似的項目,這不是很大,我可以用它作爲gcc的墊腳石? gcc有一個特定的模塊,哪一個會推薦先學習?是否有任何書籍進入gcc的實施,而不是它的用途?也許我應該停止抱怨,只是不斷的閱讀來源,直到它點擊?

任何和所有的反饋將不勝感激。

編輯:如果你認爲我應該學習不同的編譯器/解釋器,我將不勝感激關於哪些的建議。

+3

你應該閱讀龍書然後編寫你自己的編譯器。它非常有幫助。 – 2012-01-12 23:17:18

+2

我聽說GCC是一件痛苦的事情。也許LLVM會是另一種選擇? – Blender 2012-01-12 23:19:36

+0

1.您應該在專家級完全理解語言2.首先編寫您自己的小編程語言的編譯器3. GCC是一團糟。有很多更好的選擇 – Pubby 2012-01-12 23:20:19

回答

6

如果你想看一個非常小的編譯器,我會推薦Fabrice Bellard的Tiny C Compiler

另外值得一提的是,Fabrice Bellard以他的Obfuscated Tiny C Compiler贏得了混淆的c代碼比賽。還有一個去混淆版本,它適合於single c file

這些應該是很好,如果你想要一些小而易於學習的東西。

+0

plan9中的'8c'也很容易閱讀。 – Dave 2012-01-13 01:36:13

5

我一定會看看clang/LLVM。我認爲代碼庫非常可讀。一個非常可行的選擇是使用LLVM作爲後端,並編寫自己的簡單詞法分析器和解析器。

+2

我同意,LLVM比gcc學習/黑客要好得多。在研究生院,編譯課程使用LLVM進行項目。 – TJD 2012-01-12 23:30:33

+1

聲明:我有點偏袒。我的編譯器項目使用LLVM:http://ellcc.org :-) – 2012-01-12 23:52:24

0

我認爲在閱讀gcc的代碼之前閱讀「在顯微鏡下進行ruby」一書並練習ruby核心開發是很好的。但你應該需要關於ruby編程的知識。這是關於ruby internels。

據我所知gcc上的最好的書是「gcc的權威指南」https://www.amazon.com/Definitive-Guide-GCC-Guides-Paperback/dp/1590595858。雖然有點老了,但我認爲你應該閱讀這個。

0

對編譯器也充滿激情,我從Niklaus Wirth的書Algorithms + Data Structures = Programs中學到了很多東西。最後一章描述了Pascal-0語言,前面的章節展示瞭如何解析和編譯極簡主義語言。 Pascal-0,PL/0是兩步編譯器,它們生成p代碼,這是一個簡約虛擬機的「機器代碼」(與Java不同)。

This page describes a PL/0 virtual machine instruction set,最後還有鏈接到PL/0編譯器和其他有趣的信息。

Niklaus Wirth has always had a knack用於編寫可讀性和結構良好的代碼。這裏是語言定義和許多其他有趣的鏈接。

學習和使用Pascal的優點是語言非常結構化,而不是從彙編語言(如C語言)發展而來。它使編譯更容易。甚至沒有必要做幾次傳球...