On Monday, 10 July 2017 at 21:30:44 UTC, Walter Bright wrote:

You can't use RTTI or Exceptions, for example. Those generate bloat even if they are not used - a compiler switch is typical to disable them. It's not true that C++ is "pay only for what you use".

If the C++ usage is "C with member functions", then yes, it'll work and be useful.

I use C++ for microcontrollers all the time and I prefer to use exceptions and RTTI for most of my applications. There is a small amount of bloat when using RTTI and exceptions, but the linker is able to strip a large amount of it out, so the cost is minimal and opt-in. I don't see why D couldn't do the same; it just needs to generate code in a way that allows the linker to identify dead code.

The only binary size problems I've encountered using C++ is using iostream and formatted IO. Those seem to generate the most bloat. But if you avoid iostream and use a C library designed for microcontrollers (e.g. newlib) it's not a problem. It appear the bloat mostly comes from the standard library, not the language.

A recent pull request to GDC (https://github.com/D-Programming-GDC/GDC/pull/505#event-1141470083) removed much of the TypeInfo bloat that was generated when using classes, which has reignited some interest in using D for microcontrollers. Perhaps there's something in that pull request for other compiler developers to learn from.

Mike


Reply via email to