One of the purposes of D is to keep an eye on its implementation, to make it 
not too much hard to write, and to allow a fast compilation.

While the back-end of dmd lacks some features that both GCC and LLVM back-ends 
have, there are few DMD features used by D that are not easy to implement with 
those free back-ends.

You can find info about this regarding LDC here, see the long section 
"Violations of the specification":
http://www.dsource.org/projects/ldc/wiki/Docs

And here about GDC, see the "Known Differences from DMD" and "Inline Assembler 
Notes" sections:
http://dgcc.sourceforge.net/gdc/manual.html

I think porting D to the LLVM and GCC back-ends is important enough. It can be 
positive to take a look at those porting issues (and keeping in mind gcc and 
llvm are moving targets that can improve and become more flexible in future, or 
them being open source can even be modified to support D features better), and 
reconsider how useful the related D features are. If they are seen as not so 
important, then it's even possible to drop those features, to allow the 
creation of D compilers with more conformance with the D specs.

I think gotos to labels inside inline asm blocks cause implementation problems 
to both ldc and gdc.

Bye,
bearophile

Reply via email to