| ▲ | ndesaulniers 6 hours ago | ||||||||||||||||
> For instance, in C, qsort() takes a function pointer for the comparison function, in Rust and C++, the standard library sorting functions are templated on the comparison function. That's more of a critique of the standard libraries than the languages themselves. If someone were writing C and cared, they could provide their own implementation of sort such that the callback could be inlined (LLVM can inline indirect calls when all call sites are known), just as it would be with C++'s std::sort. Further, if the libc allows for LTO (active area of research with llvm-libc), it should be possible to optimize calls to qsort this way. | |||||||||||||||||
| ▲ | jesse__ 6 hours ago | parent | next [-] | ||||||||||||||||
"could" and "should" are doing some very theoretical heavy lifting here. Sure, at the limit, I agree with you, but in reality, relying on the compiler to do any optimization that you care about (such as inlining an indirect function call in a hot loop) is incredibly unwise. Invariably, in some cases it will fail, and it will fail silently. If you're writing performance critical code in any language, you give the compiler no choice in the matter, and do the optimization yourself. I do generally agree that in the case of qsort, it's an API design flaw | |||||||||||||||||
| |||||||||||||||||
| ▲ | josephg 4 hours ago | parent | prev [-] | ||||||||||||||||
> That's more of a critique of the standard libraries than the languages themselves. But we're right to criticise the standard libraries. If the average programmer uses standard libraries, then the average program will be affected (positively and negatively) by its performance and quirks. | |||||||||||||||||