Go使用泛型sort.Interface
有一个很好的内部执行通用实现。但是C ++的std::sort
的一个优点是你可以指定一个内联的比较仿函数,并省略不必要的函数调用。
我们能否以某种方式强制当前的本地Go编译器内联sort.Swap
和sort.Less
个调用?我不认为gccgo
因为与原生编译器相比,它给我们带来了可怕的结果。
答案 0 :(得分:2)
对于Go 1.x,答案是声音否。
Go编译器可以某些特定方式在某些平台上内联某些类函数。您甚至可以找出一些技巧,通过这些技巧,您可以使当前编译器在您的体系结构中内联排序 - “仿函数”,但绝对无法保证在将来的版本中它将保留它并且它可能对您不利(甚至在编译器更改时,根据所涉及的hackery级别打破代码。
Go(2.x?)的主要版本可能提供有关优化的一些保证;但对于Go 1.x来说,没有那样的东西。即使Go作者想要这样做,也难以为所有平台提供这样的保证(记住Go在许多架构上运行)。
更一般地说,依赖于任何语言的编译器特定行为是一个坏主意。