Punctele mele sunt daca vrei prin aspectul de “ergonomie” a limbajului. Sure, C++ are “toate feature-urile”, dar asta nu inseamna ca are un design inspirat pentru ele, sau ca sunt chiar niste treburi utile. Partea de design in orice activitate presupune si o munca de “ce sa nu faci”. C++ didn’t get the memo.
Templates sunt IMO mult prea puternice pe de-o parte si mult prea convoluted pe de alta parte. AFAIK toata treaba este Turing-complete deci ai mega putere. Dar sunt metode mai dragute si mai limitate de a obtine parametric polymorphism. Faptul ca fiecare instantiere genereaza si cod obiect separat aduga mult la binary size & bloat (sau asa era pe vremea mea).
Namespaces sunt fie module pe jumatate. Ai o separare de naming, dar nu mai mult. Sintaxa e urata de asemenea.
namespace myproject {
namespace repository {
namespace users {
... my code
}
}
}
Arata ciudat rau.
Ditto, inteleg de ce e preprocesorul acolo. Doesn’t make it a good idea. Ditto #ifdef-urile si celelalte. Sunt hack-uri peste hack-uri pana la urma.
Acum are și module. Package managers are (de exemplu vcpkg sau conan), problema e că nu e niciunul standard. Build systems cu siguranță are, și deși nu e oficial, CMake cam e un fel de standard pentru build systems pentru C++. Bibliotecă standard cu siguranță are, toate compilatoarele majore vin la pachet cu implementări pentru ea.
True, C++20 are module. Your company’s mission critical 20 years old codebase written in C++03 won’t be using them C++ modern are si type-inference, lambdas, si cateva goodies care fac viata usoara. Nu-i totul rau pe partea asta de ergonomie.
Nah, mai e si Blaze ca build systems, si cu siguranta ca sunt package managers. Dar nu exista PyPI, CPAN, npm, sau prietenii. Limbajul este o unealta pana la urma, si trebuie evaluat si vis-a-vis de intreg ecosistemul sau.
Librarie standard e for sure, dar e foarte slim. Cum mentionam e si boost prin zona care ajuta. Dar comparat cu Java, Python, Go, etc care vin cu batteries included, sau au un mecanism usor de a aduce cod extern, e destul de slim.
Sper că nu folosește nimeni excepțiile ca și mecanism de control flow în C++. Credeam că e destul de cunoscut că e o practică descurajată, cel puțin în C++. Singurul limbaj mai popular pe care-l știu care să încurajeze excepțiile ca și mecanism de control flow e python. Din ce știu eu excepțiile, în mod normal, trebuie folosite doar pentru atât, cazuri excepționale.
Relatia C++ cu exceptiile e … complicata. Sunt acolo ca feature de limbaj, dar multa lume le evita, si cateva companii chiar resping in totalitate folosirea lor. Intre timp “$everyOtherLanguage” foloseste exceptiile bine-merci - Python, Java, C#, PHP, JavaScript, etc.
In sfârșit, cred ca e o chestie de gust. Dacă-ți place C++ go for it. Joburi sunt. Dar dupa capul meu, daca nu e absolut nevoie, nu m-aș atinge