Rumah >pembangunan bahagian belakang >Golang >go语言编译快吗
go语言编译速度快,原因:1、使用了import的引用管理方式;2、没有模板的编译负担;3、1.5版本后的自举编译器优化;4、更少的关键字,Go语言中的关键字一共有25个,可以简化在编译过程中的代码解析。
本教程操作环境:windows10系统、GO 1.11.2、Dell G3电脑。
现在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!