I would agree with you except for build times. It's not anywhere close to JavaScript or Python in terms of iteration speed and prototyping.
C++ 11 and 14 don't do anything in terms of build times AFAIK -- they probably make them worse. I'm hopeful that modules will make a difference, but at first glance they seem awfully complex.
And also metaprogramming. In Python, I use Python for metaprogramming. In C++ I have to switch to this weird template language. I'm a template user, and they are mostly great to use, except for build times. Template authors are a completely different kind of C++ programmer.
When you find that C++ templates are taking unacceptably long compile times, you often benefit from declaring an `extern template`. Some times I have CPP files which do nothing but declare `extern template` instantiations for types I infrequently change.
This was added in C++11.
In the header you state something like:
template <typename _Tp>
class Example {
};
extern template class Example<int>;
In some CPP file you write:
template class Example<int>;
At that point any calls to Example<int> will not be resolved by callers. They will simply expect the template to be available at link-time. Theoretically this could be slightly slower (I think), since method calls will cross translation units rather than being inlined. But it does cut down on compile times.
> Note: The extern keyword in the specialization only applies to member functions defined outside of the body of the class. Functions defined inside the class declaration are considered inline functions and are always instantiated.
C++ 11 and 14 don't do anything in terms of build times AFAIK -- they probably make them worse. I'm hopeful that modules will make a difference, but at first glance they seem awfully complex.
And also metaprogramming. In Python, I use Python for metaprogramming. In C++ I have to switch to this weird template language. I'm a template user, and they are mostly great to use, except for build times. Template authors are a completely different kind of C++ programmer.