中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

go語言編譯速度快不快

發布時間:2021-06-07 14:50:24 來源:億速云 閱讀:377 作者:小新 欄目:編程語言

小編給大家分享一下go語言編譯速度快不快,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

go語言編譯速度快,原因:1、使用了import的引用管理方式;2、沒有模板的編譯負擔;3、1.5版本后的自舉編譯器優化;4、更少的關鍵字,Go語言中的關鍵字一共有25個,可以簡化在編譯過程中的代碼解析。

本教程操作環境:windows10系統、GO 1.11.2、Dell G3電腦。

現在Go的幾個主要特點,編譯速度、執行速度、內存管理以及并發編程。

Go的編譯為什么快

當然,設計Go語言也不是完全從零開始,最初Go的團隊嘗試設計實現一個Go語言的編譯前端,由基于C的gcc編譯器來編譯成機器代碼,這個面向gcc的前端編譯器也就是目前的Go編譯器之一的gccgo。

與其說Go的編譯為什么快,不如先說說C++的編譯為什么慢,C++也可以用gcc編譯,編譯速度的大部分差異很有可能來源于語言設計本身。

在討論問題之前,其中需要先說明的一點是:這里比較的編譯速度都是在靜態編譯下的。

靜態編譯和動態編譯的區別

靜態編譯:編譯器在編譯可執行文件時,要把使用到的鏈接庫提取出來,鏈接打包進可執行文件中,編譯結果只有一個可執行文件。
動態編譯:可執行文件需要附帶獨立的庫文件,不打包庫到可執行文件中,減少可執行文件體積,在執行的時候再調用庫即可。

兩種方式有各自的優點和缺點,前者不需要去管理不同版本庫的兼容性問題,后者可以減少內存和存儲的占用(因為可以讓不同程序共享同一個庫),兩種方式孰優孰弱,要對應到具體的工程問題上,Go默認的編譯方式是靜態編譯。

回到我們要討論的問題:C++的編譯為什么慢?

C++編譯慢的主要兩個大頭原因:

1、頭文件的include方式

2、模板的編譯

C++使用include方式引用頭文件,會讓需要編譯的代碼有乘數級的增加,例如當同一個頭文件被同一個項目下的N個文件include時,編譯器會將頭文件引入到每一份代碼中,所以同一個頭文件會被編譯N次(這在大多數時候都是不必要的);

C++使用的模板是為了支持泛型編程,在編寫對不同類型的泛型函數時,可以提供很大的便利,但是這對于編譯器來說,會增加非常多不必要的編譯負擔。

當然C++對這兩個問題有很多后續的優化方法,但是這對于很多開發者來說,他們不想在這上面有過多時間和精力開銷。

大部分后來的編程語言在引入文件的方式上,使用了import module來代替include
頭文件的方式,import解決了重復編譯的問題,當然Go也是使用的import方式;在模板的編譯問題上,由于Go在設計理念上遵循從簡入手,所以沒有將泛函編程納入到設計框架中,所以天生的沒有模版編譯帶來的時間開銷(沒有泛型支持也是很多人不滿Go語言的理由)。

所以在我看來,Go編譯速度快,主要出于四個原因:

1、使用了import的引用管理方式;

2、沒有模板的編譯負擔;

3、1.5版本后的自舉編譯器優化;

4、更少的關鍵字。

Go語言中的關鍵字一共有 25 個:

breakdefaultfuncinterfaceselect
casedefergomapstruct
chanelsegotopackageswitch
constfallthroughifrangetype
continueforimportreturnvar

之所以刻意地將Go語言中的關鍵字保持的這么少,是為了簡化在編譯過程中的代碼解析。和其它語言一樣,關鍵字不能夠作標識符使用。

所以為了加快編譯速度、放棄C++而轉入Go的同時,也要考慮一下是否要 放棄泛型編程的優點。

注:泛型可能在Go 2版本獲得支持。

note:
Go雖然還無法達到C++那樣的極致性能,但是在大部分情況下已經很接近了;
Go和Java在算法的時間開銷上難分伯仲,但在內存的開銷上Java就要高得多了;
Go在上述的絕大部分情況下,至少時間和內存開銷都比Python要優秀得多;

以上是“go語言編譯速度快不快”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

梓潼县| 洞口县| 依安县| 康保县| 金山区| 九江县| 福安市| 桐乡市| 池州市| 东明县| 苏尼特右旗| 南平市| 大同市| 梅河口市| 炉霍县| 张家口市| 吉木乃县| 邻水| 望都县| 阿图什市| 平顺县| 启东市| 麟游县| 巨鹿县| 屏南县| 华安县| 铜山县| 徐州市| 云和县| 南和县| 本溪| 林芝县| 佛冈县| 恩平市| 大渡口区| 南丹县| 惠安县| 汤原县| 改则县| 从化市| 英吉沙县|