亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go如何如此迅速地編譯?

Go如何如此迅速地編譯?

Go
臨摹微笑 2021-04-05 12:14:14
我已經在Go網站上搜索了Google,但在Go的非凡構建時間上似乎找不到解釋。它們是語言功能(或缺少語言功能),高度優化的編譯器或其他產品的產物嗎?我不是要推廣Go;我只是好奇。
查看完整描述

3 回答

?
精慕HU

TA貢獻1845條經驗 獲得超8個贊

依賴性分析。

在轉到FAQ用于包含下面的句子:

Go提供了一種用于軟件構建的模型,該模型使依賴關系分析變得容易,并避免了C樣式包含文件和庫的大量開銷。

雖然該短語不再是FAQ中的內容,但是在Google的Go討論中對該主題進行了詳細說明,該演講比較了C / C ++和Go的依賴關系分析方法。

這是快速編譯的主要原因。這是設計使然。


查看完整回答
反對 回復 2021-04-26
?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

我認為不是Go編譯器很快,而是其他編譯器很。

C和C ++編譯器必須解析大量的標頭-例如,編譯C ++“ hello world”需要編譯18k行代碼,這幾乎是源代碼的一半!

$ cpp hello.cpp | wc  
18364   40513  433334

Java和C#編譯器在VM中運行,這意味著操作系統必須先加載整個VM,然后才能對其進行編譯,然后再將它們從字節碼JIT編譯為本機代碼,所有這些都需要花費一些時間。

編譯速度取決于幾個因素。

某些語言旨在快速編譯。例如,Pascal被設計為使用單遍編譯器進行編譯。

編譯器本身也可以優化。例如,Turbo Pascal編譯器是用手動優化的匯編器編寫的,該匯編器與語言設計結合在一起,從而使真正的快速編譯器可以在286類硬件上工作。我認為即使是現在,現代的Pascal編譯器(例如FreePascal)也比Go編譯器快。


查看完整回答
反對 回復 2021-04-26
?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

Go編譯器比大多數C / C ++編譯器快得多的原因有很多:

  • 主要原因:大多數C / C ++編譯器的設計都非常差(從編譯速度的角度來看)。同樣,從編譯速度的角度來看,C / C ++生態系統的某些部分(例如,程序員在其中編寫代碼的編輯器)在設計時并未考慮編譯速度。

  • 主要原因:快速的編譯速度是Go編譯器和Go語言的有意識選擇

  • Go編譯器比C / C ++編譯器具有更簡單的優化器

  • 與C ++不同,Go沒有模板,也沒有內聯函數。這意味著Go不需要執行任何模板或函數實例化。

  • Go編譯器會更快地生成低級匯編代碼,而優化器將對匯編代碼進行處理,而在典型的C / C ++編譯器中,優化將對原始源代碼的內部表示進行傳遞。C / C ++編譯器的額外開銷來自需要生成內部表示的事實。

  • Go程序的最終鏈接(5l / 6l / 8l)可能比鏈接C / C ++程序要慢,因為Go編譯器正在遍歷所有使用的匯編代碼,也許它還在執行C / C ++的其他額外操作鏈接器沒有做

  • 一些C / C ++編譯器(GCC)生成文本形式的指令(傳遞給匯編器),而Go編譯器生成二進制形式的指令。為了將文本轉換為二進制,需要做一些額外的工作(但不多)。

  • Go編譯器僅針對少量CPU體系結構,而GCC編譯器針對大量CPU

  • 旨在提高編譯速度的編譯器(例如Jikes)速度很快。在2GHz CPU上,Jikes每秒可以編譯20000+行Java代碼(并且增量編譯模式效率更高)。


查看完整回答
反對 回復 2021-04-26
  • 3 回答
  • 0 關注
  • 377 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號