Von C zu Rust wechseln?



  • Mechanics schrieb:

    Außerdem interessieren mich einfach "große" Projekte. Ich mag nicht in kleinen Firmen arbeiten, die an kleinen Projekten basteln. Ich will in sehr großer Software mit sehr vielen Komponenten rumwühlen. Sowas entsteht nicht von heut auf morgen und sowas entsteht selten von Grund auf neu. Das ist meist Software, die schon lang auf dem Markt ist. Und deswegen ist die wahrscheinlich in C++ geschrieben 😉

    In bestehender Software rumzuwühlen ist ja auch viel einfacher und macht mehr Spaß als bei 0 beginnen zu müssen und alles selber designen zu müssen.



  • Ich empfinde das als genau umgekehrt.



  • DasNeue schrieb:

    Rust ist halt ein erster Versuch C und C++ komplett abzulösen.

    Nö, D war schon vorher da. So wie noch viele weitere Sprachen.



  • Tyrdal schrieb:

    Ich empfinde das als genau umgekehrt.

    Neu anfangen zu müssen ist halt sehr low Level und man sieht erst mal für viele Monate nichts.

    Bei bestehender Software sieht man aber etwas und mit jedem weiteren Feature wird die Software leistungsfähiger und besser und die neuen Features sind man nach recht kurzer Implementierungszeit.

    Und bei Computerspielen gilt das wahrscheinlich noch mehr als bei Anwendungssoftware & Co.



  • Ich finde gerade dieses Neuanfangen sehr spannend und je mehr ich mich in Rust einarbeite, desto mehr gefällt es mir. Mein Wissen über andere Programmiersprachen ist ja deswegen nicht einfach weg. Wie ich schon schrieb, ich finde den Weg den Rust geht richtig und das unterstütze ich. Aber erst einmal muss ich lernen und ausprobieren. Wem der Weg zum Ziel kein Spaß macht, der sollte es eh bleiben lassen.



  • Ich finde das function keyword nicht blöd da dadurch Mehrdeutigkeiten wegfallen. C++ hat ja auch das Problem dass

    vector data(len);
    

    nicht als Variable sondern als Funktion geparst wird. Finde ich hässlich, das function keyword gefällt wird.



  • Ethon schrieb:

    Ich finde das function keyword nicht blöd da dadurch Mehrdeutigkeiten wegfallen. C++ hat ja auch das Problem dass

    vector data(len);
    

    nicht als Variable sondern als Funktion geparst wird. Finde ich hässlich, das function keyword gefällt wird.

    vector data(len); würde als Definition einer lokalen Variable geparsed (sofern len kein Typ ist). Lediglich vector data(); ist eine Funktionsdeklaration.



  • Wenn das eine Variablendeklaration sein soll, dann fehlt mir da noch der Typ, z.B.:

    vector<int> data(len);
    

    und an dem <int> ist eindeutig zu erkennen, dass das eine Variable und keine Funktion sein soll.

    Und

    vector data();
    

    ist eindeutig als Funktion zu erkennen, genauso wie

    vector data(int bla);
    

    und der Einwand von dot ist korrekt.
    len muss schon ein selbstdefinierter Datentyp sein, damit so eine Deklaration Sinn macht:

    vector data(len)
    

    Also ich sehe jetzt nicht, dass hier Mehrdeutigkeit entsteht und ein Keyword notwendig wäre.



  • Nun, Ethon wollte wohl auf den Most Vexing Parse anspielen, dem wir alle wohl schon mindestens einmal auf den Leim gegangen sind; passiert mir ab und zu auch noch...



  • Außerdem meldet das auch der Compiler:

    compiliert:

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main()
    {
        int len = 10;
        vector<int> data(len);
    
        for (vector<int>::iterator i = data.begin(); i != data.end(); ++i)
        {
          cout << *i << endl;
        }
        return 0;
    }
    

    compiliert nicht:

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main()
    {
        int len = 10;
    //    vector<int> data(len);
        vector data(len);
    
        for (vector<int>::iterator i = data.begin(); i != data.end(); ++i)
        {
          cout << *i << endl;
        }
        return 0;
    }
    
    g++ test.cpp -o test.bin
    test.cpp: In function ‘int main()’:
    test.cpp:9:12: error: missing template arguments before ‘data’
         vector data(len);
                ^
    test.cpp:9:12: error: expected ‘;’ before ‘data’
    test.cpp:11:36: error: ‘data’ was not declared in this scope
         for (vector<int>::iterator i = data.begin(); i != data.end(); ++i)
    


  • dot schrieb:

    Nun, Ethon wollte wohl auf den Most Vexing Parse anspielen, dem wir alle wohl schon mindestens einmal auf den Leim gegangen sind; passiert mir ab und zu auch noch...

    Okay, aber das klingt schon sehr gestellt. So würde ich zumindest nicht programmieren.



  • Aussagen wie "Das würde ich nie machen" sind genau das Problem. Es gibt eben viele Programmierer da draußen, die nicht die Experten-Ahnung ihrer Sprache haben und die auch keine Zeit oder Lust haben sich bis auf alle Ewigkeit nur mit dem Werkzeug beschäftigen zu müssen, um all die Ausnahmen und Regeln kennen zu lernen.



  • Motiv? schrieb:

    dot schrieb:

    Nun, Ethon wollte wohl auf den Most Vexing Parse anspielen, dem wir alle wohl schon mindestens einmal auf den Leim gegangen sind; passiert mir ab und zu auch noch...

    Okay, aber das klingt schon sehr gestellt. So würde ich zumindest nicht programmieren.

    wie würdest du denn beim Aufruf des Konstruktors eines stl-containers mit Ordnungsrelation das Funktionsobjekt übergeben wenn nicht als ( ..., Order()) ?



  • Ich hatte es relativ häufig und habe mich immer erstmal geärgert.



  • Ich habe auch mal das Rust Tutorial durchgemacht und so sehr ich den Gedanken an automatisch sichere Software mag. Ich brauche meine Strukturen auf denen ich rumschrubben kann und auch meine hängenden Zeiger finde ich in der Regel recht schnell. Auch wenn das mit den Zeigern immer verteufelt wird, was bestimmt nicht unbegründet ist. Ich liebe meine rohen Zeiger einfach. Da weiß ich was ich habe und sehe was passiert, wenn es nicht zu chaotisch programmiert wurde.

    Aber ich bin auch kein Maßstab, da meine Programme kleine überschaubare Ein-Mann-Sachen, mit ein bis fünfzig Dateien, sind.



  • Kleiner Zusatz, es fällt mir auch schwer mich in die neuen Konzepte wie Ownership, Slices, Method Syntax, Pattern matching etc rein zu denken, auch wenn das alles äußerst nützlich klingt. Ich liebe auch meine alten for und while Schleifen usw.

    Ich kann mir aber gut vorstellen, das Rust bei der NASA oder so im medizinischen Bereich großen Erfolg haben könnte.



  • Nä. Wenn man sehr hohe Standards bezüglich Korrektheit hat dann programmiert man lieber funktional und lässt den Krempel von Mathematikern beweisen.



  • Ok, an so was habe ich noch gar nicht gedacht. Mir ist funktionales Programmieren sehr fremd. Das ist bestimmt auch sehr nützlich, aber immer wenn ich mal einen Artikel darüber gelesen haben, dann habe ich nur gedacht: "Boa, ne eh"^^



  • VitC schrieb:

    Ich liebe meine rohen Zeiger einfach.

    Soweit ich das nach kurzem überfliegen verstanden habe darfst du das immernoch, nur halt in "unsafe" gekenzeichneten Bereichen.



  • Ja, das ist richtig. In unsafe Blocks kann man sich so wie in C austoben und das letzte bisschen Speed raus holen. Und wenn man irgendwelche Fehler sucht, der mit dem Speicher zu tun haben könnte, dann braucht man nur in den unsafe-Blocks zu schauen und nicht das gesamte Programm debuggen. Das ist alles schön und ich kann mir auch gut vorstellen, dass in Zukunft nur noch mit so etwas wie Rust programmiert wird, trotzdem habe ich große Schwierigkeiten mich an die neuen Sprach-Konzepte zu gewöhnen.

    Aber Potenzial hat die Sprache Rust schon. Wenn die sich nicht ganz dumm anstellen, kann ich mir auch vorstellen dass viele von C oder auch C++ dahin wechseln. C-Libs einzubinden ist wohl sehr einfach und mit der Zeit werden auch immer mehr eigene Libs kommen. Wenn man die IT-Welt ein wenig sicherer, aber gleichzeitig nicht viel langsamer machen kann, warum nicht? PHP, Java, C# hat es auch nicht aufgehalten, dass sie am Anfang keiner kannte und dass die Codebase auch noch nicht so dolle war.

    Hmm, sollte man sich Rust doch noch mal genauer anschauen? 😃


Anmelden zum Antworten