PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ 0x vs. D


Gast
2008-12-19, 19:33:16
Mir ist klar, dass C/C++ eine bessere Performancd hat.

Die Lösung: Da hat man lieber eine ein bisschen schlechtere Grafik, dafür nimmt man sich mehr Zeit für das Spiel selbst (was durch Java erleichtert wird ;))

Zusätzlicher Vorteil: man muss nur für eine Plattform programmieren - Java

In diesem Fall nimmt man aber besser Programmiersprache D, denn die bietet den selben Luxus und Entwicklungszeitersparnis wie Java und ist aber dabei so performant wie C oder C++.

Es braucht nur noch ordentliche D Compiler, aber das kommt noch.

Krishty
2008-12-19, 19:44:36
Seit wann ist D plattformunabhängig?

Und wie will es ohne „ordentliche Compiler“ so performant sein wie C oder C++?

Coda
2008-12-19, 19:54:15
Ich finde bei D sind die Vorteile ggü. C++ einfach viel zu gering, der Industriesupport nicht da und außerdem ist es inkompatibel mit C++. Und vor allem hat es durchaus auch Nachteile. Ich glaube nicht dass es sich durchsetzt.

C++ 0x kommt ja jetzt auch bald und hat so einige schöne Dinge verpasst bekommen.

Gast
2008-12-19, 19:56:29
Seit wann ist D plattformunabhängig?


D ist auf Quellcodeebene plattformunabhängig, genau wie C und C++ auch
und nur darauf kommt es an.

Die Sprache ist an keine bestimmte Plattform gebunden.



Und wie will es ohne „ordentliche Compiler“ so performant sein wie C oder C++?
Es fehlt noch ein Compiler von Intel, den den sehe ich, was z.b. den C++ Compiler betrifft, als ordentlichen Compiler an.
Das war damit gemeint.


Außerdem, bis ein Spieleprojekt + eigener Engine fertig ist, gehen locker 5 Jahre ins Land. Bis dahin gibt es sicher ordentliche Compiler.

Gast
2008-12-19, 20:03:46
Ich finde bei D sind die Vorteile ggü. C++ einfach viel zu gering, der Industriesupport nicht da und außerdem ist es inkompatibel mit C++. Ich glaube nicht dass es sich durchsetzt.


D ist kompatibel zu C und nur darauf kommt es an.
C++ ist ein anderer Zweig und eine Abspaltung von C und wenn man die Macken von C++ nicht erben will, dann kann man ganz bestimmt nich eine neue Sprache zu C++ kompatibel machen. Das wäre nämlich Dumm.


Und die Vorteile von D gegenüber C++ sind enorm.

Die Typisierung ist bei D stark und statisch,
bei C++ ist sie dagegen stark, nominativ und unsicher.

Letzteres ist der Genickbruch von C++ wenn es um die schnelle effizente möglichst fehlerfreie Entwicklung von Progammcode geht.
Bei C++ ist ein erfahrener Programmierer zwingend erforderlich,
der der unerfahrene kennt die Fallstrike von C++ meist nicht und verursacht damit todsicher Bugs am laufenden Band weil C++ ihn daran nicht hindert.





C++ 0x kommt ja jetzt auch bald und hat so einige schöne Dinge verpasst bekommen.

Ja, eine Erweiterung der STL, aber richtig komplette Brüche wird man nie in C++ reinkommen, die währen aber notwendig um die Unsicherheit in C++ zu entfernen.

Coda
2008-12-19, 20:06:53
Bei C++ ist ein erfahrener Programmierer zwingend erforderlich,
der der unerfahrene kennt die Fallstrike von C++ meist nicht und verursacht damit todsicher Bugs am laufenden Band weil C++ ihn daran nicht hindert.
Das mag zwar stimmen, aber die Sache ist dass man für Engine-Programmierung sowieso erfahrene Entwickler braucht. Für den Gamecode kann man ja gerne etwas anderes verwenden.

Ja, eine Erweiterung der STL, aber richtig komplette Brüche wird man nie in C++ reinkommen, die währen aber notwendig um die Unsicherheit in C++ zu entfernen.
Gib doch mal ein gutes Beispiel wo D so viel besser als C++ ist was die Typsicherheit angeht. Ich bin da ein wenig skeptisch.

C++ 0x ist auch einiges mehr als nur eine Erweiterung der STL. Concepts, Auto-Keyword, Lambdas, Garbage Collection, etc.

