C++: Using Variadic Templates Cleanly
florianjw.de
florianjw.de
I just think, that C++ and particularly the whole template system is just to complicated.
I have enough work to do, finding solutions for the real world problems that must be implemented -- I don't want to have more work fiddling around with language specifics and even more trickery, just to have my programs running maybe 1% faster.
C++, particularly the template system and the new standard library that is based on the STL, disappointed me long time ago, when a whole group of programmers where trying to find out what the compiler errors where about deep inside the STL. The whole error handling inside the templates where so muddled, that it was nearly impossible to find out what the trouble was, without reading big parts of the STL source.
I trust, that today's compilers generate better error messages for templates, but still I am not sure that the whole thing -- and particularly the STL -- is worthwhile for most real-life problems.
And what do you mean by "most real-life problems"? HN is rather biased towards web development, so...
C++ is used for real life problems from web browsers, to physics engines, fluid solvers, photorealistic renderers (in fact, pretty much all software used to make most visual effects CG for movies is in C++), autopilot systems, and pretty much everything in between.
And as yet, there's nothing else that comes close to allowing both high-level abstractions/encapsulations and low-level memory alignment/allocation/control as and when needed, which is important for high performance and memory efficient (bit packing, tagged pointers, etc) code.
When I really need speed, I always can implement single routines in pure C -- I don't need an STL abstraction for that, that feigns speed to the programmer, but in the end it does not give it to him, because he chose the wrong abstraction. It seems so easy: Just use the STL/std-c++ library and all your speed problems are solved -- but std-libraries do not make a bad programmer a good one -- instead, it creates programmers that invest their time in language specifics instead in data structures and algorithms. So bad programmers will be even worse in the end.
When this is so, than it is worse than I thought. When C++ is making such simple things so unnecessary complicated.
Enough already, the committee needs to be less prideful and just add complete macros/metaprogramming to the language already in C++14 and let apparently smart programmers who can disentangle variadic type templates to stop wasting brainpower and valuable time doing that and just write the compile-time transformations they want to have happen.
I'm not sure if java or C# can easily jit to have something that is close to machine code. Anyway having machine code directly (and no need for VM) is useful if you want to reduce the overhead and fully exploit your hardware.
Surely it's not for students or for casual programmers, but it has a use.
(it will be foss of course but nothing is published yet)
I can't remember when some larger projects rewritten in C++ turned out to be slower. Build tools, developing tools are superior to those 10 years ago, and the compiler(s) is still the best optimizer there is for production code.
Working in C++ today is easy. I sometimes feel a bit strange when I find that I'm oblivious about some hardships C++ developers had in the past, and today I didn't even know you can do it the hard way.
Edit: Or, you know, write a different macro preprocessor for C++. There's nothing special about the standard CPP other than coming bundled with the compiler.