D Design Could Be Improved

Sean Kelly sean at f4.ca
Sun Dec 17 10:06:32 PST 2006


Aleksey S. Skidan wrote:
> The inline assembler seems to be a weak point in the language design.
> I do like the GCC inline assembler and can't understand the reasons
> why not to use it. The current implementation of D's inline assembler
> is IMNHO not good.
> Let's consider the following example:
> asm{ di 2+3; }
> The code won't ever be compiled. Just because the assembler consider 2+3 not
> to be a constant expression. But it certainly is (it depends on 2 constants).

Applying basic constant folding to asm blocks doesn't sound like it 
should be too difficult to add.

> The other ugly thing is Intel syntax. There's a lot of software written in
> AT&T syntax. I guess both the Intel and AT&T syntaxes must be available.

Why?  Personally, I'd like to see asm supported as defined in the 
relevant spec, which is what Walter has done.  GCC's asm format is 
particularly ugly--I definitely don't want that.

> The weakness of current inline assembler makes the language (i mean D) not
> fitable for system programming.
> I noticed that there's no ability to name a symbol in a way like that:
> void foo() asm("bar"); Please, note that this kind of naming is very handy for
> embeded systems and a lot of stuff like that. Yep, there's extern(C) but why
> does it underscore? There must be a switch that turns underscoring off.

I agree that something like this would be nice.  It's already an issue 
when attempting to call C library routines that have the same name as a 
D keyword.  Sure, a C wrapper library can be written to rename these, 
but there should be an in-language alternative.

 > The
> next disappointment is that one can't specify where to put a symbol. I mean
> one can't say to put "foo" into .some_section instead of .text section.
> I do agree with the point that bit fields are BAD things. But the bit array
> you introduced isn't better. You must at least specify the way the bit array
> is stored in the memory: is it BE LE or what. The next thing about them is
> that they don't really save the memory. I mean that the bit[8] blah; is 32
> bits long. But then the better way to write the same thing is: enum{ B0, B1,
> ...., B7 }; char blah;

Bit arrays don't exist in D any more.  They were dropped as a general 
language facility maybe 40 builds ago.  D's intrinsics do help a bit 
here, however.


Sean



More information about the Digitalmars-d mailing list