Go 有一个很好的使用泛型的 introsort 泛型实现sort.Interface。但是 C++ 的优点之一std::sort是您可以指定一个内联的比较函子,并省略不必要的函数调用。我们可以强制当前的本地 Go 编译器以某种方式内联这些sort.Swap和sort.Less调用吗?我不考虑,gccgo因为与本机编译器相比,它给我们带来了可怕的结果。
1 回答
繁星coding
TA贡献1797条经验 获得超4个赞
对于 Go 1.x,答案是否定的。
Go 编译器可能会以某些特定方式内联某些平台上的某些类函数。您甚至可以找出一些技巧,通过这些技巧,您可以使当前的编译器内联您的体系结构上的排序“函子”,但是绝对不能保证这将在未来的版本中保持不变,并且它可能对您不利(即使当编译器更改时,破坏您的代码,具体取决于所涉及的黑客级别)。
Go 的主要版本(2.x?)可能会提供一些关于优化的保证;但是对于 Go 1.x 来说,没有这样的东西。即使 Go 的作者想要这样做,也很难为所有平台提供这样的保证(记住 Go 在许多架构上运行)。
更普遍的是,在任何语言中依赖特定于编译器的行为都是一个坏主意。
- 1 回答
- 0 关注
- 284 浏览
添加回答
举报
0/150
提交
取消