Ist man mit der Programmiersprache D 2.0 anstatt C++ (C++11) schneller am Ziel?



  • kkaw schrieb:

    Wie auch immer: Danke Ethon für Deine Mühen! Hab ja was gelernt. So richtig dolle beeindruckt von D bin ich aber immer noch nicht.

    Hast du dir denn den Rest von D angeschaut? Das Template-System, (Template-) Mixins etc? 😉



  • Ethon schrieb:

    kkaw schrieb:

    Wie auch immer: Danke Ethon für Deine Mühen! Hab ja was gelernt. So richtig dolle beeindruckt von D bin ich aber immer noch nicht.

    Hast du dir denn den Rest von D angeschaut? Das Template-System, (Template-) Mixins etc? 😉

    Ich bin öfters diverse Feature-Listen durchgegangen. Nicht, weil ich geil auf sowas bin, sondern weil ich nichts anderes gefunden habe, was mir die Konzepte hinter D erklären will. Das ist IMHO schon ein schlechtes Zeichen. Zum Kauf von Alexandrescus Buch war ich zu geizig. Ich mochte sein "Modern C++ Design" schon nicht besonders und ich halte es für wahrscheinlich, dass mir sein D-Buch auch nicht gefallen würde. Ich hab' mir viel zu D angeguckt, was man sich so angucken kann, ohne sich einen Compiler zu organisieren und selbst zu probieren. Dafür hat es dann einfach nicht gereicht. D hat bei mir die Hürde, interessant genug zum Ausprobieren zu sein, nicht geschafft. Das Material, was online ist, ist für mich einfach nicht überzeugend.



  • Ethon schrieb:

    Man erstellt einfach eine lokale Kopie, invalidiert das Original und gibt die Kopie zurück. Wo siehst du denn da das Problem?

    Oh, ich dachte, release würde ein T* zurück geben. Dann hätte es zwischendurch einen rohen Zeiger gegeben. Das fand ich blöd, dass man zwischendurch mal den rohen Zeiger aus einem Unique!T hätte rausholen müssen, um ein Unique!T von A nach B zu kriegen. Aber da hatte ich mich verguckt, release gibt ja ein rvalue Unique!A zurück. Es erfüllt damit die Funktion von std::move in Form einer Elementfunktion.



  • Aus einem anderen Thread:

    Ethon schrieb:

    Wow Arcoth, ich als Anfänger habe noch nie so eine tolle Lösung gesehen. 👍
    Kannst du mir mal das mit diesem Template-Dingens erklären? Noch nie gemacht. 🙂

    Bemerkenswert. Vor diesem Hintergrund steht Deine Aussage von vorher in einem anderen Licht:

    Ethon schrieb:

    Naja, ein GC erlaubt weit eleganteren, fehlerfreieren und oft performanteren Code. Macht imho schon Sinn diesen primär zu nutzen und nicht die ganze Zeit ein Auge auf Speicherverwaltung haben zu müssen.

    Das ist eine Haltung von Dir, die mich an meine erinnert, bevor ich von Java nach C++ gewechselt bin. Ich dachte, dass das ohne GC sehr nervig werden würde. Und dann habe ich RAII zu schätzen gelernt. Ich vermisse den GC nicht. Und ich mache mir auch beim Programmieren wenig Sorgen um die Speicherverwaltung. Der Trick bei RAII ist, diese Sorgen zu delegieren. Wenn Du den GC in C++ vermisst, dann machst Du vielleicht etwas falsch.



  • Ach komm bitte, irgendjemand muss doch kapieren dass das ironisch gemeint war.
    Er hat einem Anfänger der mit std::string überfordert ist eine generische Lösung im Stil der Standardbibliothek hingeworfen und ich habe die Rolle des Anfängers eingenommen damit er sieht was das Problem an seiner Antwort war - nur ist das nicht angekommen, er hat es mir stattdessen erklärt. Naja, hoffentlich hilft es dem OP.

    Ich programmiere C++ (privat) seit gut 8 Jahren und habe vor 4 Jahren das erste Mal eine Sprache mit einem GC angefasst.



  • Ethon schrieb:

    Ach komm bitte, irgendjemand muss doch kapieren dass das ironisch gemeint war.

    Dass das ironisch gemeint sein könnte, ist mir durch den Kopf gegangen. Ironie funktioniert nur im Web so schlecht, wenn man die Leute kaum kennt. 🙂 In "unserem Fall" hat deine GC-Bemerkung da aber prima zu gepasst. War die jetzt auch ironisch? 😃

    Ethon schrieb:

    Ich programmiere C++ (privat) seit gut 8 Jahren und habe vor 4 Jahren das erste Mal eine Sprache mit einem GC angefasst.

    Ok, dann frage ich mich jetzt, wie Dein C++ aussieht, was du seit 8 Jahren schreibst, wenn Du so eine Position zum Thema Garbage Collection hast.



  • [quote="kkaw"Ok, dann frage ich mich jetzt, wie Dein C++ aussieht, was du seit 8 Jahren schreibst, wenn Du so eine Position zum Thema Garbage Collection hast.[/quote]

    Warum? Ganz normalen idiomatischen C++ Code halt, jede Resource als RAII-Objekt gewrappt.

    Trotzdem gibt's genug pro und kontra Punkte für einen GC und ich finde ihn in vielen Fällen einfach sinnvoller (eigentlich immer wenn Speicher die Resource ist), kann man sich ewig darum streiten. 😉



  • Bin gerade auf diese zum Thema passende programmers.stackoverflow.com-Seite gestoßen -- wurde natürlich schon geschlossen. 😃

    Aus der akzeptierten Antwort:

    [...] Note that C++ has some type system warts (e.g. non-transitive const, requiring iterator as well as const_iterator) that make it quite ugly, but while C++'s type system is a little wrong at parts, it doesn't stop you from getting work done like D's sometimes does. [...]

    Meiner Ansicht nach ist "non-transitive const" in C++ bzgl Zeiger genau richtig. Wenn man das nämlich anders ansetzt, kommt man zu so bescheuerten Effekten wie folgende

    There are quite a few problems with the type system in D at the moment, which appear to be oversights in the design. For example, it is currently impossible to copy a const struct to a non-const struct if the struct contains class object references or pointers due to the transitivity of const and the way postblit constructors work on value types. Andrei says he knows how to solve this, but didn't give any details.

    Halllohhooo! "transitive constness" ist ein Fehldesign! Zumindest will man so'was nicht aufgezwungen haben! Selektiv wär das ok. Es macht bei unique-ownership-Zeigern schon Sinn. In D bräuchte man so etwas dringender als in C++, weil ja in D die "A ist ein Teil von B"-Sache für Klassen-Objekte emuliert werden muss (sind ja nur "Referenztypen"). In C++ hast Du "richtige Subobjekte", wo das const natürlich richtig propagiert wird.



  • Ist doch klar: Alles, was in D anders ist, ist besser.



  • volkard schrieb:

    Ist doch klar: Alles, was in D anders ist, ist besser.

    Sagt wer? Also außer du im Sarkasmus?



  • Ethon schrieb:

    volkard schrieb:

    Ist doch klar: Alles, was in D anders ist, ist besser.

    Sagt wer? Also außer du im Sarkasmus?

    Hatte den Eindruck, das sei der Tenor auf
    http://en.wikipedia.org/wiki/D_(programming_language)
    http://dlang.org/faq.html
    und Deinen Postings.



  • Weiß warum schrieb:

    volkard meint, ihm ist das zu kompliziert.



  • Ethon schrieb:

    void foo()
    {
        auto a1 = new A(), a2 = new A();
        scope(exit) destroy(a1); // a1 wird auf jeden Fall am Ende des Scopes zerstört.
        scope(failure) destroy(a2); // a2 wird nur zerstört wenn der Scope nicht fehlerfrei verlassen wird.
        mightThrow();
    }
    

    Das würde man btw so machen, erst wieder etwas Neues über D gelernt. 🙄

    void foo()
    {
        scope A a1 = new A();
        mightThrow();
    }
    

Anmelden zum Antworten