Eu curto C++, mas acho que uma coisa atrapalha a popularidade é que as melhorias na linguagem correm muito lentamente.
Por exemplo, lançam uma versão nova a cada 2 ou 3 anos, geralmente revisada por muita gente e bem burocrática. O que tá certo, dado o impacto que essas mudanças tem.
Mas aí o que complica é que qualquer facilidade que a linguagem poderia ter, acaba ficando dependendo de alguma lib externa (tipo a Boost). E isso acho que é uma barreira para muita gente.
Por exemplo:
- Não tem uma forma de controle de dependências oficial. Você fica por conta de usar Conan, CMakeFiles, ou qualquer outra coisa que ainda sim não é padrão.
- Não tem uma forma de fazer testes unitários oficial. Aí de novo, fica pedendendo de outra lib.
- Tipagem bagunçada. Exemplo: no seu projeto você pode usar
std::string
, mas em uma lib que você tiver usando podem estar usandoQString
(do Qt),wxString
ou alguma outra que reinventaram. - Faltam alguns syntax sugar que várias linguagens têm. Tipo um simples "take(3)" acaba virando 3 linhas porque tem que chamar uma função específica de algum include.
Dentre outras barreiras que outras linguagens acabam não tendo.
Então, mas se for parar pra pensar C++ não traz somente mudanças perceptíveis pra nós, como qualidade de vida e recursos, ele traz uma gama de correções, e melhorias de desempenho (sim ainda hoje inventam formas de compilação mais eficiente em C++), inclusive processamento em tempo de compilação que aumenta a cada nova versão. Isso tudo junto a desings de conceitos modernos adaptados para a realidade de C++ tipo lambdaz e corrotinas. Eu estou pessoalmente muito satisfeito com o avanço que vem sendo mostado (nem consigo estudar tudo oque sai de novo kkkk).
Sobre as libs, eu entendo sua dor, vendo que muita gente sofre por sequer saber adicionar uma lib, mas pegando de exemplo a boost, muitas coisas que deram certo lá se tornaram padrão da linguagem em algum momento (veja sobre std::move e os similares), além disso, tipos que "ofuscam" os tipos já existem, como wxString e entre outros tem seus motivos de implementação para existir.
Tratando de uix, provavelmente esses tipos trazem mutabilidade e reatividade, o que não esta e nunca estará presente em, por exemplo std::string. Mesmo que a certo ponto de vista, em algum momento existirá um inferno de namespaces o qual você tera de lidar, e isso é ruim, más acredito que os modulos da versão mais recente de C++ venham justamente para ajudar a mitigar esses problemas (não cheguei a estudar a fundo módulos c++).
Sobre Cmake, cara, cmake me parece um projeto muito bom, e com força o suficiente pra fazer eu não argumentar sobre precisar algo nativo. Ele simplesmente faz o trabalho muito bem, por que se preocupar em implementar isso sobre trazer outras coisas que foquem nos pontos fracos? Acho que os mantenedores da linguagem também pensam assim.