Die Programmiersprache D



  • Ich wette es sind schon etlich Bugs entstanden weil jemand

    foo = map[key];
    

    geschrieben hat und unerwarteter weise einfach mal ein frisch konstruiertes Objekt zurückgegeben wurde statt dass derjenige einen Fehler erhalten hätte.



  • kartoffelsack schrieb:

    RAII gibts nicht, oder?

    In Wikipedia steht das es RAII in D gibt:
    http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization



  • GPC schrieb:

    Das komplette PDF kann man hier downloaden.

    ...
    So, weiter geht's hier 🙂

    Das PDF Dokument ist nicht mehr verfügbar.



  • PDF schrieb:

    GPC schrieb:

    Das komplette PDF kann man hier downloaden.

    ...
    So, weiter geht's hier 🙂

    Das PDF Dokument ist nicht mehr verfügbar.

    Liegt am Hoster, der da gerade Probleme macht.



  • Cool, echt geil geschrieben :>
    Gibt es eigentlich schon ordentliche IDEs für D?

    Edit: Gibt es eigentlich auch this->-Zeiger und würdest du diese empfehlen, oder nicht? In deiner PDF verwendest du diese ja nicht.

    Gruß



  • theliquidwave schrieb:

    Gibt es eigentlich schon ordentliche IDEs für D?

    Jein 😉 http://stackoverflow.com/questions/50179/an-ide-for-d
    Aber der echte Programmierer nimmt emacs oder vim, ist doch klar 😉

    Edit: Gibt es eigentlich auch this->-Zeiger

    Klar gibt es den.

    und würdest du diese empfehlen, oder nicht?

    Das ist eine Frage des persönlichen Stils und der jeweiligen "Kultur" der Sprache. In C# ist es recht verbreitet, immer this zu benutzen, in C++ weniger.
    Inzwischen verwende ich immer den this-Zeiger, wenn ich auf Instanzvariablen zugreife. Und zwar um sie deutlich von den lokalen/statischen/whatever-Variablen abzuheben. Andere finden das total hässlich und meinen, es müllt den Code zu. Ist Ansichtssache 😉
    Schwachsinn ist allerdings, dass es von der Performance schlechter wäre, wenn man this->member anstatt nur member schreibt.
    Also, such's dir aus 😉



  • Okay. Dankeschön :>
    Ein kleiner Hinweis: auf Seite 16 ist im ersten Satz ein kleiner Tippfehler 😉

    Edit: Deine Arbeit ist echt geil, kann man super zum umsteigen empfehlen. Auf deutsch fand ich nichts besseres und es ist gut zu lesen 😃 </schleimscheiß>

    Edit2: Ich kann diese IDE nur empfehlen! http://d-ide.sourceforge.net/

    Gruß



  • So, ich grabe den Thread mal aus.

    Habe ne Weile D programmiert und es scheint eine eierlegende Wollmilchsau zu sein. Für jedes Problem gibt es eine verdammt elegante Lösung.
    D lässt in meinen Augen C++ komplett im Regen stehen.

    Warum interessiert sich kein Schwein für D?



  • Vorweg: Ich habe in D noch nie programmiert.

    D sieht mir in vieler Hinsicht sehr schön aus. Im Grunde finde ich, dass D so ist, wie C++ sein sollte, mit nur einem großen Nachteil: Der Garbage-Collector.



  • Marthog schrieb:

    Vorweg: Ich habe in D noch nie programmiert.

    D sieht mir in vieler Hinsicht sehr schön aus. Im Grunde finde ich, dass D so ist, wie C++ sein sollte, mit nur einem großen Nachteil: Der Garbage-Collector.

    Für viele Einsatzfälle halte ich den GC für einen großen Vorteil.

    In b4 Kernel/Embedded.



  • Ich hab mich schon lange nicht mehr mit D beschäftigt.. aber zumindest zum Zeitpunkt, als ich dieses Arbeit geschrieben hab, war es halt so:
    - Es macht vieles besser als C++, aber nur etwas und nicht bahnbrechend
    - Die Unterstützung durch bedeutende Hersteller (z.B. Microsoft) hat gefehlt und es gab kaum wirklich gute Tools, Libraries etc. Die komplette Infrastruktur hat gefehlt.



  • Ethon schrieb:

    Für viele Einsatzfälle halte ich den GC für einen großen Vorteil.

    Ich finde die Argumente ja ganz vernünftig, aber will den gc nur als Alternative, also z.B. so dass der gc nur mit einer Extension genutzt wird oder man ihn nur mit bestimmten pointern nutzen kann, also quasi Unterschied zwischen new und gcnew.



  • Marthog schrieb:

    Ethon schrieb:

    Für viele Einsatzfälle halte ich den GC für einen großen Vorteil.

    Ich finde die Argumente ja ganz vernünftig, aber will den gc nur als Alternative, also z.B. so dass der gc nur mit einer Extension genutzt wird oder man ihn nur mit bestimmten pointern nutzen kann, also quasi Unterschied zwischen new und gcnew.

    Konkretes Beispiel aus dem echten Leben in dem du keinen GC möchtest?



  • Ethon schrieb:

    Marthog schrieb:

    Ethon schrieb:

    Für viele Einsatzfälle halte ich den GC für einen großen Vorteil.

    Ich finde die Argumente ja ganz vernünftig, aber will den gc nur als Alternative, also z.B. so dass der gc nur mit einer Extension genutzt wird oder man ihn nur mit bestimmten pointern nutzen kann, also quasi Unterschied zwischen new und gcnew.

    Konkretes Beispiel aus dem echten Leben in dem du keinen GC möchtest?

    Immer, wenn ich keinen brauche. Ich mag jetzt nicht 99.999% aller Programmieraufgaben auflisten. 🤡



  • Immer, wenn ich keinen brauche. Ich mag jetzt nicht 99.999% aller Programmieraufgaben auflisten. 🤡

    Und der Grund dafür ? Wenn du was wirklich performancekritisches machst kannst du ihn ja immernoch abschalten...
    Aber wozu freiwillig mehr Arbeit machen als nötig ? 😕



  • DarkShadow44 schrieb:

    Immer, wenn ich keinen brauche. Ich mag jetzt nicht 99.999% aller Programmieraufgaben auflisten. 🤡

    Und der Grund dafür ? Wenn du was wirklich performancekritisches machst kannst du ihn ja immernoch abschalten...
    Aber wozu freiwillig mehr Arbeit machen als nötig ? 😕

    Mehr Arbeit?
    Ich habe mit javaeskem GC und verspäteten Destruktoren *deutlich* mehr Arbeit als mit sofort zuschlagenden Destruktoren wie in C++/Perl.
    Wenn der GC hingegen nur für den Speicher zuständig ist und hinter sofort zuschlagenden Destruktoren herräumt, ist es kein Unterschied.
    Ich sehe nirgends mehr Arbeit beim Verzicht auf GC (außer vielleicht diesem Fall mit den lock-free queues).



  • Und selbst da ist es fraglich ob malloc/free Speicherverwaltung schneller ist.



  • Ethon schrieb:

    Und selbst da ist es fraglich ob malloc/free Speicherverwaltung schneller ist.

    Dann läßt man den Code wie gehabt, macht free wirkungslos und tut einen GC nur für den Speicher drunter, siehe "Wenn der GC hingegen nur für den Speicher zuständig ist und hinter sofort zuschlagenden Destruktoren herräumt"

    Also MS schreibt auf manchen Seiten, der GC viel schneller ist und (oh, wie toll ist .net!), auf anderen, daß man den Quatsch aufgibt (wegen Handys erstmal) weil viel zu lahm (oh, wie untoll ist .net!). Wem glaubst Du mehr, MS oder MS?



  • Deinen eigenen Allokator kannst du doch trotzdem schreiben? Verbietet dir ein GC ja nicht, dem ist ja egal was mit dem Speicher passiert den er dir gibt.

    Das Argument mit den Destruktoren finde ich auch komisch.
    Viele Destruktoraufrufe fallen sowieso weg nachdem Destruktoren nicht mehr für die Speicherfreigabe verwendet werden.
    Bei vielen anderen ist es egal wann die Destruktoren aufgerufen werden.
    Und sollte das mal nicht egal sein (was wohl sehr selten sein sollte) kann man immer noch mit scope(exit) dafür sorgen dass am Ende des Scopes zerstört wird.


Log in to reply