D inzwischen eine echte Alternative?



  • Vor einiger Zeit gab es hier mal eine Diskussion zum Thema D. D hat sich seitdem weiterentwickelt (ich selbst habe auch einige Vorschläge gemacht, vor allem, was Templates angeht).
    Inzwischen sieht die Sprache für micht ganz brauchbar aus. Ende März soll Version 1.0 fertig sein. Bereits jetzt sind Dinge, wie Template-Templates, die es zuvor nur in C++ gab kein problem mehr (seit Version .77).

    Was ist eure Meinung zur Sprache?



  • Was kann sie, was C++ nicht kann, oder was soll sie besser koennen?

    mfg
    v R



  • Guten Nachmittag,
    Ist das diese Sprache:
    http://www.digitalmars.com/d/
    Und was für Vor/Nach teile hat sie?

    MfG Max



  • Also ich sehe bei D keinen wirklichen Vorteil gegenüber C++. Bei dem Vergleich auf der Homepage sieht es eher so aus, als wären die meisten Vorteile einfach, dass einige Dinge aus der Standard Library in die Sprache integriert wurden. Aber ob das so sinnvoll ist oder Dinge für die es einfache Workarrounds gibt vereinfacht wurden. Deswegen will ich nicht alles umstellen müssen und mich einer proprietären Sprache anvertrauen.

    @Master_Max
    http://www.digitalmars.com/d/comparison.html



  • Sowas find z.B. ganz gut:

    Slicing

    Slicing an array means to specify a subarray of it. For example:
    int[10] a; declare array of 10 ints
    int[] b;

    b = a[1..3]; a[1..3] is a 2 element array consisting of
    a[1] and a[2]

    The [] is shorthand for a slice of the entire array. For example, the assignments to b:
    int[10] a;
    int[] b;

    b = a;
    b = a[];
    b = a[0 .. a.length];

    Array Copying

    int[3] s;
    int[3] t;

    s[] = t; the 3 elements of t[3] are copied into s[3]
    s[] = t[]; the 3 elements of t[3] are copied into s[3]
    s[1..2] = t[0..1]; same as s[1] = t[0]
    s[0..2] = t[1..3]; same as s[0] = t[1], s[1] = t[2]
    s[0..4] = t[0..4]; error, only 3 elements in s
    s[0..2] = t; error, different lengths for lvalue and
    s[0..2] = s[1..3]; error, overlapping copy
    s[1..3] = s[0..2]; error, overlapping copy

    So, for the expression:
    a[] = b[] + 3;

    the result is equivalent to:
    for (i = 0; i < a.length; i++)
    a[i] = b[i] + 3;



  • Was kann sie, was C++ nicht kann, oder was soll sie besser koennen?

    Naja, es sind viele Kleinigkeiten. Sie hat 'ne foreach-Schleife (std::for_each ist mit einer echten Schleife einfach nicht vergleichbar). Methoden mit nur einem Parameter können statt wie gewohnt mit dem ()-Operator auch mit dem =-Operator aufgerufen werden und Methoden ohne Parameter auch ohne jeglichen Operator. Somit können sie als Properties dienen. Es gibt einen Garbage Collector. Trotzdem ist es kein Problem Klassen zu schreiben, die einen Destruktor besitzen, der aufgerufen wird, wenn die Variable den Scope Verlässt. Es gibt ein offizielles typeof. ... Die neue Template-Synthax gefällt mir sogar bessser, als die von C++.
    Es sind eben viele Kleinigkeiten, die sich aufsummieren.



  • Also ich sehe bei D keinen wirklichen Vorteil gegenüber C++. Bei dem Vergleich auf der Homepage sieht es eher so aus, als wären die meisten Vorteile einfach, dass einige Dinge aus der Standard Library in die Sprache integriert wurden. Aber ob das so sinnvoll ist oder Dinge für die es einfache Workarrounds gibt vereinfacht wurden. Deswegen will ich nicht alles umstellen müssen und mich einer proprietären Sprache anvertrauen.

    Du meinst assoziative Felder? Das sowas in der Sprache ist hat mich auch nicht sonderlich überzeugt. Die sehr bequemen Unit-Tests und Invarianten find ich da deutlich entscheider. Punkte wie "C-style syntax" ud "Direct access to C" find ich z.B. total bescheuert.



  • Was ich klasse fände, wenn die Multithreading in den Standard aufnehmen würden
    und vllt. noch reguläre Ausdrücke.



  • Naja, es sind viele Kleinigkeiten. Sie hat 'ne foreach-Schleife

    Als großer Fan von foreach-Schleifen möchte ich mitteilen, dass es mittlerweile gute foreach-Hacks für C++ gibt. Einer davon wurde im CUJ Nov 2003 beschrieben und diesen gibt es mittlerweile auch in der BOOST-Filesection.
    Das sieht dann etwa so aus:

    std::list<int> int_list;
    BOOST_FOREACH( int &i, int_list )
    {
        i += 10;
    }
    
    int arr[10];
    BOOST_FOREACH(int& i, arr)
    {
        i += 10;
    }
    

    Das schöne daran ist, dass die Implementationen performancetechnisch an eine normale for-Schleife rankommen. Der Nachteil: Um foreach mit einem Built-in Array benutzen zu können, braucht man einen ordentlichen Compiler.

    Was mich allerdings ärgert: Ich war gerade dabei selbst ein foreach zu implementieren und hatte auch gerade den Durchbruch geschafft (endlich kein void* und keine dynamische Allokation mehr) und dann kam der Artikel 😞
    Genau die selben Techniken nur halt etwas professioneller aufgebaut (also die Boost-Version ist professioneller als meine - nicht andersherum). Glaubt mir doch keine Sau, dass ich auf die selben Ideen gekommen bin wie die C++ Auskenner.

    PS: Viele (die meisten?) Booster bevorzugen nachwievor boost::lambda (und Konsorten) und std::for_each.


Anmelden zum Antworten