hello! I used to have a bit unusual task: writing pure binary code (without runtime/os dependency, just native x86 and x64 code). Quite similar to the OS kernel development I may say, if it makes the problem clearer for you. I usually wrote such code in C++ with GCC (using '-nostdlib', '-fno-exceptions', '-fno-rtti' and etc), but now I need a good metaprogramming features and complex metaprogramming in C++ makes a brain explode. D metaprogramming and the language in general looks awesome, so I decided to give it a try.
I looked at the XOMB and a few other projects, but it seems they reimplemented quite big part of druntime to make their project work, in fact a lot of stuff reimplemented by them I would consider being actually useless. So my question is: how much of the runtime features I could disable?
for testing purposes I made a little programm (I'm building it with '-nophoboslib', '-nostdlib', '-fno-exceptions', '-emain'):
module main;
extern (C) void* _Dmodule_ref = null;
extern (C) void puts(const char*);
extern (C) void exit(int);
extern (C) void main() {
scope(exit) {
puts("Exiting!");
exit(0);
}
puts("Hello World!");
}
I had to include '_Dmodule_ref' in the source, it seems that it is used for calling module constructors, I'm not going to use them, can I disable it somehow?
when I added 'scope(exit)' part I got links to exception handling code in object files, I'm not going to use exceptions, so I added '-fno-exceptions' flag, and it seems to work pretty fine. but when I try to add some primitive classese I got a lot of links to the code that seems to be connected with runtime type information, I don't need it so I tried to add '-fno-rtti' flag, but it doesn't work. Is there a way to get rid of runtime type information?