Header-Only Library - pragma(root)
    Walter Bright 
    newshound2 at digitalmars.com
       
    Sun Jun 14 08:36:50 UTC 2020
    
    
  
There is much misunderstanding in the "What does 'inline' mean?" thread.
I've slowly come to realize that it's not about inlining at all, it's about a 
desire for "header-only" libraries. To use a header-only library, you only have 
to import the module for it.
This works today in D if you also add the imported module to the command line. 
But, of course, it's good to make it simpler.
So, I propose the addition of `pragma(root);` which looks like:
--- electron.di ---
module electron;
pragma(root);    // header-only library!
int orbit() { return 3; }
--- atom.d ---
module atom;
import core.stdc.stdio;
import electron;
void main() {
     printf("%d orbits\n", orbit());
}
--------------
To compile, just:
   dmd atom
and the pragma(root) will cause the compiler to behave as if you'd typed:
   dmd atom electron
Not only does this make for header-only libraries, but if you have a project 
that is split up into several modules, it becomes super convenient to compile it 
if the other modules are all annotated with pragma(root).
Note that there's no "inline" anywhere. Inlining will remain about inlining, and 
nothing else.
    
    
More information about the Digitalmars-d
mailing list