| There is another big reason why there isn't a great ecosystem. The C mentality of some devs dragged into C++ world. Already in the 90's we had very nice high level C++ libraries, that could compete with what Java offered later. Turbo Vision on MS-DOS, Object Windows Library and Visual Components Library on Windows. All from Borland. PowerPlant on Mac OS, from Metrowerks. From Microsoft, we had MFC, which started high level like those ones (originally named Afx), but then the beta testers requested for it to just be a thin layer over Win16 and it was reborn as MFC. Many of the modern C++ patterns were already possible with those libraries, but the C wisdom made many not use them. Another modern example is Android NDK, Google writes the code in nice C++ classes, that get exposed as low level C APIs, or have a Java JNI barrier (e.g. Skia). |
I'm not on the android team, but in general it's easier to maintain reverse-compatibility with C ABIs than with C++ ABIs.
And the plethora of libraries and the modest size of the standard library are part of the problem. Let's say you're writing a C++ library that understands git and lets users develop more complex applications with your libgitxx as a building block. Whose filesystem primitives (file, directory, path, user, etc.) do you use? There's really not a satisfactory answer to that question.
Point being, C ABIs don't have this problem as much. They tend to just pass around ints and char. Maybe there are some structs to pass around, but they tend to be made up of ints, char, etc.