Go 1.5的自举编译器比用C编写的Go 1.4编译器慢吗?

时间:2015-08-20 22:07:17

标签: go compiler-construction programming-languages

Go 1.5设法释放用Go编写的自举编译器。 假设Go比C慢,并且早期的Go编译器是用C编写的,那么自举编译器在编译时会变慢吗?

2 个答案:

答案 0 :(得分:7)

是的,Go 1.5编译器速度较慢,为discussed in the release notes

  

Go 1.5中的内置将慢大约两倍。编译器和链接器从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不会咬你的东西。

答案 1 :(得分:0)

嗯,PyPy是用Python编写的,并且它比用C语言编写的CPython更快(有时候)。

对于Go,该语言可以更轻松地编写更高效的代码,因此它不应该比旧的C版本慢。作家们小心翼翼地确保这一点。而不是更快,它更容易维护和扩展。

C很快,因为它接近CPU,但语言的速度更多地是关于算法来产生更高级的'功能(简单易用,但与CPU功能相比更先进)。

一个典型的例子是内存管理。 C malloc / free本身就很慢,因为它会在你释放它时重新组织空闲内存。垃圾收集器听起来要慢得多,因为它需要做的工作,但是你的程序可以释放内存并继续全速运行。