PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Der Beweis: C++ ist langsamer als Java


hirnloserJavaFanatik
2003-10-12, 12:40:27
siehe aktuelle c't!

Borland C++ mit 27,2 sekunden weit hinter Java 1.4.2 mit nur 8,8 sek!!

und java ist auch noch viel übersichtlicher (kein headerdatei rumgefummele) und sicherer (keine Pointer und Buffer overrun!).

überzeugt euch selbst: Softlink 0321222

Exxtreme
2003-10-12, 12:59:39
Der Test von der CT ist die Tonne. Der ist nämlich absolut nicht praxisnah. :)

Der_Donnervogel
2003-10-12, 13:05:41
Interessant finde ich besonders, daß C++ (sowohl MS C++ als auch Borland) seine Schwächen ausgerechnet bei der objektorientierten (!) Programmierung haben.

Wenn man sich die Messwerttabellen im Artikel genauer anschaut fällt auch auf, daß beide C++ Compiler beim Wechsel von 1 GHZ Athlon auf 2 GHZ P4 nicht so viel an Leistung gewinnen wie die anderen Sprachen. zB benötigt MS C++ auf dem Athlon 16 sec und Java 16,2 sec. Auf dem P4 aber MS C++ 12,3 sec und Java 8,8 sec.

Vor allem bei der Konstruktion der Objekte scheint C++ laut c't aufgrund des verwendeten Objektmodells langsam zu sein.

Selbst wenn es im Prinzip nur ein Testszenario ist das untersucht wurde (Ein Programm zur Verwaltung einer dateisystemartigen Baumstruktur) ist das Abschneiden von MS C++ vorsichtig formuliert mau (von Borland C++ ganz zu schweigen). Doppelt so lange zu rechnen wie C# oder Delphi ist schon "stark," aber selbst von Java versägt zu werden...

hirnloserJavaFanatik
2003-10-12, 13:52:51
Original geschrieben von Der_Donnervogel Vor allem bei der Konstruktion der Objekte scheint C++ laut c't aufgrund des verwendeten Objektmodells langsam zu sein.Totaler Schwachsinn... das Objektmodell spielt zur Laufzeit keine Rolle.

Der Autor hatte einfach keine Ahnung von C++:
- CString statt std::string
- a = a + 'c'; statt a += 'c';
- by-value statt by-ref
...
wenn man nur eine Zeile ändert ist c++ schon 50% schneller!

Darkstar
2003-10-12, 14:23:18
Original geschrieben von hirnloserJavaFanatik
Totaler Schwachsinn... das Objektmodell spielt zur Laufzeit keine Rolle.Kannst Du das bitte mal näher erläutern?

hirnloserJavaFanatik
2003-10-12, 14:53:26
Original geschrieben von Darkstar
Kannst Du das bitte mal näher erläutern? (Mehrfach)vererbung, Templates, Methoden... gibt es nur zur Compilezeit. Zur Laufzeit merkt man davon nichts, in ASM gibt es keine Klassen. Dann ist alles wie C-Quelltext.

Stone2001
2003-10-12, 15:13:33
Gegenbeweis: Java ist langsamer als C++!
Siehe: eine frühere c't!

Ich hab schon immer gesagt, das ein Vergleich nur schwer möglich ist und beide Programmiersprachen Gebiet haben in denen sie der anderen überlegen sind.

Crushinator
2003-10-12, 19:14:16
Original geschrieben von Exxtreme
Der Test von der CT ist die Tonne. Der ist nämlich absolut nicht praxisnah. :) Jo, aber trotzdem interessant. Er zeigt nämlich, bei welcher Sprache man auf alle Fälle per Hand optimieren muß. ;) Er ist allerdings sehr theoretisch geraten, weil man in der Praxis bei "List"-Objekten die eine Million!!!eins Elemente aufnehmen sollen normalerweise NICHT auf polymorhe Klassen greift, und wenn doch dabei alles versucht das optimale aus dem jeweiligen (besonders C++)Compiler rauszuholen.

