Unterschiede C++/C#
-
Manuelh87 schrieb:
Du schaffst es nicht so einen code zu schreiben das geht nunmal nur in c++. aber wenn du kein asm kennst kannst du dir das auch nicht vorstellen. Es hat mich auch sehr verblüfft das es möglich ist so besseren code zu erreichen als bei der verwendung von asm... aber es ist nunmal so.
Aha, die heutigen Compiler können also schon mit Supercodes umgehen? Na, dann ist klar, dass man den Code mit reinem asm unter keinen Umständen schneller bekommen kann als mit diversen Template-Techniken. Danke für die Aufklärung
!
-
Das kann man mit einer asm funktion so malnicht realisieren (es sei denn mann schreibt hier in dem beispiel jede vektoraddition von hand und keine funktion dafür...)
nur um das nicht "leer" stehn zu lassen: es gibt Assembler die MACROS anbieten
die Dinger kann man als "inliner/templates" missbrauchen so dass man sich einen Call spart(weil es vom Assembler vor der Assemblierung erstetzt wird). Abgesehen davon ob es wirklich viel bringt sich einen Call oder Jmp zu sparen - denn in der Assembly weiß man welche Register man sichern sollte und wenn man dazu die nötigen Dokumentationen durchliest (z.B Pentium Optimisation von Intel) dann steht man schon mal nicht schlechter da als ein Intelcompiler. Diverse SIMD Technicken lassen sich auch anwenden und sind noch ein stück schneller als normale Addition. Und Templates nutze ich öfters - die IDE RadASM bietet diese an
Du schaffst es nicht so einen code zu schreiben das geht nunmal nur in c++
wie schon erwähnt: "Oh du heiliges C++ !" Naja, was anderes sollte man in einem C++ Forum auch nicht erwarten
Nur, die meisten die davon rumschreien (die Vorteile von C++ ) haben diese meistens noch gar nicht gebraucht
-
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.