How minimal I can go using D on GDC?

Iain Buclaw ibuclaw at ubuntu.com
Sun May 12 08:14:33 PDT 2013


On 11 May 2013 16:51, Rel <relmail at rambler.ru> wrote:

> 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?
>


-nophoboslib tells the driver not to link to phobos/druntime.

-nostdlib tells the driver not to link to any C libs.

-fno-exceptions only puts in an error if it encounters a 'throw'
statement.  Doesn't actually prevent the front-end from generating
throw/try/catch statements on the fly, or do anything that causes an
exception to be raised, and I don't think it errors about the use of assert
contracts either.  Looking at the above, you use scope() statements.  This
really is just a nice way of expressing try { }  catch { } finally { }
without all the nested blocks.

-fno-rtti is not adhered to, infact I didn't realise that it was even a
common compiler switch  (thought it was only in g++).   This could be added
in, not should on how good an idea it would be though... :)

_Dmodule_ref should be possible to not define this via a compiler flag, but
that has not yet been implemented.


-- 
Iain Buclaw

*(p < e ? p++ : p) = (c & 0x0f) + '0';
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/d.gnu/attachments/20130512/4929f3c3/attachment.html>


More information about the D.gnu mailing list