Ein weiteres Detail, das für mich von großer Wichtigkeit ist: Dem Otto-Normal-ich-mach-mal-kurz-was kann Delphi getrost empfohlen werden, denn das Executable läuft ohne jegliche Laufzeitumgebung á la .NET oder JRE notfalls auch unter Win95a und ist dabei schon out of the box sauschnell. :D

grakaman
2003-10-12, 20:17:13
Original geschrieben von crushinator
Ein weiteres Detail, das für mich von großer Wichtigkeit ist: Dem Otto-Normal-ich-mach-mal-kurz-was kann Delphi getrost empfohlen werden, denn das Executable läuft ohne jegliche Laufzeitumgebung á la .NET oder JRE notfalls auch unter Win95a und ist dabei schon out of the box sauschnell. :D

Abgesehen vom Deployment sehe ich das eher als Nachteil an.

MfG

Exxtreme
2003-10-12, 20:20:44
Original geschrieben von grakaman
Abgesehen vom Deployment sehe ich das eher als Nachteil an.

MfG
Ich nicht. Je weniger der Endverbraucher zusätzlich installieren muss, desto besser... meine Meinung.

007
2003-10-12, 20:23:20
Ich bin ja sonst größtenteils mit der Berrichterstattung der c't einverstanden, aber was sie sich da geleistet haben :eyes:...

Ein Test wäre nur Aussagekräftig gewesen, wenn man die Anwendung die man erstellen will, möglichst mit der gewählten Sprache optimiert programmiert und nicht überall das gleiche.

Du verwendest ja für einen Ferrari auch Super Plus Sprit und für deinen Fiat Punto nur Bleifrei.

Der Test hinkt gewaltig in meinen Augen.

Crushinator
2003-10-12, 20:27:16
Original geschrieben von grakaman
Abgesehen vom Deployment sehe ich das eher als Nachteil an. Ähhmm, interessant. Was genau siehst Du da (besonders in dem Otto-Normal-Kontext) für einen Nachteil? :|

grakaman
2003-10-12, 20:53:13
Original geschrieben von crushinator
Ähhmm, interessant. Was genau siehst Du da (besonders in dem Otto-Normal-Kontext) für einen Nachteil? :|

Nein, ich meinte eher den technischen Aspekt, nicht die Usability. Und da bietet eine RE eben mehr Sicherheit durch kontrollierte Ausführung. Aber wer hat heut zu Tage schon keine JRE auf dem Rechner? Und spätestens in 2 Jahren wird die .NET Redistributable auch auf Windows Rechnern Standard sein.

MfG

grakaman
2003-10-12, 20:55:19
Original geschrieben von Exxtreme
Ich nicht. Je weniger der Endverbraucher zusätzlich installieren muss, desto besser... meine Meinung.

Das stimmt schon, ist aber alles nur noch eine Frage der Zeit. Und mal ehrlich, das sollte doch für dich als Linuxbenutzer nichts neues sein :naughty:

MfG

Crushinator
2003-10-12, 21:17:50
Original geschrieben von 007
(...)
Ein Test wäre nur Aussagekräftig gewesen, wenn man die Anwendung die man erstellen will, möglichst mit der gewählten Sprache optimiert programmiert und nicht überall das gleiche. (...) Ja, aber wenn ich das richtig gelesen habe, ging's nur darum aufzuzeigen welche Sprache wo genau im reinen OOP (den Ausdruck OVP fand ich übrigens auch sehr locker :D) was wie performant macht. Die Box Wer misst ... sagt am Endeffekt viel über den Sinn dieses Tests aus, zwischen den Zeilen gelesen nämlich daß diese Riesen-CPP-Compiler u.A. wegen den sehr umfangreich mitgelieferten Klassenbibliotheken sich nur bedingt für theoretische OOP-Geschichten "out of the box" eignen.

Mit einwenig Ahnung von C/CPP-Compilern wäre übrigens nicht so ein Mist á la