Gerade Concepts sind unglaublich mächtig. Damit ist schlicht alles ausdrückbar was man als Metasprache theoretisch ausdrücken könnte.

Krishty
2008-12-19, 20:21:24
Viele Ungereimtheiten in C++ sehe ich vielmehr in den C-Ursprüngen begründet als in C++ selbst (mit C-Casts und Ellipsen-Operator als bestem Beispiel). Nochmal anders von C zu erben bringt da nicht viel…

…und C++09 wird den Vorsprung, den D bei ein paar Features haben mag, schrumpfen lassen und es in ein paar anderen Bereichen völlig hinter sich lassen.

Sollen wir einen neuen Thread eröffnen?

(Achja: Der Name ist auch schrecklich. Wenn man bei Google nach D-Zeug sucht bekommt man erstmal tausend Ergebnisse mit D, die nicht das geringste damit zu tun haben :D)

Gast
2008-12-19, 20:55:16
Das mag zwar stimmen, aber die Sache ist dass man für Engine-Programmierung sowieso erfahrene Entwickler braucht. Für den Gamecode kann man ja gerne etwas anderes verwenden.

Eine andere Wahl hätte man bei C++ eh nicht, aber das ist nicht das einzigste Problem.
Auch jeder gute Coder hat mal einen schlechten Tag und dann übersieht er auch die Bugs obwohl er es besser hätte wissen müssen.


Gib doch mal ein gutes Beispiel wo D so viel besser als C++ ist was die Typsicherheit angeht. Ich bin da ein wenig skeptisch.


Nur ein Beispiel beim Vergleichen von Structs, das sagt schon einiges über C++ und D aus:


There's a nasty bug lurking in the memcmp() implementation of operator==(). The layout of a struct, due to alignment, can have 'holes' in it. C++ does not guarantee those holes are assigned any values, and so two different struct instances can have the same value for each member, but compare different because the holes contain different garbage.

To address this, the operator==() can be implemented to do a memberwise compare. Unfortunately, this is unreliable because (1) if a member is added to the struct definition one may forget to add it to operator==(), and (2) floating point nan values compare unequal even if their bit patterns match.


Der Rest des ganzen Textes steht hier:
http://www.digitalmars.com/d/2.0/cpptod.html#structcmp

Gast
2008-12-19, 21:06:44
Viele Ungereimtheiten in C++ sehe ich vielmehr in den C-Ursprüngen begründet als in C++ selbst (mit C-Casts und Ellipsen-Operator als bestem Beispiel). Nochmal anders von C zu erben bringt da nicht viel…


In D wird der Code von C im Prinzip ersetzt, nicht geerbt.
D.h. D hat eine eigene Printf Funktion und wenn man ihr einen String übergeben will, dann geht das nicht mit %s sondern mit %.*s
Der Grund dafür ist, daß Strings in D nicht Nullterminiert werden,
sondern ein String sowohl eine Länge als auch einen Pointer enthält.

Ein String besteht in D aus 8 Bytes, die ersten 4 Bytes werden für die Länge verwendet und die restlichen 4 Bytes für den Pointer, also die eigentliche Adresse zum Array.

Das bringt bei der Stringbehandlung schonmal einige Vorteile gegenüber C.
Und natürlich bietet D auf eine eigenen Alternative zur klassischen Printf Funktion an, nämlich die writef Funktion und Programmierer wird empfholen diese zu nehmen, daß diese die Merkmale von D kennt.





…und C++09 wird den Vorsprung, den D bei ein paar Features haben mag, schrumpfen lassen und es in ein paar anderen Bereichen völlig hinter sich lassen.

Die Fallstricke werden bei C++ aufgrund der Abwärstkompatibilität zu altem Quellcode immer erhalten bleiben.

Oder hat sich der Vergleich von Structs mit C++09 irgendwie verbessert?



Sollen wir einen neuen Thread eröffnen?

Ich habe nichts dagegen.
Aber dann bitte in diesem Unterforum, nicht im Programmierforum.



(Achja: Der Name ist auch schrecklich. Wenn man bei Google nach D-Zeug sucht bekommt man erstmal tausend Ergebnisse mit D, die nicht das geringste damit zu tun haben :D)

Ja, das ist einer der wenigenden störenden Dinge von D, man findet nur sehr schwer etwas.
Deswegen sollte man bei Suchanfragen immer ein "Programming Language" oder "Programmiersprache" hinzufügen und schon gibt es tausende Links zu D.

Eventuell wäre ein Name wie D++ besser gewesen, aber das ergibt natürlich keinen logischen Sinn, da es kein D vor D++ gab.


Ein anderer Punkt der nicht so toll von D ist und der auch andere C Syntax typische Sprachen wie C++, Java, C# etc. betrifft ist die Notwendigkeit von
geschweiften Klammern.

Das hätte man eventuell so wie in Python durch Whitespace Zeichen oder ähnliches besser lösen können, denn damit verdreht man sich bei einer deutschen Tastatur nicht ständig die Finger und hat weniger Tipparbeit.

Gast
2008-12-19, 21:30:50
…und C++09 wird den Vorsprung, den D bei ein paar Features haben mag, schrumpfen lassen und es in ein paar anderen Bereichen völlig hinter sich lassen.


Ganz gewiss nicht.

Allein wenn ich an dieses Beispiel denke:
http://www.digitalmars.com/d/2.0/cpptod.html#metatemplates

Und auf eine Aufnahme der entsprechenden Funktion aus der Boost Library in die STL durch C++09 annehme, dann wird der zu schreibende Code zwar im Vergleich zum vorherigen reinen C++ Code ein klein bischen kleiner, aber
im Vergleich zum D Beispiel weder übersichtlicher noch leichter verständlicher und der D Code ist immer noch kürzer und bedeutet weniger Typarbeit.

Wenn das alles ist, was C++09 mitsich bringt, dann muß sich D vor C++09 keineswegs fürchten.


Wenn ich bei einem SW Projekt die freie Wahl der Programmiersprache habe,
dann werde ich auf jedenfall die nehmen, mit der ich weniger Tipparbeit habe, leichter zu wartenden Code beinhaltet und mit der ich schneller ans Ziel gelange und da ist ganz klar momentan D in Fürhung, wenn man mal die VM Sprachen Java und C# außen vor läßt.

Gast
2008-12-19, 21:31:48
Hier noch ein lesenswerter Artikel über C++ und D:

"Imperfect C++ and more perfect D"
http://www.prowiki.org/wiki4d/wiki.cgi?PerfectD


Ach ja, ein Mod sollte den Thread vielleicht doch aufsplitten.

Gast
2008-12-19, 22:46:15
Vielleicht sollte man noch in den Titel das Wort Programmiersorache dazuschreiben, damit auch sofort klar ist was gemeint ist.

Ein Vorschlag wäre z.b:
C++ 0x vs. Programmiersprache D

C++ ist in der Regel ein selbstläufer, braucht IMO also kenne extra Kennzeichnung, aber bei D kann das schon ganz anders aussehen.

Coda
2008-12-19, 22:55:49
Ganz gewiss nicht.
Was Metaprogrammierung angeht hat D jetzt schon nichts mitzureden, von daher bist du raus.

Wenn das alles ist, was C++09 mitsich bringt, dann muß sich D vor C++09 keineswegs fürchten.
Ist es NICHT. Das habe ich oben aber auch schon geschrieben.

http://en.wikipedia.org/wiki/C++0x

Oder hat sich der Vergleich von Structs mit C++09 irgendwie verbessert?
Ich hatte noch keinen einzigen Fall wo das relevant gewesen wäre. Man kann auch vieles konstruieren. Es ist ja insofern abgesichert, dass operator=() auf structs gar nicht standardmäßig definiert ist.

Die ganzen D-Resourcen sind doch unglaublich einseitig. Das beginnt schon mit der Digital-Mars-Seite. Der Vergleich zu anderen Sprachen ist ein schlechter Scherz.

Was viel mehr Kopfzerbrechen bereitet sind solche Dinge wie dass ein std::vector seine Speicherposition ändern kann wenn man ihn in der Größe ändert. Da muss man wissen, dass man Offsets und nicht Pointer speichern muss als Referenz darauf.

Gast
2008-12-20, 23:27:05
Interessante Diskussion.
D ist n netter Ansatz, dennoch ist immer Vorsicht geboten wenn jemand einenv ermeintlichen Messias beschwört.
Es ist zwar wohl wahr dass sich nicht zwangsläufig (sogar eher elten) das durchsetzt was technisch überlegen ist, sonder eher was sich besser verkaufen lässt, das bedeutet aber nicht dass mal eben einer die perfekte Programmiersprache erschaffen kann. Das meiste von alledem ist hochgradig subjektiv.
Ich z.B. mag C++ nicht wirklich. Klar es ist mächtig und die native Programmiersprache der meisten Betriebssysteme und plattformen, die Menge an Zusatz-Bibliotheken ist beispiellos, aber ich muss es deswegen dennoch nicht lieben.
Ich z.B. stehe mehr auf Ruby. Kompakt, ausdrucksstark und in manchen Belangen eine komplett andere Schiene als C/D++, Java, C# und Konsorten.
Javascript und seine Verwandtschaft ist ebenfalls nett. Man packe eine Funktion in eine Variable und reiche sie herum. Ohne große deklarierungen oder Verrenkungen beim Zugriff.
Aber das ist meine eigene Meinung. Was sich durchsetzt, ist eine ganz andere Sache.
Nebenbei ist Geschwindigkeit hochgradig relativ. Wir leben in Zeiten wo die Hardware für die meisten Anforderungen längst schnell genug ist (Dewegen hat Intel höchstselbst ja Probleme mit dem core2-absatz, seit es die Atoms gibt, und das wo ein Atom einem Core2 nicht im Ansatz das Wasser reichen kann.)
Natürlich sind Games etc. immer ein Fall wo man nicht genug Power haben kann, aber sogar dort denke ich wird über kurz oder lang eher die Power der Grafikkarte der Punkt sein, als die Sprache in der man die Engine implementiert.

Auch sind die "indirekten" wie C# und Java nicht mehr so lahm wie man gerne liest. Moderne JITer optimieren sehr stark und sind gerade bei länger laufenden Anwendungen nicht viel langsamer als C++. Aber das ist eigentlich gar nicht der Punkt.
Nur weil der Intel-Compiler bei SPEC und Co. manches auto-vektorisiert weil die SSE-Einheiten besser sind als die FPU, ist das noch lange nicht de reinzige "ordentliche" Compiler. Bei Realworld-Anwendungen gibts deutlich weniger Fälle wo das funktioniert. Zudem sind nicht alle Compiler-Optimierungen auf allen Plattformen gut. Ist ja auch logisch, was interessiert es Intel wie der Code auf den 20% AMD-Prozessoren da draußen performt...
Fakt ist, am wichtigsten sind die Algorithmen und architektonische Entscheidungen, nicht irgendwelche Compiler, Programmiersprachen oder geschweifte Klammern....
Tschuldigung wenn ich wie ein Oberlehrer klinge, aber derartige diskussionen finden sich doch tausendfach, jeden Tag im Internet und keine kommt zu einem Schluss....
Also schlage ich vor Ihr nutzt die Vorweihnachtstage und besorgt noch ein paar Geschenke usw. Und streitet euch nicht um des Kaisers Bart ;)
Wer weiß, vielleicht kennt in 20 Jahren keiner mehr C oder C++ und wir klingen wie alte Opas wenn wir darüber philosophieren.
Übrigens vergleicht man keine Structs... man nimmt einfach Klassen! ;)

grüßchen
ich

Krishty
2008-12-20, 23:57:27
Klassen sind auch nur structs mit default-privacy ;)

Der Vergleich mit den structs ist aber wirklich ein einziger Witz. Zumal bei Klassen die Bedeutung ihrer Member im Programmkontext relevant ist, nicht das exakte Bitmuster…

…und dass Vergleiche von NaNs false ergeben ist ein Feature, kein Bug -.- An der Stelle kommt dann wirklich die Scheiße in den Ventilator.

=Floi=
2008-12-21, 00:26:54
zitat
Für den Gamecode kann man ja gerne etwas anderes verwenden.
ist das bezogen auf die programmierer, oder auf die programmiersprache. könnte man wirklich zwei sprachen mischen?
Bei normalen anwendungen ist es ja logisch, aber wie soll ich mir soetwas bei games vorstellen?

Krishty
2008-12-21, 00:35:33
DLLs?
Davon benutzt doch eh jedes Game zig Mal soviele wie fürs Release nötig wären ;)

Gast
2008-12-21, 03:47:48
zitat
Für den Gamecode kann man ja gerne etwas anderes verwenden.
ist das bezogen auf die programmierer, oder auf die programmiersprache. könnte man wirklich zwei sprachen mischen?
Bei normalen anwendungen ist es ja logisch, aber wie soll ich mir soetwas bei games vorstellen?


Also mehere Programmiersprachen sind bei Spielen doch schon längst Alltag, wenn man an die ganzen Scriptsprachen denkt, die in die Engines eingebettet werden.

Außerdem gibt es noch genug Spiele die in C geschrieben werden und wenn dann Technologie von Außen eingekauft wird, dann exisitiert die vielleicht in C++ oder umgekehrt.