go语言编译速度快吗-mile米乐体育
go语言编译速度快吗
本文小编为大家详细介绍“go语言编译速度快吗”,内容详细,步骤清晰,细节处理妥当,希望这篇“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 个:
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要优秀得多;
读到这里,这篇“go语言编译速度快吗”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注恰卡编程网行业资讯频道。