for (int x = 0; x < EntryList.GetCount(); x++) {Findeirgendwas();}
entstanden, weil es in dieser Anwendung mit

int y = EntryList.GetCount();
for (int x = 0; x < y; x++) {Findeirgendwas();} eindeutig schneller gewesen wäre.

/edit: Mein Code war im Nachhinein eher kontraproduktiv, bitte übersehen. :D

007
2003-10-12, 21:28:48
Original geschrieben von crushinator
Ja, aber wenn ich das richtig gelesen habe, ging's nur darum aufzuzeigen welche Sprache wo genau im reinen OOP (den Ausdruck OVP fand ich übrigens auch sehr locker :D) was wie performant macht. Die Box Wer misst ... sagt am Endeffekt viel über den Sinn dieses Tests aus, zwischen den Zeilen gelesen nämlich daß diese Riesen-CPP-Compiler u.A. wegen den sehr umfangreich mitgelieferten Klassenbibliotheken sich nur bedingt für theoretische OOP-Geschichten "out of the box" eignen.

Mit einwenig Ahnung von C/CPP-Compilern wäre übrigens nicht so ein Mist á la

for (int x = 0; x < EntryList.GetCount(); x++) {Findeirgendwas();}
entstanden, weil es in dieser Anwendung mit

int y = EntryList.GetCount();
for (int x = 0; x < y; x++) {Findeirgendwas();} eindeutig schneller gewesen wäre.


Das ist doch genau das was ich meine, hier wurde nicht der optimale Code verwendet, der bei eine Optimierung auf Geschwindigkeit, logischerweise zum Einsatz gekommen wäre, sondern so ziehmlich die langsamste Version die sie sich zusammendichten konnten, verwendet.

Deshalb ist dieser Test nicht wirklich "fair" und auch von der Aussagekraft dementsprechend zu beurteilen.

Man muss einfach zugeben, das C++ die mächtigste und vorallem vielfältigste Sprachauf dem Markt ist. Es ist nicht fair eine Sprache mittels nicht wirklich optimiertem Code und auf Grund ihrer Komplexität zu verurteilen. Mit Delphi mag man ab und zu schneller ans Ziel kommen, aber selbst in Delphi kommt man ab und an nicht um C rum, auch wenn man die Sonderzeichenorgien und die Klammersetzung aufn Mond schießen könnte :D

Darkstar
2003-10-12, 23:00:50
Original geschrieben von hirnloserJavaFanatik
(Mehrfach)vererbung, Templates, Methoden... gibt es nur zur Compilezeit. Zur Laufzeit merkt man davon nichts, in ASM gibt es keine Klassen. Dann ist alles wie C-Quelltext. Zumindest bei Delphi macht es zur Laufzeit schon einen gewaltigen Geschwindigkeitsunterschied, ob man von der Klasse TObject eine größere Anzahl von Instanzen bildet oder von einer Klasse, die sich ganz am Ende des Klassenbaums befindet.

Crushinator
2003-10-12, 23:20:20
Ich habe mir den CPP-Source jetzt mal genauer angeschaut und dabei unter VC++ 6.0 zum laufen gebracht. Dabei wurde nichts an den Schleifen verbessert, weil es sich herausstellte, daß GetCount() bzw. GetSize() nur eine Variable zurückliefert und meine oben als solche bezeichnete Optimierung eher paar Takte dazu gekostet hätte. :ups:

Die von VC 6 gewonnenen Erkenntnisse sind ähmmm...ja...wie soll ich sagen...doch ziemlich überraschend. :D


PIII 650

MS VC 6
Time: 16.524 s
for Construction: 6.450 s
for Destruction: 0.982 s
for Find: 9.092 s

Delphi 7
Time: 19.087 s
for Construction: 10.204 s
for Destruction: 1.222 s
for Find: 7.661 s

--------------------------------

P4 2,66 FSB533

MS VC 6
Time: 4.859 s
for Construction: 1.828 s
for Destruction: 0.343 s
for Find: 2.688 s

Delphi 7
Time: 5.047 s
for Construction: 3.249 s
for Destruction: 0.407 s
for Find: 1.391 s


Mit anderen Worten hat der MS VC in der 7er Version (von c't verwendet) etwas nachgelassen. :o

Exxtreme
2003-10-13, 08:29:42
Original geschrieben von grakaman
Das stimmt schon, ist aber alles nur noch eine Frage der Zeit. Und mal ehrlich, das sollte doch für dich als Linuxbenutzer nichts neues sein :naughty:

MfG
Wieso als Linux-User?

Ein

apt-get update
apt-get <Paketname>

reicht. ;)

Und MICH stört das nicht, wenn ich was nachinstalliere. Ich bin aber auch kein Anfänger mehr. Es gibt aber Leute, die wissen gerade mal wie man den Rechner einschaltet. Für eine kleine Installation holen die schon den Nachbar. ;)

grakaman
2003-10-13, 08:42:59
Original geschrieben von Exxtreme
Wieso als Linux-User?

Ein

apt-get update
apt-get <Paketname>

reicht. ;)


Und damit installierst du wohl keine Software?


Und MICH stört das nicht, wenn ich was nachinstalliere. Ich bin aber auch kein Anfänger mehr. Es gibt aber Leute, die wissen gerade mal wie man den Rechner einschaltet. Für eine kleine Installation holen die schon den Nachbar. ;)

Und denen empfiehlst du dann auch immer Linux? :D
Also ich halte die Installation einer RE für nicht problematisch, zumal man die ja auch optional schön im Setup unterbringen kann.

MfG

Exxtreme
2003-10-13, 08:57:14
Original geschrieben von grakaman
Und damit installierst du wohl keine Software?

Doch. Aber ich muss mich um die Abhängigkeiten der Pakete nicht mehr kümmern.
Original geschrieben von grakaman
Und denen empfiehlst du dann auch immer Linux? :D

Nö, zuerst einen Computerkurs. :D
Original geschrieben von grakaman
Also ich halte die Installation einer RE für nicht problematisch, zumal man die ja auch optional schön im Setup unterbringen kann.

MfG
Ja, da gebe ich dir recht. Wenn man aber Software zum DL anbietet, dann muss sich der User darum kümmern. Und wie gesagt, ich kenne Leute, die sind schon damit überfordert.

grakaman
2003-10-13, 09:32:07
Original geschrieben von Exxtreme
Ja, da gebe ich dir recht. Wenn man aber Software zum DL anbietet, dann muss sich der User darum kümmern. Und wie gesagt, ich kenne Leute, die sind schon damit überfordert.

Das versteh ich nicht ganz. Warum sollte der User zwangsweise bei Software, die er aus dem Internet downloaded, sich mehr darum kümmern müssen als bei normaler Verteilung? Dann läd er sich eben eine Setup Datei runter. Man könnte höchstens noch argumentieren, dass er sich unter Umständen noch ca. 20MB extra downloaden müsste, was aber das Setup alles für ihn erledigen kann, inkl. Installation. Trotzdem wäre das für mich kein Grund die RE, mit all ihren Vorteilen, einzutauschen.

MfG

micki
2003-10-13, 09:52:30
kann jemand den softlink hier mal posten? die nummer selbst funzt net...

gruesse
micki

Crushinator
2003-10-13, 11:07:11
Original geschrieben von micki
kann jemand den softlink hier mal posten? die nummer selbst funzt net... Latürnich funktioniert die Nummer. Aber weil Du's bist, poste ich auch den direkten Link (http://www.heise.de/ct/ftp/03/21/222/). ;)

