https://issues.dlang.org/show_bug.cgi?id=15671

--- Comment #6 from Steven Schveighoffer <[email protected]> ---
Yes, Stanislav's description is correct.

The problem with the way pragma(inline) is implemented today is that it's very
brittle if you are depending on functions that might change the heuristic in
the future.

Consider a function like:

int foo(int val)
{
   // a bunch of complicated code.
   ...
}

In normal code, I enable inlining and whether the compiler inlines this or not,
I don't care. Now, it turns out that a very frequent use of foo among users is:


auto x = someString.length ? foo(someString.to!int) : 0;

So I want to capture that as a wrapping function:

int fooStr(string val)
{
   import std.conv : to;
   return val.length ? foo(val.to!int) : 0;
}

But I don't want to change the performance of the original code, so I want the
compiler to inline fooStr. I still don't care and want to leave it up to the
compiler whether foo itself can be inlined. I just want to provide a nice way
to avoid having to import std.conv, and write that conditional call every time.
I don't care if foo is inlined, but I DO want fooStr to be inlined.

Without this functionality I'm not exactly sure why pragma(inline) even exists.

--

Reply via email to