On Tuesday, 7 January 2014 at 21:52:54 UTC, Dwhatever wrote:
What CPU/MCU are you targeting? Are you building for bare-metal?

Yes, for bare metal, no OS, nothing.

I think I have to specify my target architecture and CPU otherwise the compiler cannot know that I'm cross compiling for ARM. -march= -mcpu= will not work for me.

I'm trying to compile a simple stand alone object file.

class TestClass
{
    ubyte member;

    this(ubyte m) { member = m; }
    ubyte Get() { return member; }
};


extern(C) void main()
{
    // stack class
   scope test = new TestClass(0);

   // simple inline asm test
   __asm("mov r0,#1;
          mov r1,#2", "~{r0,r1}");
}

This test should be simple enough I thought but it turned out that to compile and link this, D requires almost everything from the runtime.

So the challenge is, compile and link the simple code above targeting ARM using LDC, no OS allowed.

First of all, there's no such thing as a class allocated on the stack in D. See here ( http://dlang.org/deprecate.html#scope for allocating classes on the stack). You have to go with structs if you want that feature, but there are other ways like Scoped(T), RefeCounted(T), scope(exit), etc... It feels as little half-ass to do things this way, but D is quite powerful, and an alternate, elegant solution is probably just waiting to be discovered.

Anyway, once you add the word "class" or "struct" you release an avalanche of snowballing required runtime stuff that you are likely not even using, directly or indirectly, in your program. And if using --gc-sections in your linker, it all just gets stripped out in the end. I was trying to articulate that here (http://forum.dlang.org/post/zewevdmburppufkjx...@forum.dlang.org)

IMO this is a problem with the compiler, not D, and LDC suffers from it much more than GDC. Iain Buclaw recently made a change to GDC (http://forum.dlang.org/post/mailman.3.1387377012.2938.d....@puremagic.com) that allowed me to reduce my object.d to 140 lines, and with an accompanying malloc and free, I was able to create classes. I don't know what the change was, but it was most beneficial (Thanks Iain!). I hope the LDC folks can do the same, but I probably need to file an enhancement request and make a case for it.

I'm sorry I can't share my code at the moment; I haven't decided yet where to put it. I was studying Adam Ruppe's minimal X86 port last night and found it most useful (Thumbs Up!), but with a 2000 line object.d, it's stretching the word "minimal", at least when compared with C. But if you really want all the cool stuff D has to offer, this is probably what will be required in the end.

All the compilers seem to have been written mostly with the PC in mind, and seem to expect too much of the D runtime accompanying the compiler, which is definitely very different from C/C++ where you only pay for what you use. It also seems some argue that if you aren't using the full runtime, you aren't using D, and they have a point, but only one that limits D's appeal. The compiler folks have been most helpful so far as I try to "go minimal" with D, but I hope they will see the benefit of an "only require what is actually used" approach. D is, however, different from C, and this may have some consequences as mentioned here ( http://forum.dlang.org/post/lagsn7$2lqc$1...@digitalmars.com).

In further constrast with C, much of the language is implemented in the runtime, as you previously alluded to. Even the switch...case statement seems to be, at least partially, implemented in the runtime (https://github.com/D-Programming-Language/druntime/blob/master/src/rt/switch_.d). I think this is great, because this means we don't have to know how to build compilers to port the language to a given platform. And with a "pay as you go" compiler, this could make D suitable for even the tiniest of microcontrollers.

Anyway, if you want to go minimal, go with GDC for now. I hope to file some enhancement requests with the compilers soon that will help with this very issue, but I don't know how interested they will be in addressing them. I do see progress being made, so I'm hopeful.

Mike

Reply via email to