Crushinator
2003-10-13, 11:25:36
Original geschrieben von grakaman
(...)
Trotzdem wäre das für mich kein Grund die RE, mit all ihren Vorteilen, einzutauschen. Ich persönlich toleriere höchstens JRE und zwar auch nur deshalb, weil JAVA wenigstens ansatzweise dem Anspruch der Plattformunabhängigkeit gerecht wird. Aber jetzt mal ernsthaft überlegt: Warum sollte man eine Application welche zu 99% unter Windows gebraucht würde als JAVA- oder .NET ByteCode erzeugen? Etwa zum Selbstzweck? :|

micki
2003-10-13, 11:34:49
das copy&paste hat wohl nen fehler verursacht, habe die nummer von hand eingetippt, dann ging's

hab den source gebenched und er hat 15.xxx seconds gebraucht
dann mit call by referenz und es lief mit 10.xx seconds durch...

der typ schaut aus als ob der von delpi und java kommt, denn wer ruft schon eine variable mit mehr als 4byte mit const by value auf?

ich schau nochmal was vtune sagt, vielleicht bekommt man das noch schneller..

gruesse
micki


so, auf ca. 9.5seconds runter nur durch richtige anwendung von c++ ohne libs geändert zu haben.. da hat sich die c't echt blamiert.... :-/

Xmas
2003-10-13, 15:41:39
Original geschrieben von crushinator
Ich persönlich toleriere höchstens JRE und zwar auch nur deshalb, weil JAVA wenigstens ansatzweise dem Anspruch der Plattformunabhängigkeit gerecht wird. Aber jetzt mal ernsthaft überlegt: Warum sollte man eine Application welche zu 99% unter Windows gebraucht würde als JAVA- oder .NET ByteCode erzeugen? Etwa zum Selbstzweck? :|
Du scheinst damit zu implizieren dass ein RE nur den Vorteil der Plattformunabhängigkeit hat.

Exxtreme
2003-10-13, 16:13:28
Original geschrieben von micki

so, auf ca. 9.5seconds runter nur durch richtige anwendung von c++ ohne libs geändert zu haben.. da hat sich die c't echt blamiert.... :-/

Ich schaue mir die Sache heute abend mal an. Der C++-Builder hat ja richtig schlecht abgeschnitten. ;)

Gut, ich habe die Personal Edition ohne stark optimierenden Compiler aber was soll's. :)

Crushinator
2003-10-13, 16:19:29
Original geschrieben von Xmas
Du scheinst damit zu implizieren dass ein RE nur den Vorteil der Plattformunabhängigkeit hat. Ja, alles andere (ggf. Typen-/Überlaufsicherheitist und shared libs) ist mir persönlich in aller wenigsten Fällen von Relevanz. :)

hirnloserJavaFanatik
2003-10-13, 17:16:08
Original geschrieben von crushinator
Er zeigt nämlich, bei welcher Sprache man auf alle Fälle per Hand optimieren muß. ;)schau dir an, was micki gemacht hat: das ist keine Handoptimierung, sondern so programmiert man normal!

Die Autoren haben vergessen, dass
procedure foo(x : string);
nicht
void foo(std::string x);sondern
void foo(const std::string& x);entspricht!

Auch etwas wie a = a+t; nicht in a += t; umzuwandeln ist keine vergessene Optimierung, das ist ein Fehler eines Dilettanten!


Wenn die Autoren etwas mit C++ machen wollen, warum nehmen sie dann CString und nicht std::string?

Gast
2003-10-13, 17:43:56
http://www.heise.de/ct/foren/go.shtml?read=1&msg_id=4318247&forum_id=2&showthread=-1

Crushinator
2003-10-13, 18:45:56
Original geschrieben von micki
(...)
der typ schaut aus als ob der von delpi und java kommt, denn wer ruft schon eine variable mit mehr als 4byte mit const by value auf? (...) Ohne jetzt meckern zu wollen: Der Typ hat bei jeder der getesteten Sprachen die Variablen per Value übergeben. Auch in Delphi keine Spur von var bla: String

Wenn man jetzt bei den CPP-Klassen alles in &Var änderst, vernichtet man einfach die Vergleichbarkeit. ;) Natürlich stimme ich zu, daß man in C++ eigentlich immer Zeiger verwendet, und dieser ganze Test etwas zu theoretisch geraten ist.

