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