cari

go语言编译快吗

Jun 07, 2021 pm 02:00 PM
pergi bahasa

go语言编译速度快,原因:1、使用了import的引用管理方式;2、没有模板的编译负担;3、1.5版本后的自举编译器优化;4、更少的关键字,Go语言中的关键字一共有25个,可以简化在编译过程中的代码解析。

go语言编译快吗

本教程操作环境: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 个:

break default  func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var

之所以刻意地将Go语言中的关键字保持的这么少,是为了简化在编译过程中的代码解析。和其它语言一样,关键字不能够作标识符使用。

所以为了加快编译速度、放弃C++而转入Go的同时,也要考虑一下是否要 放弃泛型编程的优点。

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

note:
Go虽然还无法达到C++那样的极致性能,但是在大部分情况下已经很接近了;
Go和Java在算法的时间开销上难分伯仲,但在内存的开销上Java就要高得多了;
Go在上述的绝大部分情况下,至少时间和内存开销都比Python要优秀得多;

推荐学习:Golang教程

Atas ialah kandungan terperinci go语言编译快吗. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Memahami Goroutine: menyelam mendalam ke go's concurrencyMemahami Goroutine: menyelam mendalam ke go's concurrencyMay 01, 2025 am 12:18 AM

Goroutinesarefunctionsormethodsthatrunconcurlyingo, enablingefficientandlightweightconcurrency.1) theareManagedBygo'sruntimeusingmultiplexing, membolehkanThousthyandstorunonfewerthreads.2) goroutinesimproveprovperformancethoaseaseaseasyfaskmismenteFf

Memahami fungsi init di GO: Tujuan dan PenggunaanMemahami fungsi init di GO: Tujuan dan PenggunaanMay 01, 2025 am 12:16 AM

Thepurposeoftheinitfunctioningoistoinitializevariables, setupconfigurations, orperformnessarysetupbeforethemainfunctionExecutes.useinitby: 1) Placingitinyourcodetorunautomaticallybeforemain, 2) penyimpanan

Memahami Antara muka: Panduan KomprehensifMemahami Antara muka: Panduan KomprehensifMay 01, 2025 am 12:13 AM

Gointerfacesaremethodsignaturesetsthattypesmustimplement,enablingpolymorphismwithoutinheritanceforcleaner,modularcode.Theyareimplicitlysatisfied,usefulforflexibleAPIsanddecoupling,butrequirecarefulusetoavoidruntimeerrorsandmaintaintypesafety.

Pulih dari panik di Go: Bila dan Cara Menggunakan Pulih ()Pulih dari panik di Go: Bila dan Cara Menggunakan Pulih ()May 01, 2025 am 12:04 AM

Gunakan fungsi pulih () dalam GO untuk pulih dari panik. Kaedah khusus adalah: 1) Gunakan pulih () untuk menangkap panik dalam fungsi penangguhan untuk mengelakkan kemalangan program; 2) rekod maklumat ralat terperinci untuk debugging; 3) memutuskan sama ada untuk meneruskan pelaksanaan program berdasarkan keadaan tertentu; 4) Gunakan dengan berhati -hati untuk mengelakkan mempengaruhi prestasi.

Bagaimana anda menggunakan & quot; Strings & quot; Pakej untuk memanipulasi rentetan dalam perjalanan?Bagaimana anda menggunakan & quot; Strings & quot; Pakej untuk memanipulasi rentetan dalam perjalanan?Apr 30, 2025 pm 02:34 PM

Artikel ini membincangkan menggunakan pakej "Strings" Go untuk manipulasi rentetan, memperincikan fungsi umum dan amalan terbaik untuk meningkatkan kecekapan dan mengendalikan Unicode dengan berkesan.

Bagaimana anda menggunakan & quot; crypto & quot; Pakej untuk melakukan operasi kriptografi di GO?Bagaimana anda menggunakan & quot; crypto & quot; Pakej untuk melakukan operasi kriptografi di GO?Apr 30, 2025 pm 02:33 PM

Butiran artikel menggunakan pakej "crypto" Go untuk operasi kriptografi, membincangkan generasi utama, pengurusan, dan amalan terbaik untuk pelaksanaan yang selamat.

Bagaimana anda menggunakan & quot; masa & quot; pakej untuk mengendalikan tarikh dan masa dalam perjalanan?Bagaimana anda menggunakan & quot; masa & quot; pakej untuk mengendalikan tarikh dan masa dalam perjalanan?Apr 30, 2025 pm 02:32 PM

Artikel ini memperincikan penggunaan pakej "masa" Go untuk pengendalian tarikh, masa, dan zon masa, termasuk mendapatkan masa semasa, mewujudkan masa tertentu, rentetan parsing, dan mengukur masa berlalu.

Bagaimana anda menggunakan & quot; mencerminkan & quot; pakej untuk memeriksa jenis dan nilai pembolehubah dalam GO?Bagaimana anda menggunakan & quot; mencerminkan & quot; pakej untuk memeriksa jenis dan nilai pembolehubah dalam GO?Apr 30, 2025 pm 02:29 PM

Artikel membincangkan menggunakan pakej "mencerminkan" Go untuk pemeriksaan dan pengubahsuaian yang berubah -ubah, menonjolkan kaedah dan pertimbangan prestasi.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft