Hacker News new | past | comments | ask | show | jobs | submit login

I agree on the practicality aspect. When programmimg in C, one learns to accept these preprocessor hacks.

When programming in C++, where limited compile and type metaprogramming exists, one is constantly hitting the limits and it causes endless frustration. I go through a mini cycle of grief until I give in and use a macro, or an otherwise less elegant implementation.

You're right in that it has taken years (decades, even) to standardise some better alternatives to macros. But even now C++ lacks some of their power.

I have to wonder how much faster alternatives would have been implemented, if macros weren't "good enough" for so many use cases.




I wouldn’t call meta- and compile-time programming limited in modern C++ (C++17 and above).

With the addition of “constexpr” and “consteval” compile time programming is the same as runtime for many cases. Templates are obtuse for meta programming but usually can get the job done.

The need for macros much less common in modern code.


You can mostly avoid macros now, thankfully. I'm particularly thinking of things like compile-time reflection, some more complex type introspection. Things that would let you get rid of some code generation like D's mixins perhaps.

Existing c++ reflection has mostly been done with macros, which you sacrifice readability for by declaring your class with macros instead, and I believe is often a runtime thing anyway. Complex type metaprogramming is possible, sure, but often so obtuse and illegible I'd dare say the preprocessor is a better alternative if it works.


Most likely people would be using awk and sed for the same purposes.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: