Je ne pense pas que la raison soit tant liée à la performance qu'à l'interopérabilité. Le langage C++ est plus complexe que le langage C, mais du point de vue des performances, il ne devrait pas y avoir de différence notable. Certaines constructions C++ sont plus rapides que leur équivalent C ( std::sort
est plus rapide que qsort
) et il existe probablement de bons exemples de l'inverse.
EDIT : En ce qui concerne l'interopérabilité...
Fondamentalement, la norme C++ ne définit pas certaines choses qui pourraient être nécessaires pour faciliter l'interopérabilité entre les binaires créés avec différents compilateurs/versions. Le problème le plus notable est la convention de dénomination des symboles dans le binaire. En C, le langage définit une correspondance unique entre chaque symbole du code et le nom du symbole binaire. Une fonction appelée my_function
créera un symbole dans le fichier binaire appelé my_function
. D'autre part, et en raison de caractéristiques telles que la surcharge des fonctions, les noms des fonctions C++ doivent être mutilé (traduits en différents symboles de fonction dans le code binaire, codant les types des arguments et des types de retour), et la norme ne définit pas la manière dont le découpage est effectué. Cela signifie que la même fonction en C++ peut être compilée en différents symboles en fonction du compilateur (à moins que extern "C"
est utilisé pour forcer l'interopérabilité C pour ces fonctions en C++).
En fin de compte, l'interface entre le langage de script et le code natif devrait de toute façon être une interface C, même si les détails de l'implémentation interne pourraient être en C/C++/tout autre langage natif.
(Le C++ est vraiment puissant, mais il est aussi un peu effrayant car c'est un langage beaucoup plus complexe que le C, et certaines choses que le C++ n'est pas en mesure de faire, ne le sont pas. regarder simple peut avoir un impact sur la performance)