BTW: Daß es mit den Zeigern viel bringt war ja klar, aber der Aha-Effekt kam - weil ich hauptsächlich mit memcpy() l33b0r :freak: - mit der mir nicht geläufigen Zeile:

NewName += char((int)'a' + (rand() % 26));

Es sind ~80% auf dem Rechner vor dem ich gerade sitze. :o

PIII 650

MS VC 6 alt neu
-----------------------------------------
Time: 16.524 s 9,193
for Construction: 6.450 s 3,727
for Destruction: 0.982 s 0,960
for Find: 9.092 s 4,506


/edit: In den neuen Zahlen sind auch Benutzung von const CString& drin. Nur += bringt ~60% bei der Construction.

hirnloserJavaFanatik
2003-10-13, 18:59:16
Original geschrieben von crushinator
Ohne jetzt meckern zu wollen: Der Typ hat bei jeder der getesteten Sprachen die Variablen per Value übergeben. Auch in Delphi keine Spur von var bla: StringEben nicht! In Delphi wird das Ding nicht per value übergeben. In Delphi sind Objekte immer Zeiger. Deswegen
wird durch by-reference *nicht* die Vergleichbarkeit zerstört, sondern erst aufgebaut!

der Aha-Effekt kam - weil ich hauptsächlich mit memcpy() l33b0r :freak: - mit der mir nicht geläufigen Zeile:

NewName += char((int)'a' + (rand() % 26));

Es sind ~80% auf dem Rechner vor dem ich gerade sitze. :o

PIII 650

MS VC 6 alt neu
-----------------------------------------
Time: 16.524 s 9,193
for Construction: 6.450 s 3,727
for Destruction: 0.982 s 0,960
for Find: 9.092 s 4,506
;)

Crushinator
2003-10-13, 19:10:33
Original geschrieben von hirnloserJavaFanatik
(...)
Wenn die Autoren etwas mit C++ machen wollen, warum nehmen sie dann CString und nicht std::string? Vielleicht wollten sie ja bewußt ganze Bytes durch die Gegend schicken. ;)

Wie ich bereits vorher schrieb: Sie haben versucht alle Kandidaten unter selben Bedingungen zu testen und haben sich dazu noch ausführlich in dem berühmten Kasten geäußert. Ob das was sie angezettelt haben - besonders bezüglich C++ und Delphi - praxisrelevant sei, stelle ich selbstverständlich auch in Frage. :D

Exxtreme
2003-10-13, 19:23:08
ROFL, die Typen sind echt die Helden. Durch das Andern von wenigen Zeilen konnte ich die Geschwindigkeit fast verdoppeln beim C++Builder6. :)


| Construction | Suche | Destruction | Gesamt |
Alt | 5,759 s | 5,952 s | 0,062 s | 11,7773 s |
Neu | 4,494 s | 1,918 s | 0,057 s | 6,469 s |

Also wer ganze Objekte kopiert anstatt der 4 Byte großen Zeiger, dem gehört der Zugang zum Computer entzogen.

Aber daß "x += y" schneller ist als "x = x + y" das wusste ich selber nicht. :|

007
2003-10-13, 19:28:59
Original geschrieben von hirnloserJavaFanatik
Eben nicht! In Delphi wird das Ding nicht per value übergeben. In Delphi sind Objekte immer Zeiger. Deswegen
wird durch by-reference *nicht* die Vergleichbarkeit zerstört, sondern erst aufgebaut!

;)


Hmm, ich will wenn ich programmiere zu einem und dem selben Ziel kommen, und das würde ich mit jeder Sprache anders realisieren und den Code optimieren.

Was bringt mir ein so theoretischer Test, der in der Praxis nie und nimmer stimmt, da kein Coder dieser Welt so'n Schwachsinn fabrizieren würde...

