Ich denke nicht, dass der Grund so sehr mit der Leistung als mit der Interoperabilität zusammenhängt. Die C ++ - Sprache ist komplexer als die C-Sprache, aber unter Leistungsgesichtspunkten sollte es in keiner Weise einen nennenswerten Unterschied geben. Einige C ++ - Konstrukte sind schneller als das C-Äquivalent ( std::sort
ist schneller als qsort
) und es gibt wahrscheinlich gute Beispiele für die Umkehrung.
EDIT: Auf der Interoperabilitätsseite ...
Grundsätzlich definiert der C ++ - Standard einige der Dinge nicht, die für eine einfache Interoperabilität zwischen Binärdateien erforderlich sein könnten, die mit verschiedenen Compilern / Versionen erstellt wurden. Das bemerkenswerteste Problem hierbei wäre die Namenskonvention für die Symbole in der Binärdatei. In C definiert die Sprache eine einzelne Zuordnung von jedem Symbol im Code zum binären Symbolnamen. Eine aufgerufene Funktion my_function
erstellt ein Symbol in der aufgerufenen Binärdatei my_function
. Andererseits und aufgrund von Funktionen wie Funktionsüberladung müssen die Namen von C ++ - Funktionen entstellt werden(übersetzt in verschiedene Funktionssymbole in der Binärdatei, die die Typen der Argumente und Rückgabetypen codieren), und der Standard definiert nicht, wie das Mangeln durchgeführt wird. Dies bedeutet wiederum, dass dieselbe Funktion in C ++ je nach Compiler zu unterschiedlichen Symbolen kompiliert werden kann (es extern "C"
sei denn, dies wird verwendet, um die C-Interoperabilität für diese Funktionen in C ++ zu erzwingen).
Letztendlich müsste die Schnittstelle zwischen der Skriptsprache und dem nativen Code ohnehin eine C-Schnittstelle sein, selbst wenn die Details der internen Implementierung C / C ++ / jede andere Muttersprache sein könnten.
(Ich möchte absichtlich nicht in einen Flammenkrieg der Sprachpräferenzen eintreten. C ++ ist wirklich mächtig, aber es ist auch ein bisschen beängstigend, da es eine viel komplexere Sprache als C ist und einige Dinge, die einfach aussehen, Auswirkungen haben könnten Performance)