Gebt doch endlich mal richtige Gründe gegen die Sprache D an!



  • muemmel schrieb:

    Hi,

    aus Sicherheitsgründen wäre eher Ada zu empfehlen.

    Gruß Mümmel

    Ada suckt im Vergleich zu D.

    Beweis hier:
    http://home.att.net/~jimmaureenrogers/AdaAdditionToDComparisonTable.htm



  • Konzeptionell ist D vermutlich in Ordnung, auch wenn manche andere Vorstellungen von der idealen Sprache haben. Für mich sind die Handhabbarkeit und die primären Anwendungsfelder wichtig, und da liegen entscheidende Schwachpunkte.

    Wie stellt man sich das eigentlich im Entwicklungsteam vor?
    Soll D die Sprachen C und C++ substituieren? Diese beiden Sprachen werden doch ebenfalls weiter entwickelt, können gleichzeitig aber auch auf einen gigantischen Fundus an Software zurück greifen, vor allem im GUI-, Netzwerk- und Mikroprozessorbereich.



  • Erhard Henkes schrieb:

    Wie stellt man sich das eigentlich im Entwicklungsteam vor?
    Soll D die Sprachen C und C++ substituieren? Diese beiden Sprachen werden doch ebenfalls weiter entwickelt, können gleichzeitig aber auch auf einen gigantischen Fundus an Software zurück greifen, vor allem im GUI-, Netzwerk- und Mikroprozessorbereich.

    Du kannst alle C Bibliotheken auch mit D nutzen.
    D ist dahingehend abwärtskompatibel.

    Natürlich hast du dann keine Kontrolle über Bufferoverflows und so Scherze, wenn die n der C Bibliothek stattfinden.



  • OK, mal ein konkreter und sehr einfacher Test:

    Das Programm zur Collatz-Folge:

    // Berechnung der "3n+1"-Folge (Collatz-Folge)
    #include <iostream>
    #include <limits>
    #include <string>
    #include "BigIntegerLibrary.h"
    
    using namespace std;
    
    void wait()
    {
      std::cin.clear();
      std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
      std::cin.get();
    }
    
    int main()
    {
      /*********************************************************** Eingabebereich ****************************/
      BigUnsigned element_limit(1000000) ;      // Maximum H(n)
      BigUnsigned element_print_limit(4103) ;    // Ausgabe nur, wenn H(n) > element_print_limit
    
      string s("10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000");               // Beginn der Berechnung bei start
      BigUnsigned start = easyStringToBI(s);
    
      s = "10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000";                    // Ende der Berechnung bei end
      BigUnsigned end = easyStringToBI(s); 
      /*********************************************************** Eingabebereich ****************************/
    
      for( BigUnsigned j = start; j < end; j++ )
      {
           BigUnsigned zahl = j ;
           BigUnsigned    i = 1 ;
           while( ( zahl != BigUnsigned(1) ) && ( i <= element_limit ) )
           {
                //cout << zahl << '\t';
                BigUnsigned rest = zahl % BigUnsigned(2);
                if( rest != BigUnsigned(1) )
                    zahl /= BigUnsigned(2) ;
                else
                    zahl = BigUnsigned(3) * zahl + BigUnsigned(1) ;
                i++;
           }
    
           if( zahl == BigUnsigned(1) )
           {
                if( i > element_print_limit )
                {
                    cout << "Startzahl: " << j;
                    cout << "\tAnzahl: "  << i << endl;
                }
           }
           else
           {
               cout << "Startzahl: " << j; 
               cout << "kein Resultat (Anzahl-Limit erhoehen)" << endl;
           }
    
           if( i > element_limit ) cerr << "Anzahl zu hoch" << endl;
      }
    
      wait();
    }
    

    In C/C++ benötige ich dazu einen Compiler wie Code::Blocks oder MS Visual C++ und die Bibliothek (Header-/Implementationsdateien) "BigInteger" (kostenlos aus dem Internet, ausreichend Alternativen bezüglich Handhabbarkeit und Geschwindigkeit).

    Wie sieht das nun konkret bei D aus?

    Compiler gibt es bei Digital Mars? http://www.digitalmars.com/d/download.html
    Wie sieht es mit einer kompekten IDE aus? (von Integration in Code::Blocks habe ich gehört, aber heute bekommt man MS VC++ 2008 Express kostenlos!).
    Woher bekomme ich eine "BigInteger" Bibliothek?



  • Erhard Henkes schrieb:

    Woher bekomme ich eine "BigInteger" Bibliothek?

    Die Frage verstehe ich nicht.

    Warum benutzt du die BigInteger Lib nicht einfach mit D?



  • Ein (Verständnis-)Problem das ich bei D habe: Welches Problem löst D denn? Ich meine reale Probleme und nicht Syntaxsdiabetes.



  • Da kannst du vermutlich lange auf eine Antwort warten. Das wissen die D Verfechter nicht mal selbst. Solche Diskussion sind leider ideologisch motiviert und nicht wirklich sachdienlich.

    @D Fan
    Du hast ausserdem ein grundlegendes Problem. Es geht nicht darum, Gründe gegen D anzugeben. Obwohl es da schon reichlich gibt. Es geht darum, trifftige Gründe für D zu finden. Und bis auf Syntaxzucker gibt es da keine.



  • groovemaster schrieb:

    Da kannst du vermutlich lange auf eine Antwort warten. Das wissen die D Verfechter nicht mal selbst. Solche Diskussion sind leider ideologisch motiviert und nicht wirklich sachdienlich.

    Nein, das Problem liegt eher an folgendem:
    Die Antwort werden C/C++ Coder, die die Fallstricke von C/C++ nicht kennen wollen, eh nicht verstehen.

    @ Tim

    Du kannst mit D nichts kaputt programmieren.



  • greez schrieb:

    Die Antwort werden C/C++ Coder, die die Fallstricke von C/C++ nicht kennen wollen, eh nicht verstehen.

    Dass wir uns hier auf einem Niveau bewegen, wo dies irrelevant sein sollte, ist dir doch hoffentlich bewusst?



  • greez schrieb:

    @ Tim

    Du kannst mit D nichts kaputt programmieren.

    Also sind D Kompilate per Definition Bugfrei? You made my day. Echt jetzt 🤡



  • groovemaster schrieb:

    greez schrieb:

    Die Antwort werden C/C++ Coder, die die Fallstricke von C/C++ nicht kennen wollen, eh nicht verstehen.

    Dass wir uns hier auf einem Niveau bewegen, wo dies irrelevant sein sollte, ist dir doch hoffentlich bewusst?

    Auch ein erfahrener C++ Coder macht manchmal Fehler und muß danach vielleicht noch stundenlang den Fehler suchen.

    Hier ist eine Programmiersprache, die solche Schnitzer deutlich erschwert ein deutliches Hilfsmittel.



  • Warum benutzt du die BigInteger Lib nicht einfach mit D?

    Wie kann ich konkret C++-Klassen (verpackt in header und cpp) mit D mischen? Zeigen!



  • So einfach ist das nicht.

    Voraussetzung dafür ist, dass die Methoden der Klasse virtuell sein müssen. Meistens das K.O. Kriterium. Zweitens muss noch eine Funktion vorhanden sein, die das Objekt erzeugt. Allerdings sieht es nur D2.0 vor, welches noch Alpha ist.

    http://www.digitalmars.com/d/2.0/cpp_interface.html



  • Ja, wie geht's denn nun konkret? Obiges Beispiel. 😃
    Dann könnte ich konkret zwischen C++ und D vergleichen.



  • Quelle?



  • greez schrieb:

    Auch ein erfahrener C++ Coder macht manchmal Fehler und muß danach vielleicht noch stundenlang den Fehler suchen.

    Hier ist eine Programmiersprache, die solche Schnitzer deutlich erschwert ein deutliches Hilfsmittel.

    Eine Sprache, die "solche Schnitzer" erschwert, ist sicherlich nicht schlecht. Was ich aber von D gesehen habe, ist meistens nur syntaktischer Zucker. Ein erfahrender Programmiert wird wahrscheinlich recht schnell mit D auch effizient programmieren, aber ich bezweifle, dass Anfänger mit D anfanagen sollten. Klar, man kann vielleicht nicht viel "kaputt machen" (z.b. wegen buffer overflows), aber programmieren lernen werden sie nicht. Schnell ein Programm zusammenbasteln ist leicht, richtig zu programmieren ist aber etwas anders. Wenn man nie mit Buffer Overflows zu tun hat, dann wird man nie lernen, sicher zu programmieren, so dass keine buff.over. entstehen. Mit C und/oder C++ hat man die Gefahr, aber man kann daraus lernen und vor allem versteht man danach, was schief ging und warum und wie man es besser macht.

    Das erinnert mich an bisschen an Kinder, die Fahrrad mit und ohne Stützen fahren. Die, die mit Stützen fahren, fahren auch Rad, ohne auf die Schnautze zu fallen, lernen aber nicht, wie man das Gleichgewicht halten soll. Kinder, die ohne Stützen lernen, fallen am Anfang schon auf die Schnauze aber sie lernen auch wie man das Gleichgewicht hält. D kommt mir manchmal wie C++ mit Stützrädern vor.



  • groovemaster schrieb:

    Da kannst du vermutlich lange auf eine Antwort warten. Das wissen die D Verfechter nicht mal selbst. Solche Diskussion sind leider ideologisch motiviert und nicht wirklich sachdienlich.

    @D Fan
    Du hast ausserdem ein grundlegendes Problem. Es geht nicht darum, Gründe gegen D anzugeben. Obwohl es da schon reichlich gibt. Es geht darum, trifftige Gründe für D zu finden. Und bis auf Syntaxzucker gibt es da keine.

    Wenn man Produktivät(Syntaxtisch) sowie Zuverlässigkeit(GC) von C#/Java in eine Programmieresprachen habe möcht, die native Output hat, könnte man D einbeziehen. 😉



  • Ob mit oder ohne Stützräder, was ich benötige, ist eine komplette IDE, die sich z.B. installiert wie Code::Blocks, kein Zusammenbasteln von Brocken am Anfang.
    Ansonsten benötigt man Bibliotheken. Bei C++ hat man STL, boost und für alles eine Lösung.

    Also:
    wo ist meine IDE?
    wo ist die Bibliothek BigInteger?

    Dann kann's los gehen.



  • Axo XD

    Ich glaub jetzt sind alle D Fans geflüchtet ^^



  • Es geht hier nicht um Fan oder Nicht-Fan, sondern um Hilfsmittel zur Erstellung von Programmen. Dafür benötigt man professionelle Tools, gute Tutorials/Bücher, eine lebendige Community (z.B. eine D-Sektion hier, wo sonst?), brauchbare Bibliotheken und eine klare Migrationsstrategie für bestehende Systeme. Manches bietet D ja bereits.


Anmelden zum Antworten