How minimal I can go using D on GDC?

Rel relmail at rambler.ru
Sat May 11 08:51:05 PDT 2013


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?


More information about the D.gnu mailing list