Frequently Asked Questions:基准测试性能,和C为什么区别那么大

413 阅读2分钟

这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战

为什么 Go 在基准 X 上表现不佳

Go 的设计目标之一是拥有接近 C语言一样的性能,但在某些基准测试中它的表现相当糟糕,包括 golang.org/x/exp/shoot… 中的几个。表现最慢的几个是因为在 Go 中,他们依赖的库性能都不太行。例如,pidigits.go 依赖于多精度数学包,而 C 版本与 Go 不同,使用 GMP(用优化的汇编程序编写)。依赖于正则表达式的基准测试(例如 regex-dna.go)本质上是将 Go 的原生 regexp 包与成熟的、高度优化的正则表达式库(如 PCRE)进行比较。

其实基准测试这个东西是通过广泛的调整赢得的,如果你在考虑这个事情,那么请有这个概念。如果您对比等效的 C 和 Go 程序(reverse-complement.go 是一个示例),您会发现这两种语言的原始性能表现差异,会比一些测试套件显示的要接近得多。

尽管如此,仍有改进的余地。编译器很好但可以做的更好,许多库需要进行主要的性能提升,垃圾收集器还不够快。 (即使是这样,尽量不要产生不必要的垃圾,因为这会产生巨大的影响。)

无论如何,Go语言通常非常具有竞争力。随着语言和工具的发展,许多程序的性能有了显着提高。有关信息丰富的示例,请参阅有关分析 Go 程序的博客文章。

essentially   基本上
extensive  广阔的

为什么语法与 C 如此不同?

除了声明语法之外,差异并不大,而且主要是因为两个目标。 首先,语法应该让人感觉轻松,没有太多的强制性关键字、重复或奥秘。 其次,该语言的设计易于分析,无需符号表即可解析。 这使得构建调试器、依赖分析器、自动化文档提取器、IDE 插件等工具变得更加容易。 C 及其后代在这方面是出了名的困难。