Unterschiede C++/C#
-
Ich schließe mich mal Optimizers Aussage an.
Manuelh87: Vielleicht solltest du dich mal etwas genauer mit der Hotspot JVM beschäftigen. Hier ein entsprechender Link mit ein paar Informationen:
-
Annakin schrieb:
Ich muß auch sagen das was ich an 3D in Java gesehen habe (z.B. Tribal Trouble, erstellt mit LWJGL ) hat mich nicht so überzeugt.
Wenn ich die Grafik als das zur Zeit machbare unter Java in 3D ansehe, so liegt die doch um ein paar Jahre hinter dem heute in C++ möglichen.
Ich habe zwar angenommen das Java etwas langsamer ist als C++, aber der Unterschied ist doch relativ groß.Das kannst du nicht so direkt mit einem Domm 3 oder so vergleichen. Hinter einem Titel wie Tribal Trouble steckt nicht die Infrastruktur, die hinter einem großen kommerziellen Titel steht. AFAIK wurde das von ein paar CS Studenten in ihrer Freizeit geschrieben. Die leben da nicht von, sind noch keine Profis im Spielegeschäft und haben auch kein Millionen-Dollar Budget. Entsprechend kommt da natürlich kein Grafikwunder bei raus. Dafür sind die Hardwareanforderungen auch nicht so besonders groß. Soll AFAIK auf einem 700 MHz Athlon mit Geforce 2MX flüssig laufen.
-
Gregor@Home schrieb:
Annakin schrieb:
Ich muß auch sagen das was ich an 3D in Java gesehen habe (z.B. Tribal Trouble, erstellt mit LWJGL ) hat mich nicht so überzeugt.
Wenn ich die Grafik als das zur Zeit machbare unter Java in 3D ansehe, so liegt die doch um ein paar Jahre hinter dem heute in C++ möglichen.
Ich habe zwar angenommen das Java etwas langsamer ist als C++, aber der Unterschied ist doch relativ groß.Das kannst du nicht so direkt mit einem Domm 3 oder so vergleichen. Hinter einem Titel wie Tribal Trouble steckt nicht die Infrastruktur, die hinter einem großen kommerziellen Titel steht. AFAIK wurde das von ein paar CS Studenten in ihrer Freizeit geschrieben. Die leben da nicht von, sind noch keine Profis im Spielegeschäft und haben auch kein Millionen-Dollar Budget. Entsprechend kommt da natürlich kein Grafikwunder bei raus. Dafür sind die Hardwareanforderungen auch nicht so besonders groß. Soll AFAIK auf einem 700 MHz Athlon mit Geforce 2MX flüssig laufen.
Nenn mir mal einen Titel, der an Leistung (3D) das heute mögliche in Java herausholt.
Ich denke mittlerweile auch das die Geschwindigkeitsunterschiede zwischen Java und C++ erheblich sind. Nachdem was ich so in den Fforen höre, nicht nur in diesem, ist das auch die Meinung der meisten Programmierer.
-
Annakin schrieb:
Nenn mir mal einen Titel, der an Leistung (3D) das heute mögliche in Java herausholt.
Ich denke mittlerweile auch das die Geschwindigkeitsunterschiede zwischen Java und C++ erheblich sind. Nachdem was ich so in den Fforen höre, nicht nur in diesem, ist das auch die Meinung der meisten Programmierer.Ich kenne keinen. Vermutlich gibt es momentan auch keinen. Java ist in der großen industriellen Spielebranche praktisch nicht vertreten. Hast du mal ein C++ Indi-Game, das von der Grafik her an Doom 3 rankommt? Glaube nicht. Deine Argumentation ist so wie "Ich habe Battle for Wesnoth gespielt und schließe aus diesem Spiel, dass 3D mit C++ überhaupt nicht geht.".
Im 3D-Bereich dürfte aber praktisch kein Leistungsunterschied zu C++ vorhanden sein. Darauf hat weder Java noch C++ Einfluss, da die ganze Arbeit hier von OpenGL und der darunterliegenden Grafikhardware erledigt wird. Da gibt es für C++ und Java das gleiche Interface und in den performancekritischen Bereichen wird in beiden Fällen genau das Gleiche gemacht. Da gibt es dann praktisch kein Java oder C++ mehr, sondern nur noch OpenGL.
...oder meinetwegen Direct3D, was aber keinen wirklichen Unterschied machen sollte.
-
Gregor@Home schrieb:
Hast du mal ein C++ Indi-Game, das von der Grafik her an Doom 3 rankommt? Glaube nicht. Deine Argumentation ist so wie "Ich habe Battle for Wesnoth gespielt und schließe aus diesem Spiel, dass 3D mit C++ überhaupt nicht geht."
Das ein Java-Spiel den Vergleich mit Doom3 nicht standhalten kann war mir klar.
Die Programmierung in Java ist einfacher als mit C++.
Warum nutzen die Spiele-Entwickler Java nicht wenn keine Unterschiede vorhanden sind?Gregor@Home schrieb:
Im 3D-Bereich dürfte aber praktisch kein Leistungsunterschied zu C++ vorhanden sein.
Halte ich für ein Vermutung deinerseits die du nicht beweisen kannst.
Glaube ich nicht, da C++ binärer Code ist, während Java interpretierter Code ist.
Das oft gebrachte Argument das interpretierter Code sich während der Laufzeit auf den Prozessor optimiert und damit evtl. sogar schneller als C++ ist, konnte bislang auch noch keiner beweisen.Ich denke das Java eine Klassesprache ist, aber für die Spieleprogrammierung (3D) ist Sie nur bedingt geignet.
-
Annakin schrieb:
Halte ich für ein Vermutung deinerseits die du nicht beweisen kannst.
Ein lange nicht mehr gebrachter Link:
Evaluating Java for Game Development
Das ist zwar kein Beweis, aber zumindest sind in der Arbeit einige Benchmarks enthalten, die meine Aussage doch stark untermauern. Lies dir mal Abschnitt 7.10 durch. Da wird zumindest kein großer Unterschied bei der Nutzung von OpenGL durch Java und C++ festgestellt.
-
Annakin schrieb:
Das oft gebrachte Argument das interpretierter Code sich während der Laufzeit auf den Prozessor optimiert und damit evtl. sogar schneller als C++ ist, konnte bislang auch noch keiner beweisen.
Das Argument halte ich bisher auch für relativ schwach. Man wird sehen, ob sich da in Zukunft etwas ändert. Dieses Argument hat aber gar nichts mit der 3D-Performance zu tun. Dafür wird kein Javacode genutzt. Man nutzt entsprechende Funktionen von OpenGL.
-
Annakin schrieb:
Die Programmierung in Java ist einfacher als mit C++.
Begründung?
-
Annakin schrieb:
Das ein Java-Spiel den Vergleich mit Doom3 nicht standhalten kann war mir klar.
Die Programmierung in Java ist einfacher als mit C++.
Warum nutzen die Spiele-Entwickler Java nicht wenn keine Unterschiede vorhanden sind?Das hat viele Gründe.
1. Ich glaube, ich habe das Playstation-Argument schon gebracht. Dies wird in vielen Fällen der Hauptgrund sein.
2. Wenn schon viel Code in C++ vorhanden ist, fällt ein Umstieg auf Java natürlich schwer.
3. Java ist noch nicht allzulange so schnell, wie es jetzt ist. In den ersten Jahren wurde Java zum Beispiel komplett interpretiert. Es gab da keinen Jitter. Java hat in den letzten Jahre allerdings stark aufgeholt und ist nun in viele Bereichen (nicht in allen) mit der Geschwindigkeit nativer Programme gleichauf. Allerdings haftet Java weiterhin das langsam-Image an, was i.A. nicht gerechtfertigt ist. Es ist auch oft eine unbegründete Angst vor dem GC vorhanden.
4. usw.Aber guck mal in die Zukunft:
Langsam kommen Mehrkernprozessoren. Hierzu muss man wissen, dass Multithreading bei der Spieleentwicklung bisher nicht allzu präsent ist. Wenn man in Zukunft allerdings die ganze Leistung eines Prozessors nutzen möchte, wird man daran nicht vorbeikommen. Da macht sich eine Sprache wie C++, die Multithreading selbst nicht unterstützt natürlich nicht mehr so gut. Sprachen wie C# oder Java bekommen hier einen Vorteil, der sie für die Spieleprogrammierung (und auch in anderen Bereichen) attraktiver machen wird.
-
Glaube ich nicht, da C++ binärer Code ist, während Java interpretierter Code ist.
Mit Java Grafikprogramme schreiben .. ne nie im Leben, immerhin benutzt das einen JIT-Compiler. Völlig unmöglich mit einem
JIT-Compiler Grafikprogramme halbwegs benutzbar zu machen, sagt einem doch schon der Hausverstand. Mehr Argumente
braucht man auch schon nicht mehr gegen Java, den wer weitere sucht hat noch immer nicht verstanden, dass man in C++ native
Programme schreibt. Hoffe ihr versteht jetzt warum Java C++ nie das Wasser reichen wird, der JIT-Compiler ist schuld.
-
Gregor@Home schrieb:
Java ist noch nicht allzulange so schnell, wie es jetzt ist. In den ersten Jahren wurde Java zum Beispiel komplett interpretiert. Es gab da keinen Jitter. Java hat in den letzten Jahre allerdings stark aufgeholt und ist nun in viele Bereichen (nicht in allen) mit der Geschwindigkeit nativer Programme gleichauf. Allerdings haftet Java weiterhin das langsam-Image an, was i.A. nicht gerechtfertigt ist. Es ist auch oft eine unbegründete Angst vor dem GC vorhanden.
Aber guck mal in die Zukunft:
Langsam kommen Mehrkernprozessoren. Hierzu muss man wissen, dass Multithreading bei der Spieleentwicklung bisher nicht allzu präsent ist. Wenn man in Zukunft allerdings die ganze Leistung eines Prozessors nutzen möchte, wird man daran nicht vorbeikommen. Da macht sich eine Sprache wie C++, die Multithreading selbst nicht unterstützt natürlich nicht mehr so gut. Sprachen wie C# oder Java bekommen hier einen Vorteil, der sie für die Spieleprogrammierung (und auch in anderen Bereichen) attraktiver machen wird.
Meinst du nicht das die C++-Compiler auch auf die neuen Multiprozesseren angespasst werden? Vielleicht löst C# dann auch C++ ab, kann sein.
Ich bin jedenfalls gespannt wie die Situation in 3-5 Jahren ist.
Alles andere ist Spekulation.
-
Annakin schrieb:
Glaube ich nicht, da C++ binärer Code ist, während Java interpretierter Code ist.
Annakin schrieb:
Vielleicht löst C# dann auch C++ ab, kann sein.
Jeder darf sich an dieser Stelle überlegen,
warum folgender Smiley angebracht ist:
-
Annakin schrieb:
Meinst du nicht das die C++-Compiler auch auf die neuen Multiprozesseren angespasst werden?
Das hat nichts mit den Compilern zu tun, sondern mit der Sprache ansich. C++ stellt keine entsprechenden Sprachmittel zur Verfügung. Das wird sich frühestens mit dem nächsten C++ Standard ändern. Der wird aber noch einige Zeit auf sich warten lassen. Ich tippe fast darauf, dass es den erst geben wird, wenn Prozessoren mit 8 Kernen am Markt sind. Etwas spät.
-
Gregor@Home schrieb:
Das hat nichts mit den Compilern zu tun, sondern mit der Sprache ansich. C++ stellt keine entsprechenden Sprachmittel zur Verfügung. Das wird sich frühestens mit dem nächsten C++ Standard ändern. Der wird aber noch einige Zeit auf sich warten lassen. Ich tippe fast darauf, dass es den erst geben wird, wenn Prozessoren mit 8 Kernen am Markt sind. Etwas spät.
Ich gebe zu mit Multiprozessoren kenne ich mich nicht so aus.
Ich weiß nicht ob es möglich ist einen Compiler auf den Markt zu bringen der mit Fähigkeit/Sprachererweiterung für Multiprozessoren erweitert wird.
Der entspricht dann zwar nicht der Norm..
Eventuell ist es auch möglich einen Compiler zur Verfügung zu stellen der ANSI-C kann und Spracherweiterungen für Multithreading hat, so das der Programmierer wählen kann.Aber das sind nur Vermutungen. Wie gesagt alles andere ist Spekulation. Evtl. sprechen wir uns in 5Jahren wieder und es gibt ein ganz neue Programmiersprache.
-
Annakin schrieb:
Ich weiß nicht ob es möglich ist einen Compiler auf den Markt zu bringen der mit Fähigkeit/Sprachererweiterung für Multiprozessoren erweitert wird.
Der entspricht dann zwar nicht der Norm..Das wäre eine Katastrophe für C++, wenn ich das mal so sagen darf.
-
Gregor@Home schrieb:
Annakin schrieb:
Ich weiß nicht ob es möglich ist einen Compiler auf den Markt zu bringen der mit Fähigkeit/Sprachererweiterung für Multiprozessoren erweitert wird.
Der entspricht dann zwar nicht der Norm..Das wäre eine Katastrophe für C++, wenn ich das mal so sagen darf.
Oder einfach ein Lib die Funktionen fürs Multithreading zur Verfügung stellt?
Ist der Gedanke so abwegig?
-
Annakin schrieb:
Oder einfach ein Lib die Funktionen fürs Multithreading zur Verfügung stellt?
Ist der Gedanke so abwegig?
Nein, ist er nicht. Gibt es ja auch. Boost und so. Allerdings ist das maximal eine Hilflösung mit dem Resultat, dass man in seinem Programm 5 Bibliotheken von anderen nutzt, die alle andere Ansätze diesbezüglich haben. Sowas führt dann natürlich zu Problemen.
-
Aber ist das heute denn anders?
Der ein benutzt die MFC´s, der andere irgendwelche Linux eigene Libs.
Wenn Microsoft sagen würde ich erweitere die MFC um Funktionen fürs Multithreading, würde das wahrscheinlich dazu führen das alle die Visual C++ benutzen, was sehr viele sind, die gleiche Lib fürs Multithreading nutzen würden.
-
Nur mal so... Die MFC haben schon Multithreading-Funktionalität und ich glaube nicht, dass sich an denen noch großartig was ändern wird.
-
Walli schrieb:
Nur mal so... Die MFC haben schon Multithreading-Funktionalität und ich glaube nicht, dass sich an denen noch großartig was ändern wird.
Ich kenne nicht alle Funktionen der MFC. Wenn die Funtionalität jetzt schon da ist, dann ist letztenendes die Mutlithreading Fähigkeit für C++ gegeben.