sorting - Go 中的内联函数

标签 sorting go

Go 使用通用 sort.Interface 有一个很好的 introsort 通用实现。但是 C++ 的 std::sort 的优点之一是您可以指定一个内联的比较仿函数,并省略不必要的函数调用。 我们可以强制当前的原生 Go 编译器以某种方式内联那些 sort.Swapsort.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/

相关文章:

c - 使用C进行归并排序,输出出错

php - 按二级数组计数对数组排序

go - Go 中的自定义长度位类型?

string - 严格将字符串转换为 int

algorithm - 使用枢轴中间元素在最坏情况下快速排序复杂性

java - 在java中对相关文本文件进行排序创建公共(public)索引

sorting - block 排序算法

go - 从单独的包/文件夹导入代码

go - 在 Go 中,如何使用反射在结构上设置映射的值?

go - 如何解决 "too many arguments to return"问题