Cross Platform bedeutet für euch also, dass die Software in einer VM abläuft?
Tut mir leid, dass verstehe ich nicht. Für mich ist das glatt das Gegenteil. Ich sehe das viel mehr so, dass die Sprache ihre eigene Plattform mitbringt, die überall emuliert wird. C++ wird dagegen in die Sprache der Zielplattform übersetzt und passt sich damit der Plattform an. Und klar, theoretisch kann es native Compiler für C# geben. Microsoft hat da ja inzwischen auch etwas in Entwicklung, nachdem ihnen, wenn auch nach langer Zeit, klar wurde, dass die X-fach gezogene Handbremse für einige Anwendungen doch ein Problem darstellen kann. Allerdings wurde die Sprache konzeptionell bisher auf eine VM Umgebung ausgelegt.
Anders gesagt, könnte man auch sagen, dass
alle Sprachen
theoretisch Cross Plattform sind. Schließlich kann man alles auf jeder anderen Plattform emulieren und die Sprache an sich ist eh bloß ein theoretisches Konzept. Wirklich plattformspezifisch ist an den meisten Sprachen nichts.
Was eine Sprache Cross Platform macht sind doch immer erst die Compiler. Und da sieht es für C++ einfach viel besser aus. Für C++ gibt es für alle kleinen und großen Prozessoren der Welt einen Compiler. Alleine
mit dem GCC erreicht man direkt eine sehr große Menge an Zielsystemen. Das sieht man auch an dem Projekt von Unity. Sie übersetzen C# in C++ um eine größere Menge Zielsysteme zu erreichen und mehr Code durch C++ wiederverwenden zu können. Das widerspricht irgendwie der Idee, dass C# so viel mehr Cross Platform ist.
Letzendlich gibt es natürlich noch die Bibliothekensituation. Das Dot.Net Framework ist natürlich auf Mono weitgehend vorhanden. So ist es aber auch die Standardbibliothek von C und die STL von C++. Hier gibt es speziell auf Windows vielleicht kleinere Abweichungen und man kann gerade hier bei C++ vielleicht tendentiel mal leichter zusätzliche Bibliotheken verwenden, die nicht Cross Platform sind. Also hier sehe ich vielleicht in C# einen kleinen Vorteil. Man sollte aber nicht vergessen, dass sowohl C# und C++ prinzipiell mit wenigen Funktionen ausgestattet sind und man häufig doch auf weitere externe nativen Bibliotheken aufbaut. Das sieht man daran, dass es WPF nicht für Linux gibt. Und man sieht es daran, dass Teile des Frameworks offensichtlich nicht mehr funktionieren, wenn man nativ kompiliert(Zum Beispiel alles, dass mit der Codegenerierung zu tun hat). Aber so ist es mit jeder externen Bibliothek, die am Ende doch irgendwie native Funktionen
nutzen muss. Mir ging es bisher auch meistens so, dass mir letztendlich doch die ein oder andere Funktion in Windows Forms offensichtlich gefehlt hat und ich auch in C# den ein oder anderen Aufruf in "user32" gebraucht habe. Und damit ist es schon wieder nicht mehr Cross Platform.
Insgesamt sehe ich C# da einfach nicht im Vorteil bezüglich gegenüber C(++). Das einzige was man sagen kann, ist, dass bei C# der generierte Zwischencode Cross Platform ist, während er es bei C++ nicht ist. Eigentlich dort sogar jeder Compiler einen anderen Zwischencode. Das ist manchmal nervig, wenn zum Beispiel Bibliotheken mit einem anderen Compiler kompiliert wurden, aber wo hier allerdings der große Vorteil im Bezug auf
Plattforunanbhänigkeit von
C++ liegt, ist mir unverständlich. Letzendlich ist es notwendig, so oder so die Anwendung auf allen unterstützen Plattformen zu testen. Wo genau das große Problem liegt, einfach unterschiedliche Binaries zu erstellen, erschließt sich mir nicht.
Anbei: Das ist kein Hassbeitrag gegen C#. Die Sprache hat ihre Vorteile wie auch ihre Nachteile gegenüber C++. Ausgerechnet aber Cross Platform sehe ich persönlich sogar als einen Nachteil von C# an oder zumindest aber nicht als einen Vorteil. Auch wenn die Erfinder von Java/C# das immer gerne so behaupten würden.