C Digital Mars D Klönthread

jhoech

Banned
Registriert
Okt. 2009
Beiträge
476
Hallo allerseits, ich wollte mich mal umhören, was bei euch so die Gedanken zum Thema D (Digital Mars D), der offiziellen Fortentwicklung von C, sind.
Prinzipiell fixt mich der Gedanke an, Verbesserungen aus Java, wie z.B. Garbage Collection (und auch andere) nach C hineinzunehmen und unter Anderem damit ein zweites, besseres C++ zu schaffen, auch wenn eine Abhängigkeit zu C nicht zu leugnen bleibt. Seit 2007 gibt es ja nun sogar schon D2. Im ganzen ist die Idee D jedoch schon 10 Jahre alt, wie ich gelesen habe. Ich habe nicht den Eindruck, dass das Projekt auf viel Gegenliebe stößt, auch nicht hier im Forum.
Dem wirke ich nun entgegen, um mehr Klarheit zu schaffen, was ich da denken soll (siehe auch einleitender Satz).

Was ist D? Ist es eine Randerscheinung? Wie kommt stattdessen so etwas wie C# in der selben Zeit spielend hoch?
 
Seit wann ist D die offizielle Fortentwicklung (= Weiterentwickelung?) von C? :freak:
 
A-B-C-D-... ;) + Systemprogrammierung + übernimmt die meisten Sprachmittel der Sprache C,... da kommt doch schon was zusammen...
 
D ist KEINE offizielle weiterentwicklung c. es ist ein projekt, das von einem entwickler von c++ maßgeblich vorangetrieben wurde und ist wenn, dann eine weiterentwicklung von c++. aber keine offizielle in dem sinne, dass irgendeine institution, welche c++ standardisiert d als die weiterentwicklung vorantreibt.

zu D selbst, es hat viele gute verbesserungen, aber auch sachen die meiner meinung nach in einer solchen sprache nicht hineingehören. garbage collection ist da sowas. in einer sprache ale java meinetwegen, aber sowas gehört auf keinen fall in eine high performance sprache ala c++ oder D hinein.

p.s. wegen C#, das ist deswegenso schnell verbreitet worden, weil es von MS gepusht wurde und leicht abhängikeiten für entwickler unter windows geschaffen wurden.
 
Wie dem auch sei. Ich hatte neulich das Problem High-Performance zu brauchen, QBasic auf DosBox war dann doch zu langsam. Dabei komme ich aber schon aus der wie ich finde etwas verwöhnten GarbageCollectionManagedCode-Ecke. D sah mir da wie eine echt brauchbare Alternative aus. Es kompilierte auf Anhieb bei mir, und ein mein kleines Hallo-Welt-Programm war schnell nativ kompiliert. Das zusammen mit den genannten "Vorzügen" und "Verbesserungen" rockte aus meiner Sicht schon.

D basiert wie meine eher auf C und nicht auf C++. So kann es doch eigentlich keine Weiterentwicklung von C++ sein? Vielleicht hast du aber recht und man sollte es dennoch eigenständig sehen:

Its focus is on combining the power and high performance of C and C++
http://www.digitalmars.com
 
nein, D basiert nicht auf C, sondern auf C++. da c++ selbst auf C basiert ist natürlich C auhc eine grunlage für D. aber D hat das gesamte konzept der objektorientierten programmierung von c++ übernommen, mit einigen veränderungen, z.b. unterstützt D keine polymorphe vererbung (weil das angeblich zu kompliziert für programmierer ist) und hat stattdessen ala java interfaces eingeführt.
 
Dese schrieb:
z.b. unterstützt D keine polymorphe vererbung

Das sind halt ingenieurische Erkenntnisse gewesen, wie eben die Handhabung des Speichers. Das sind wie ich meine Verbesserungen. Ebenso wie in Java das goto raasflog, was allerdings in D bestand hat wie ich sehe.
 
Ob das wirklich eine Verbesserung ist, sei mal dahingestellt. Ich persönlich bin noch nie einer Situation gewesen, in der ich unbedingt Mehrfachvererbung brauchte, aber ich habe schon von einigen Programmierern gehört / gelesen, daß in Fällen, wo man es WIRKLICH braucht, es echt Sch**** ist, wenn man die Option nicht hat.
 
Du kommst technisch nie in die Situation ploymorphe Vererbung zu brauchen.
 
jhoech schrieb:
Das sind halt ingenieurische Erkenntnisse gewesen, wie eben die Handhabung des Speichers. Das sind wie ich meine Verbesserungen. Ebenso wie in Java das goto raasflog, was allerdings in D bestand hat wie ich sehe.