Crushinator
2003-10-13, 20:24:14
Original geschrieben von hirnloserJavaFanatik
Eben nicht! In Delphi wird das Ding nicht per value übergeben. In Delphi sind Objekte immer Zeiger. Deswegen
wird durch by-reference *nicht* die Vergleichbarkeit zerstört, sondern erst aufgebaut! Es ging aber nicht um Objekte sondern nur um Strings, und diese sind ohne Var eben keine Zeiger. ;)

Man ersetze z.B.

function FindEntry(PartialName: String): TSingleEntry; override;

durch

function FindEntry(Var PartialName: String): TSingleEntry; override;

...und diverse andere auch und schon kommt folgendes bei raus. :D



PIII 650

Delphi 7 alt neu
---------------------------------------------
Time: 19.087 s 16,624 s
for Construction: 10.204 s 9,714 s
for Destruction: 1.222 s 1,182 s
for Find: 7.661 s 5,728 s

Xmas
2003-10-13, 20:34:53
Original geschrieben von Exxtreme
Aber daß "x += y" schneller ist als "x = x + y" das wusste ich selber nicht. :|
Nicht immer, aber oft. Bei den eingebauten Typen gibt es keinen Unterschied, ebenso bei allen Klassen bei denen der Compiler
x.operator=(x.operator+(y));
auf denselben Code wie
x.operator+=(y);
reduzieren kann. Und dazu gehören Strings üblicherweise nicht.

Xmas
2003-10-13, 21:13:49
Zu Call-by-Value/Reference sollte man noch hinzufügen, dass diese Begriffe eigentlich sehr verwirrend sind. Denn Value kann sowohl bedeuten dass eine Kopie eines Objekts übergeben wird, als auch eine Kopie einer Referenzvariable. Und Reference kann bedeuten dass eine Referenz auf ein Objekt übergeben wird, oder auch eine Referenz auf eine Referenzvariable.

Ich fand es anfangs ganz erstaunlich als jemand behauptete Java würde nur Call-by-Value verwenden. Stimmt auch. Allerdings ist mit Value der Wert einer Referenzvariable gemeint, nicht das Objekt selbst. In C# gibt es die Trennung zwischen Werttypen (struct) und Referenztypen (class).

Bei Python wird von Call-by-Value-Reference geredet. Es gibt schlicht nur Referenzvariablen, diese aber werden als Value übergeben.


crushinator, C++ kopiert bei Call-by-Value das ganze Objekt, sprich den ganzen String. Ist das bei Delphi auch so, oder wird dort nur eine Referenz kopiert?

EgonOlsen
2003-10-14, 00:47:15
Original geschrieben von grakaman
Also ich halte die Installation einer RE für nicht problematisch, zumal man die ja auch optional schön im Setup unterbringen kann.Man muss sie ja nicht mal explizit installieren. Jüngstes Beispiel ist "Chrome" (http://www.chromethegame.com). Das verwendet Java für die Spiellogik und da liegt die "mitgebrachte" JRE einfach im Installationsverz. herum.

grakaman
2003-10-14, 08:04:02
Muss ich mir jetzt eine Ct kaufen, um mitzureden oder kann mal jemand den Code, zumindest für C#, posten?!

MfG

Exxtreme
2003-10-14, 09:25:32
Original geschrieben von grakaman
Muss ich mir jetzt eine Ct kaufen, um mitzureden oder kann mal jemand den Code, zumindest für C#, posten?!

MfG
Guckst du hier:
http://www.heise.de/ct/ftp/03/21/222/

^^Da sind komplett alle Listings in der Zip-Datei.

Gast
2003-10-14, 12:35:15
Original geschrieben von Xmas
(...)
crushinator, C++ kopiert bei Call-by-Value das ganze Objekt, sprich den ganzen String. Ist das bei Delphi auch so, oder wird dort nur eine Referenz kopiert? Bei Delphi werden Objekte sobald sie als solche definiert sind immer als Referenz übergeben. Strings vom Datentyp String jedoch nicht. Da muß man explizit ein Var vor dem Variablennamen setzen, um zu referenzieren. :)

