Google拋棄C語言,采用Go語言重寫Go編譯器

jopen 10年前發布 | 14K 次閱讀 Go語言

Go 語言是 Google 開發的新型編程語言,將動態語言易于編寫的特性和靜態語言的高效性相結合,具備良好的易用性和極佳的執行效率。目前該語言已經發布了 1.2 正式版本。

        Go 語言開發者 Russ Cox 近日透露,在 Go 1.3 版本之后,該語言的編譯器將會使用 Go 語言重寫。

Google拋棄C語言,采用Go語言重寫Go編譯器

        目前的 Go 編譯器

        目前 Go 編譯器 gc 基于C語言,是從 Plan 9 的C編譯器衍生出來的,其中保持了原有的匯編程序、C編譯器和鏈接器,而部分針對 Go 的編譯器(gc/6g/8g/5g)使用C語言進行了重寫。

        為何要采用 Go 語言實現

        Russ Cox 指出,采用 Go 語言來實現編譯器相比C語言的優勢在于:

  • 編寫正確的 Go 代碼要比編寫正確的C代碼容易
  • 調試不正確的 Go 代碼要比調試不正確的C代碼容易
  • Go 編譯器必然需要對 Go 有個很好的了解,而使用C語言實現則增加了一個不必要的二次需求
  • 與C相比,Go 語言對并行程序執行得更好
  • 對于模塊化、自動重寫、單元測試以及分析,Go 比C有更好的標準支持
  • 使用 Go 比使用C更加有趣

        計劃

        Russ Cox 表示,將編譯器從C實現轉變為 Go 實現的過程,主要是通過自動翻譯程序來進行。這一過程將分階段進行:

  • 第 1 階段:開發和調試翻譯程序。
  • 第 2 階段:使用翻譯程序將編譯器從C轉換成 Go,并刪除部分C語言副本。該階段可能會在 Go 1.3 版本中實現,可能仍會需要一些C代碼。
  • 第 3 階段:使用一些工具將編譯器分割成包,并清理部分代碼、添加文檔、添加集成測試等。這個階段將在 Go 1.4 中實現,會將編譯器徹底轉換成為一個 Go 程序。
  • 第 4 階段:通過標準的分析和測量技術對編譯器的內存和 CPU 占用率進行優化,可能會引入并行處理。該階段將在 Go 1.4 中實現,部分特性可能會在 Go 1.5 中實現。
  • 第 5 階段:使用最新版本的 Go 解析器和類型替換編譯器前端。

        舍棄的方案

        對于為何不從頭編寫一個新的編譯器,Russ Cox 表示,從頭編寫是一個愚蠢的行為,這意味著要拋棄之前很多人很多年以來的工作成果。

        Go 語言開發團隊還嘗試了手動將C代碼翻譯為 Go 代碼,但是在翻譯了幾個小型的C/C++程序之后,他們發現這種方式比較繁瑣,且容易出錯,而且錯誤都非常隱蔽,不易發現。因此,他們決定首先開發出一個 自動編譯器,通過這種方式,出現的錯誤將會是一致的,容易查找。

        詳細信息:Go 1.3+ Compiler Overhaul

來自: www.iteye.com
                    <span id="shareA4" class="fl">                          </span>
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!