On Monday, 1 June 2015 at 17:17:18 UTC, Ola Fosheim Grøstad wrote:
On Monday, 1 June 2015 at 16:57:00 UTC, Jonathan M Davis wrote:
I use macros for stuff like exceptions all the time - e.g.

THROW(MyException, ("This value is wrong: %d", foo));

ick! Yes, if you want stack-trace like information in release-builds you need to use the macro system, but that's because __FILE__ and __LINE__ are macros! That's a C deficiency.

The SAD thing here is that C++ actually do expensive stack introspection to unwind the stack based on return address, so the C++ runtime _could_ have been designed to look up call site information down the stack at runtime for "low additional cost" even with separate compilation, just like a high level language with stack introspection (in Python: "inspect.stack()[1][0].f_lineno").

Not saying it is a good idea for a system level language, but there is no technical reason to have macro warts like __LINE__ since the full C++ runtime already is bloated. And they could have gotten around it with by adding compile time introspection to the language too.

I'd say C has embraced macros for good reasons, as a minimalistic language design strategy (newest C version using it for generics), but C++ has no longer an excuse for providing it.

Reply via email to