crush ohne Keks.

micki
2003-10-14, 13:41:11
ich hoffe sie können in der nächsten c't mal das ganze ohne lamenes wiederhollen. es ist als ob sie jeweils einen trabifahrer in nen lkw und nen sportwagen gesteckt hätte, der mit dem sportwagen gegen ne wand gekracht wäre und am ende rausgekommen wäre, dass der LKW die bessere "performance" bringt.

jede programmiersprache ist ein werkzeug und nur mit richtigem benutzen dieser kann man das erhalten was man erwartet bzw. sich wünscht.

weshalb die nicht einen profiler genommen haben um zu sehen was die da anstellten ist mir schleierhaft, ein "replace all: const CString ... in ... const CString&" bringt min. 30%.
zudem frage ich mich, wieso sie nicht die für c++ standartisierte lib genommen haben... ein irrsin was die anstellen.
bei jedem halbwissendem c++ coder haben sie nun ein -- kassiert, schätze ich.

gruesse
micki

Crushinator
2003-10-14, 13:43:36
Original geschrieben von Exxtreme
(...)
Also wer ganze Objekte kopiert anstatt der 4 Byte großen Zeiger, dem gehört der Zugang zum Computer entzogen. (...)
Es werden aber Gottseidank nicht ganze SingleEntry-Objekte kopiert, sondern nur die Strings innerhalb derer. So schlau waren sie wenigstens. :D

Exxtreme
2003-10-14, 13:59:59
Original geschrieben von crushinator
Es werden aber Gottseidank nicht ganze SingleEntry-Objekte kopiert, sondern nur die Strings innerhalb derer. So schlau waren sie wenigstens. :D
Ich weiss. Aber stell dir mal vor wenn sie längere Strings kopiert hätten. Dann wäre die Performance noch viel schlechter gewesen... :bonk:

Crushinator
2003-10-14, 14:08:03
Original geschrieben von micki
(...)
bei jedem halbwissendem c++ coder haben sie nun ein -- kassiert, schätze ich. Ich würde behaupten, sie haben sich auch bei fast jedem OO-Engineer disqualifiziert, weil sie aufgrund von eigenen Fehlern und zwar vor der eigentlichen Construction von Objekten behauptet haben, daß dies auf dieser und jener Sprache langsamer sei. ;)

Aqualon
2003-10-14, 14:58:59
Original geschrieben von EgonOlsen
Man muss sie ja nicht mal explizit installieren. Jüngstes Beispiel ist "Chrome" (http://www.chromethegame.com). Das verwendet Java für die Spiellogik und da liegt die "mitgebrachte" JRE einfach im Installationsverz. herum.

Gibt es dazu irgendwo genauere Informationen? Hab auf der Website leider nichts gefunden, fände das aber schon sehr interessant.

Aqua

EgonOlsen
2003-10-14, 19:01:17
Original geschrieben von Aqualon
Gibt es dazu irgendwo genauere Informationen? Hab auf der Website leider nichts gefunden, fände das aber schon sehr interessant.

Aqua In der Sektion über den Editor findet sich auf der Website was...aber viel ist es auch nicht. Im Verz. des installierten Spieles liegen lauter Java-Files im Quelltext herum. Die könnte man wohl dann ändern...wenn man wollte und so einen MOD bauen.

Aqualon
2003-10-16, 08:54:05
Original geschrieben von EgonOlsen
In der Sektion über den Editor findet sich auf der Website was...aber viel ist es auch nicht. Im Verz. des installierten Spieles liegen lauter Java-Files im Quelltext herum. Die könnte man wohl dann ändern...wenn man wollte und so einen MOD bauen.

Das sind tatsächlich .java Files auf der CD? Interessant, das ist ja mal nett den SourceCode teilweise mitzuliefern (selbst wenn er nur zur Anpassung der Spiellogik dienen sollte).

Aqua