I completely agree that DMD's inliner is underpowered and needs
improvement. I am less sure that this demonstrates that the language
needs changes.
Functions below a certain size should be inlined if possible. Those
above that size do not benefit perceptibly from inlining. Where that
certain size exactly is, who knows, but I doubt that functions near that
size will benefit much from user intervention.
More specifically a distinction would be nice like gcc does:
"-finline-small-functions
Integrate functions into their callers when their body is smaller than
expected function call code (so overall size of program gets smaller). The
compiler heuristically decides which functions are simple enough to be
worth integrating in this way.
Enabled at level -O2.
-finline-functions
Integrate all simple functions into their callers. The compiler
heuristically decides which functions are simple enough to be worth
integrating in this way.
Enabled at level -O3."