On Friday, 30 March 2018 at 10:23:15 UTC, Cecil Ward wrote:
Say that I use say GDC or LDC. I want to declare a routine as public in one compilation unit (.d src file) and be able to access it from other compilation units.

Do I simply declare the routine with the word keyword public before the usual declaration?

Or maybe that is the default, like not using the keyword static with function declarations in C?

Global functions in a module have default "public" visibility indeed.
https://dlang.org/spec/attribute.html#visibility_attributes

My principal question: If I successfully do this, with GCC or LDC, will I be able to get the code for the externally defined short routine expanded inline and fully integrated into the generated code that corresponds to the calling source code? (So no ‘call’ instruction is even found.)

What you want is "cross-module inlining".
As far as I know, DMD and GDC will do cross-module inlining (if inlining is profitable).

LDC does not, unless `-enable-cross-module-inlining` is enabled (which is aggressive and may result in linking errors in specific cases, https://github.com/ldc-developers/ldc/pull/1737). LDC with LTO enabled will definitely give you cross-module inlining (also for private functions).

You can force inlining with `pragma(inline, true)`, but it is usually better to leave that decision up to the compiler.
https://dlang.org/spec/pragma.html#inline

-Johan


Reply via email to