cBuilder

Ulfrinn schrieb:
Langsamer als C möglicherweise, aber teilweise ist Java sogar schneller als C++, und das nicht nur bei massiver Anwendung objektorientierter Konzepte. Die c’t hatte da mal einen recht umfangreichen Test.

Und nein, ich bin kein Java-Fan, ich verabscheue es eigentlich.
Ja, an den Test in der c't kann ich mich auch noch erinnern. Aber Du hast Dir sicherlich nicht die Mühe gemacht, mal den Sourcecode anzuschauen, den die fabriziert haben, sonst wäre Dir sicherlich aufgefallen, warum c++ so schlecht abgeschnitten hat. Es war nur eine Codezeile:
Code:
stringa = stringa + stringb;
Wobei stringa und stringb vom jeweiligen String-Typ der Sprache sind. Na, fällt Euch was auf? Richtig, die Klasse String gehört in Java zu den eingebauten Datentypen und ist keine wirkliche Java-Klasse. Operator-Overloading gibt's in Java ja nicht. Der Java-Compiler übersetzt eine solche Codezeile also in "zu stringa stringb hinzufügen". Und wie schreibt man so etwas in c++?
Code:
stringa += stringb;
Wenn die Autoren des Tests das damals so gemacht hätten, dann wäre c++ mit Abstand schneller als Java gewesen. Denn was macht der c++-Compiler mit der ersten Version? Er weiß ja nicht, was ein String ist. Für ihn ist string eine Klasse wie jede andere auch. Dh. es wird erst auf dem Stack ein Objekt der Klasse string erzeugt (das macht der "+"-Operator). Dann wird der Variablen stringa dieser temporäre String per Zuweisungsoperator zugeordnet, dh. kopiert. Das ist natürlich erheblich langsamer.

Tja, wer mindestens einer der Sprachen nicht mächtig ist, sollte vielleicht besser nicht so einen Test veröffentlichen. Ich hab damals übrigens auch einen Leserbrief geschrieben, der natürlich nicht veröffentlicht wurde...

Sorry, das war jetzt wirklich OT, musste aber einfach mal raus.

Gruß
eloso
 
eloso schrieb:
Ich hab damals übrigens auch einen Leserbrief geschrieben, der natürlich nicht veröffentlicht wurde...

Wurde in der Nachfolgenden Zeitschrift der Test nicht noch mal gemacht, nachdem viele tausend (?) Leserbriefe eingegangen sind?

In diesem Nachfolgenden Test (mit besserem Quellcode) haben Delphi und C++ VIEL besser abgeschnitten.

Das Ganze würde nur "untergespielt" weil man meinte "nur mit Spezialprogrammierung schneller". Das ganze hat, glaube ich, nur ne halbe Seite abbekommen und ist deswegen untergegangen. Dort wurden dann neue Zeiten veröffentlich.

