Go 使用通用 sort.Interface
有一个很好的 introsort 通用实现。但是 C++ 的 std::sort
的优点之一是您可以指定一个内联的比较仿函数,并省略不必要的函数调用。
我们可以强制当前的原生 Go 编译器以某种方式内联那些 sort.Swap
和 sort.Less
调用吗?我不考虑 gccgo
,因为与 native 编译器相比,它给我们带来了糟糕的结果。
最佳答案
对于 Go 1.x,答案是否定的。
Go 编译器可能会以某些特定的方式在某些平台上内联某些类的函数。您甚至可能想出一些技巧,通过这些技巧您可以使当前编译器在您的体系结构上内联排序“仿函数”,但绝对不能保证这将在未来的版本中保持不变,并且它可能对您不利(甚至破坏你的代码,这取决于所涉及的 hackery 级别)当编译器更改时。
Go 的主要版本(2.x?)可能提供一些关于优化的保证;但对于 Go 1.x 来说,没有那样的东西。即使 Go 的作者想要这样做,也很难为所有平台提供这样的保证(记住 Go 可以在许多架构上运行)。
更一般地说,在任何语言中依赖特定于编译器的行为都是一个坏主意。
关于sorting - Go 中的内联函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26323611/