woher nimmst du diese annahmen?

ich kann dir sagen, was der grund war, dass polymorphe vereerbung bei D nicht mitgenommen wurde. laut berichten der entwickler war der grund (mal ganz salop gesagt), dass die meisten programmierer sich bissle dämlich anstellen. mit polymorphe vererbung können die meisten nicht richtig umgehen und produzieren ineffizienten und buggy code.

die meisten beschneidungen von möglichkeiten werden in der regel gemacht, weil programmierer im zu leicht mist bauen.

im prinzip ist das ja auch ein guter grund, denn mist baut jeder programierer. und meist kann man probleme auch anders lösen. ich finde aber, dass interfaces nur ein halbgarer ersatz dafür ist. aber glücklicherweise wird polymorphe vereerbung nicht so viel benötig.

jhoech schrieb:
Du kommst technisch nie in die Situation ploymorphe Vererbung zu brauchen.
du kommst technisch nie in die situation objekte/klassen zu brauchen. geht doch auch alles in C.

das sind möglichkeiten, die einem erlauben bestimmte problemme besser/effizeinter zu lösnen. ich nutze polymorphe vereerbung rel. oft. für mich ist es eines der stärksten und hilfreichsten möglichkeiten die mir in c++ geboten werden.
 
Jetzt hört mal auf mit dieser "polymorphen" Vererbung. Ob Vererbung polymorph ist, hat nix damit zu tun, von wie vielen Basisklassen sich eine Klasse ableitet. Jede Klasse, die mindestens eine virtuelle Methode enthält, ist polymorph.
 
antred schrieb:
Jetzt hört mal auf mit dieser "polymorphen" Vererbung. Ob Vererbung polymorph ist, hat nix damit zu tun, von wie vielen Basisklassen sich eine Klasse ableitet. Jede Klasse, die mindestens eine virtuelle Methode enthält, ist polymorph.

wer hat denn das behauptet?

polymorphie ist wenn zur laufzeit erst enschieden wird, welcher typ einer methode benutzt wird.
wenn eine klasse virtuelle methoden erbt nennt man das polymorphe vereerbung.

das, wofür man das bracuht wird in java z.b. über "interfaces" gelöst, so auch in D.

edit: und nein, allein die tatsache, dass ein klasse virtuelle methoden hat macht noch keine polymorphie! da gibt es nämlich nichts was "poly" ist, solange auch keine veerbung stattgefunden hat.
 
Moment, ich zweifele ebenfalls an, dass das Konstrukt der Mehrfachvererbung hier richtig rüberkommt:

Nehmen wir an wir haben einen Pinsel, dieser ist gleichzeitig auch ein Zeichengerät, er erbt also von Zeichengerät. Die Leinwand erbt aber nie und nimmer von Zeichengerät, das wäre sachlich falsch. Das geht nicht. Stattdessen vielleicht von Objekt, wie evtl. auch Zeichengerät. Objekte wie Stiel und Borsten des Pinsels wäre Attribute bei mir, die ebenfalls nicht von Zeichengerät erben würden sondern wiederum von Objekt o.ä.

Interfaces sind da anders, wie ich sie sehe: Sie beschrieben Schnittstellen. Ein Pinsle ist z.B. bewegbar und wechselbar, ebenso wie die Leinwand kann er natürlich mehrere dieser Attribute besitzen.

Somit unterstütze ich den Gedanken aus Java voll und ganz. Java hat eben anderer Fehler, aber auch in C sollte man die Mehrfachvererbung weglassen meine ich, siehe oben, da man sie nicht braucht. Also unterstütze ich auch wieder eher D. Braucht es das goto? Das gehört inzwischen auch auf den Müll der Geschichte finde ich.
 
Dese schrieb:
wer hat denn das behauptet?


Du zum Beispiel, mit Aussagen wie

Dese schrieb:
ich kann dir sagen, was der grund war, dass polymorphe vereerbung bei D nicht mitgenommen wurde

Ganz offensichtlich gibt es Vererbung in D, also gehe ich mal davon aus, daß du mit "polymorphe vereerbung" eigentlich Mehrfachvererbung meintest, welche es in D in der Tat nicht gibt.

Dese schrieb:
edit: und nein, allein die tatsache, dass ein klasse virtuelle methoden hat macht noch keine polymorphie! da gibt es nämlich nichts was "poly" ist, solange auch keine veerbung stattgefunden hat.

Klassisches Strohmannargument. Einer Klasse eine virtuelle Methode zu spendieren, aber sie dann nicht in einer Vererbungshierarchie zu verwenden, ist ja wohl endlos dämlich.
 
Zurück
Oben