Go 1.5设法发布了用Go编写的引导编译器。假设Go比C慢,而且更早的Go编译器是用C编写的,那么引导编译器在编译时间上会变慢吗?
发布于 2015-08-20 23:57:30
是的,Go 1.5编译器速度较慢,如discussed in the release notes
Go 1.5中的构建速度将减慢约2倍。编译器和链接器从C到Go的自动转换导致了与编写良好的Go相比性能较差的统一Go代码。分析工具和重构有助于改进代码,但仍有许多工作要做。在Go 1.6和以后的版本中,将继续进行进一步的分析和优化。有关更多细节,请参见这些slides和相关的video。
同样,编译器(最初)是自动翻译的,所以在翻译之后,它输出的代码与前面的相同:您的程序并不慢,因为编译器是。The rest of the release notes和上面的链接提供了更多的光明。除了编译速度之外,还有其他考虑因素:作者打算在Go中比在C中移动得更快。
我建议升级:开源代码将依赖于1.5,如果你留在后面,就会失去很多很酷的东西,比如将大部分工作推入后台会大大减少GC延迟(在上面链接的性能部分中也有讨论;我写了一些关于它的文章,responding to another question)。
与任何大型升级一样,您应该进行测试,以确保像使用所有可用内核的新默认设置、对调度的调整或任何一个小library behavior changes都不会咬到您。
发布于 2015-08-20 22:26:06
PyPy是用Python编写的,它比用C编写的CPython更快(有时)。
在Go的情况下,该语言使编写更高效的代码变得更容易,因此它不应该比旧的C版本慢。作家们很小心地确定了这一点。它不是更快,而是更容易维护和扩展。
C是快速的,因为它接近CPU,但是语言的速度更多地是关于生成更“高级”特性的算法(使用起来简单,但比CPU特性先进)。
一个典型的例子是内存管理。C/ free本身就是缓慢的,因为每当您释放它时,它就会重新组织空闲内存。垃圾收集器听起来慢很多,因为它需要做的工作,但您的程序可以释放内存,并继续以最快的速度。
https://stackoverflow.com/questions/32129220
复制相似问题