RFC: Move runtime hook definitions to a .di file in druntime

Mike via D.gnu d.gnu at puremagic.com
Fri Oct 10 23:59:32 PDT 2014


In my continued, though stalled, effort to try and make minimal 
runtime for embedded systems, I've tried to find a way for users 
to know at compile-time if a feature of the runtime is supported 
or not, and more importantly, if they are explicitly or 
implicitly using an unsupported feature.

I'm not really in favor of adding a lot of compiler switches that 
create a new dialect of the language, though I'd take it if it 
were the only way.  I'd rather have druntime inform the compiler 
what is or isn't supported, and avoid compiler changes.

I've recently realized that druntime doesn't really have to be 
any different than other libraries: if a function isn't supported 
it simply isn't declared in the library's headers. If users make 
use of the undeclared function, explicitly or implicity, they get 
a compiler error, just like they would with any other library.  
Currently these library hooks are all declared in d-codegen.cc 
and documented at http://wiki.dlang.org/Runtime_Hooks

So, I'm wondering if the compiler maintainers would entertain a 
change to the GDC that moved the runtime declarations (i.e. 
_d_newclass, _d_{whatever}) to a .di file in druntime.
* Compilation would automatically import this header.
* The compiler would throw an undefined identifier error if it 
needs to make a call to a runtime hook that isn't declared.
* The.di file could be object.di, since it seems to have already 
become the site for anything to be implicitly imported, but it 
doesn't have to be.

Of course there would have to be changes to the compiler to 
implement this idea, but I think it would be completely 
transparent to users.

* It will make it easier to implement a more polished minimal 
druntime, a "D as a better C", or some other variation of the 
language without having to resort to compiler changes.  Such a 
runtime has been asked for several times on these forums and even 
proposed by Walter.  This change won't eliminate calls for 
certain compiler switches, but it will provide developers with a 
few more tools to hopefully avoid them.

* It makes the language more consistent.  Runtime hooks could 
become less "special" to the language and the compiler, and can 
be treated just like any other library function: If the 
declaration doesn't exist, compiler error.

* Runtime hooks can be easily decorated with @deprecated or other 
attributes and enable several techniques to test language changes 
without having to rebuild the compiler.

Thanks for your thoughtful consideration,


More information about the D.gnu mailing list