On Saturday, 21 September 2013 at 11:34:10 UTC, Temtaime wrote:
Are you saying about passing a function via pointer to winapi for example? The logic is simple: if someone gets function address, then function cannot be stripped. It's logic of all c++ compilers.

More like passing an object instance to plugin which knows it only via .di import. Compiler can't possibly know what methods of that object (or function indirectly accessible from it) will be available in the .di and/or called and must act conservatively, preserving everything.

It will also need to be aware of fact that function pointer retrieved via `dlsym` is actually some external function and use that knowledge during optimization.

Also it is worth noting that naive preservation of all functions that got their address may not work very well with frequent lambda usage for algorithms in D.

Same stuff with inheritance. It is just another side of a problem why compiler can't de-virtualize certain methods based on whole program class graph.

I won't be as harsh as to say it is impossible but this clearly requires defining some parts of the language that are currently vague.

P.S. C++ compilers are not much better here in that regard, unless you are going to try some non-standard tweaks.

Reply via email to