Naja... ;) c`t...
 
eloso schrieb:
Es war nur eine Codezeile:
Code:
stringa = stringa + stringb;
Ich mag mich nur noch flüchtig an den Test erinnern. Wenn aber schon bei C++
Code:
stringa += stringb;
verlangt wird, dann hoffe ich doch, dass bei Java der Test auch so aussah, wie man dies bei Java macht, nämlich:
Code:
stringBufferA.append(stringBufferB);
;)

Was unbestritten stimmt ist, dass man mit schlechtem Programmierstil die Performance jeder Sprache in die Knie zwingen kann.
Die Performance einer Sprache sollte auch nicht das Ausschlaggebende sein, ausser sie wird zwingend benötigt.
 
McHurt schrieb:
Ich mag mich nur noch flüchtig an den Test erinnern. Wenn aber schon bei C++
Code:
stringa += stringb;
verlangt wird, dann hoffe ich doch, dass bei Java der Test auch so aussah, wie man dies bei Java macht, nämlich:
Code:
stringBufferA.append(stringBufferB);
;)
Ich hab es zwar nicht getestet, aber ich denke, das ergibt keinen großen Unterschied, da der Java-Compiler genau das macht. Direkt aus der Doku:
String buffers are used by the compiler to implement the binary string concatenation operator +. For example, the code:

x = "a" + 4 + "c"

is compiled to the equivalent of:

x = new StringBuffer().append("a").append(4).append("c")
.toString()
Das ist ja, genau das, was ich beschrieben habe. String ist keine Java-Klasse, sondern ein Sprachkonstrukt.

Was unbestritten stimmt ist, dass man mit schlechtem Programmierstil die Performance jeder Sprache in die Knie zwingen kann.
Die Performance einer Sprache sollte auch nicht das Ausschlaggebende sein, ausser sie wird zwingend benötigt.
Das stimmt natürlich. Außerdem kommt es auf die Anwendung an, die man erstellen will. Für Spiele ist Java z.B. überhaupt nicht geeignet, für Datenbankbasierte Client-Server-Anwendungen dagegen sehr.
 
Zuletzt bearbeitet:
Jein. Was geschieht ist, dass der String im Bytecode in einen StringBuffer konvertiert wird, dann die Konkatenation vorgenommen wird und der String wieder zurück konvertiert wird.
Bei einem direkten Gebrauch von einem StringBuffer fallen diese Zwischenschritte aus, was sich auch in der Performance niederschlägt.
 
-Nuke- schrieb:
Vorsichtig mit solchen Aussagen. ;)

http://www.bytonic.de/html/benchmarks.html

"Weniger geeignet" wäre vielleicht besser zu sagen, aber "überhaupt nicht", wohl eher nicht... ;)
Naja, aber wo liegt da noch der Vorteil von Java, wenn man die ganzen "schönen" Eigenschaften der Sprache nicht nutzt? Der Code sieht mindestens genauso schlimm aus, wie das Original in c. Ich hab auch mal ein Handy-Spiel in Java geschrieben. Da muss man schon sehr trickreich sein (insbesondere beim Speichermanagement), um da die gewünschte Performance rauszuholen. Von OOP bleibt da nicht mehr viel übrig. Da gibt es in c++ schon sauberere Möglichkeiten performanten und trotzdem gut aussehenden Code zu schreiben.

Java hat einige Vorteile gegenüber c++, aber Performance ist keiner. Beim o.g. Projekt liegt die Hauptlast sowieso auf der Grafikkarte, was auch leicht am Unterschied Vollbild/Fenster zu erkennen ist.

Dass "überhaupt nicht geeignet" sollte nicht heißen, dass es nicht möglich ist, einigermaßen performante Spiele in Java zu programmieren, sondern dass es keine Vorteile gegenüber C++ hat.
 
sagen wir Java wurde nicht primär für Spieleentwickler konzipiert ;)
 
eloso schrieb:
Aber Du hast Dir sicherlich nicht die Mühe gemacht, mal den Sourcecode anzuschauen, den die fabriziert haben, sonst wäre Dir sicherlich aufgefallen, warum c++ so schlecht abgeschnitten hat.
Da hast du mich aber voll erwischt – Das liegt aber hauptsächlich daran, daß mir ziemlich egal war, ob Java nun schneller ist. Es macht mir einfach keinen Spaß darin zu programmieren, also bleibe ich so oder so bei C++. ;)

Ansonsten finde ich diesen Fehler, den du im Vergleich der c’t aufgezeigt hast allerdings sehr interessant, mir wäre das wahrscheinlich gar nicht erst aufgefallen. :D
 
wegus schrieb:
sagen wir Java wurde nicht primär für Spieleentwickler konzipiert ;)

C++ und C auch nicht. ;)

Sogar mit Lisp werden Spiele entwickelt. ;)
 
Zuletzt bearbeitet:
wegus schrieb:
Catch the bracket :D
Oder: Hilf Hänsel und Gretel, den Weg aus dem Klammerwald zu finden, damit sie nicht im Lambda-Hexenhäuschen gefangen und gebraten werden. ;)
 
-Nuke- schrieb:
Sogar mit Lisp werden Spiele entwickelt. ;)

Eignet sich ja dafuer auch hervoragend. Durch seine enorme Flexibiltaet ist Lisp die Sprache Nr. 1 im Bereich der DSL... Lisp kann man ueberall einsetzen, eben weil es selbst programmierbar ist...
 
Panda schrieb:
Moin
Kennt irendjemand sonst noch irgendwelche Entwicklungsprograme für Apple (wenns geht umsonst)
dank
Für was brauchst du ne andere Enwicklungsumgebung als XCode?
Und zum C++ Programmieren unter XCode brauchst du sicher kein Tutorial! Ich versteh nicht, was daran schwer sein soll, unter XCode ein C++ Projekt zu erstellen.

GruZZ Diskordia
 
Zurück
Oben Unten