簡體   English   中英

如何使用Roslyn C#編譯器進行自舉?

[英]How's Roslyn C# compiler bootstrapped?

我開始閱讀關於“Roslyn”的新C#編譯器,並想知道Roslyn編譯器是如何編譯的?
我明白為了擁有“自托管編譯器”需要使用boostrapping ,我想知道Roslyn編譯器是如何“自舉”的?

如果尚未存在該語言的現有實現,則引導只是一個問題。 在這種情況下,這很容易。

  1. 使用現有的C#編譯器編譯第一個版本的Roslyn
  2. 然后使用新編譯的Roslyn構建重新編譯它。
  3. 完成。

根據Eric Lippert的說法,這就是C#團隊實際上 (不是猜測)完成的事情:

C#1.0到5.0編譯器是用C ++編寫的。 很長一段時間 - 超過一年 - 我們用C#編寫了Roslyn C#編譯器並用C#4.0編譯它。 (C#5.0是由姐妹團隊並行開發的。)我們可以編譯Roslyn編譯器,然后右轉並使用我們剛剛構建的編譯器再次編譯它,這是一個快樂的日子。

一件漂亮的商業案例提供引導通過的Mads托格森編譯:

“在這里,最后是我們的價值主張:讓它成為世界上只需要一個理解C#的代碼庫,由想要在代碼上構建工具的每個人共享!”

我猜想已經使用了現有的C#編譯器。 我的意思是,完全自舉的編譯器很不錯,但在這種情況下並不是必需的。

讀一讀

http://en.wikipedia.org/wiki/Bootstrapping_%28compilers%29

如果需要獲得語言X的編譯器(用X語言編寫),則存在如何編寫第一個編譯器的問題。 在實踐中用於解決這個雞或雞蛋問題的不同方法包括:

在語言Y中實現語言X的解釋器或編譯器.Niklaus Wirth報告他在Fortran中編寫了第一個Pascal編譯器。[引證需要] X的另一個解釋器或編譯器已經用另一種語言Y編寫; 這就是Scheme經常被引導的方式。

但是對於Roslyn的細節,我猜想,用c#編譯器(pre-Roslyn)構建然后用自己構建:)(前幾次運行)一旦它穩定,他們probs只用Roslyn構建Roslyn :)

我還猜測它全部是自動化和單元測試的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM