PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C versus 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.