3 回答

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊
依賴性分析。
在轉(zhuǎn)到FAQ用于包含下面的句子:
Go提供了一種用于軟件構(gòu)建的模型,該模型使依賴關(guān)系分析變得容易,并避免了C樣式包含文件和庫的大量開銷。
雖然該短語不再是FAQ中的內(nèi)容,但是在Google的Go討論中對(duì)該主題進(jìn)行了詳細(xì)說明,該演講比較了C / C ++和Go的依賴關(guān)系分析方法。
這是快速編譯的主要原因。這是設(shè)計(jì)使然。

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個(gè)贊
我認(rèn)為不是Go編譯器很快,而是其他編譯器很慢。
C和C ++編譯器必須解析大量的標(biāo)頭-例如,編譯C ++“ hello world”需要編譯18k行代碼,這幾乎是源代碼的一半!
$ cpp hello.cpp | wc 18364 40513 433334
Java和C#編譯器在VM中運(yùn)行,這意味著操作系統(tǒng)必須先加載整個(gè)VM,然后才能對(duì)其進(jìn)行編譯,然后再將它們從字節(jié)碼JIT編譯為本機(jī)代碼,所有這些都需要花費(fèi)一些時(shí)間。
編譯速度取決于幾個(gè)因素。
某些語言旨在快速編譯。例如,Pascal被設(shè)計(jì)為使用單遍編譯器進(jìn)行編譯。
編譯器本身也可以優(yōu)化。例如,Turbo Pascal編譯器是用手動(dòng)優(yōu)化的匯編器編寫的,該匯編器與語言設(shè)計(jì)結(jié)合在一起,從而使真正的快速編譯器可以在286類硬件上工作。我認(rèn)為即使是現(xiàn)在,現(xiàn)代的Pascal編譯器(例如FreePascal)也比Go編譯器快。

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊
Go編譯器比大多數(shù)C / C ++編譯器快得多的原因有很多:
主要原因:大多數(shù)C / C ++編譯器的設(shè)計(jì)都非常差(從編譯速度的角度來看)。同樣,從編譯速度的角度來看,C / C ++生態(tài)系統(tǒng)的某些部分(例如,程序員在其中編寫代碼的編輯器)在設(shè)計(jì)時(shí)并未考慮編譯速度。
主要原因:快速的編譯速度是Go編譯器和Go語言的有意識(shí)選擇
Go編譯器比C / C ++編譯器具有更簡單的優(yōu)化器
與C ++不同,Go沒有模板,也沒有內(nèi)聯(lián)函數(shù)。這意味著Go不需要執(zhí)行任何模板或函數(shù)實(shí)例化。
Go編譯器會(huì)更快地生成低級(jí)匯編代碼,而優(yōu)化器將對(duì)匯編代碼進(jìn)行處理,而在典型的C / C ++編譯器中,優(yōu)化將對(duì)原始源代碼的內(nèi)部表示進(jìn)行傳遞。C / C ++編譯器的額外開銷來自需要生成內(nèi)部表示的事實(shí)。
Go程序的最終鏈接(5l / 6l / 8l)可能比鏈接C / C ++程序要慢,因?yàn)镚o編譯器正在遍歷所有使用的匯編代碼,也許它還在執(zhí)行C / C ++的其他額外操作鏈接器沒有做
一些C / C ++編譯器(GCC)生成文本形式的指令(傳遞給匯編器),而Go編譯器生成二進(jìn)制形式的指令。為了將文本轉(zhuǎn)換為二進(jìn)制,需要做一些額外的工作(但不多)。
Go編譯器僅針對(duì)少量CPU體系結(jié)構(gòu),而GCC編譯器針對(duì)大量CPU
旨在提高編譯速度的編譯器(例如Jikes)速度很快。在2GHz CPU上,Jikes每秒可以編譯20000+行Java代碼(并且增量編譯模式效率更高)。
- 3 回答
- 0 關(guān)注
- 378 瀏覽
添加回答
舉報(bào)