On Tuesday 22 May 2012 07:08:34 Atlant Schmidt wrote: > Folks: > > There's been a lot of discussion recently regarding whether > or not Qt functions (specifically, interlocking functions) > should be declared "inline" or not. > > But in fact, isn't this much ado about nothing? If I > understand current compiler technology, when one declares > a function "inline", that's nothing more than a hint to > the compiler. (At least at high optimization settings), > the compiler can choose to ignore you and compile your > function as an ordinary out-of-line function. It can also > chose to elevate any ordinary function to inline if it > chooses. (Isn't "tail-folding" a common example of this?) > > We can discuss this 'til the cows come home, but nowadays, > how much control can we really assert / do we really want > to assert over this? > > Aren't we supposed to be Relegating the Important Stuff > to the Compilers? What you write there is true for code within the same object. But here we are talking about code used between libraries and about binary compatibility.
We have to choose between letting the compiler inline, or not. If we let the compiler the possibility to inline the code, that means that the code build with Qt 5.0 will include that inline code in its binary. Which means that if we want change the internal in Qt 5.x, we still need to be aware that the old inlined code can still be run. So we need to be very careful about allowing the compiler to inline, because that restricts us a lot in what we can change from version to version. Then, we can disallow the compiler to inline by not putting the code in the header. Then we loose in performance. Inlining safe performance not only because it saves the overhead of a function call, but mainly because it allows the compiler to do more analysis of the code around, allowing it to perform a lot more of optimization. It is also not binary compatible to change the inlineness of a function: With Linux we compile with -fvisibility-inlines-hidden, which means inlined symbol are not exported. So if we inline a method, it stops being exported. And binaries compiled with old Qt stop working. -- Olivier Woboq - Qt services and support - http://woboq.com _______________________________________________ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development