Von C zu Rust wechseln?



  • Es ist doch gut, wenn es nicht näher an C++ dran ist. C++ ist per Default unsafe, daran wird auch ein C++14 und später 17 nichts ändern. Du kannst nie sagen, dass der Code in C++ sicher ist. D kenne ich nicht.

    Es gibt doch bestimmt Bereiche wo Sicherheit wichtig ist. Rust kann dies garantieren. Wie gut das funktioniert, werden dann die neuen Firefox-Versionen mit Servo zeigen müssen. Die alte Engine Gecko, die ja in C++ geschrieben ist, ist schon einmal langsamer als Servo. Ein großer Teil der Unsicherheit von Gecko stammt daher, dass C++ keine sichere Speicherveraltung garantieren kann und diese Aussagen haben die wohl auch bewiesen. Also es ist sicher, dass viele Sicherheitslücken in Gecko nur deswegen existieren weil die Engine in C++ geschrieben ist.

    Der Erfolg von Rust wird mit Servo stehen oder fallen.

    Mir persönlich ist Rust zu schwer, aber auch C++ ist mir zu anstrengend. Ich liebe mein unsicheres Void-Pointer-Gehacke in C. Aber ich schreibe auch keine Sachen die irgendwer außer mir selbst nutzt, daher ist Sicherheit, OOP, Templates, 55 effective Tricks etc. bei mir nicht groß wichtig.


  • Mod

    Ich glaube, du legst zu viel Wert auf Buzzworte. "Sicherheit" ist ja ein schönes Konzept, aber diese Sicherheit ist ja auch irgendwie implementiert. Und diese Implementierung kann auch fehlerhaft oder unvollständig sein. Auf der tiefsten Ebene ist ein gängiger Computer eben immer noch eine in der üblichen Maschinensprache programmierte von-Neumann-Maschine und das ist inhärent nicht absolut sicher, egal wie viele Ebenen von virtuellen Maschinen man darüber hat.



  • Natürlich kann man in C++ speichersicher programmieren.



  • Gibt doch schon andere, etablierte Sprachen für sicherheitsrelevante Anwendungen. Angeblich wird Ada in vielen sicherheitskritischen Anwendungen eingesetzt. Keine Ahnung, hatte noch nie was mit Ada zu tun. Gibt auch tausende andere Sprachen, in denen es "sichere" Speicherverwaltung gibt, z.B. .NET oder Java oder wahrscheinlich alle Scriptsprachen. Der Vorteil von Rust hier wäre wohl, dass es sicher und schnell ist. Aber ein so wirklich herausragendes Merkmal ist es nicht. Man kann auch in C++ recht sicher programmieren, das ist schon viel sicherer als C, wenn man halbwegs vernünftig damit arbeitet.
    Ich glaube wie gesagt auch nicht, dass Sprachmerkmale für sicherheitsrelevante Anwendungen eine herausragende Rolle spielen werden. Ada ist beim Militär wahrscheinlich so beliebt, weil es die schon seit den 70ern gibt. Ich halte es für praktisch ausgeschlossen, dass da irgendjemand anfangen wird, irgendwas in einer so neuen und unausgereiften Sprache zu schreiben. Da wird man abwarten, bis die mindestens 20 Jahre auf dem Markt ist und die Compiler und die Tools auch ganz ganz sicher von sehr vielen anderen getestet wurden.
    Servo ist doch nur ein Prototyp. Es ist noch nicht geplant, das wirklich in Firefox zu integrieren. Natürich kann man eine schnellere und sicherere Engine als eine bestehende schreiben. Immer wenn man from scratch anfängt und sich mit dem Altsystem auskennt, kann man wahrscheinlich etwas besseres, ohne die ganzen Fehler und Fehlentscheidungen aufbauen. Das sagt noch nicht viel, schon gar nichts über die Programmiersprache. Auch das neue System wird irgendwann immer komplexer, langsamer und fehleranfälliger, wenn das in den Produktivbetrieb geht und immer wieder erweitert wird. Und es gibt genug Ideen, die man ausprobieren kann, eine Browserenginer schneller zu machen, das wird nicht daran liegen, dass die Programmiersprache schnelleren Code erzeugt.



  • Das ist der große Unterschied: Man KANN in C++ Speichersicher programmieren, man kann es aber NICHT garantieren. In Rust kann man es IMMER garantieren, außer halt in den unsage Blocks. C++ ist aus der Sicht von Rust ein einziger unsafe-Block. Menschen machen IMMER Fehler. Bei Rust hilft der Compiler, solche Fehler erst gar nicht aufkommen zu lassen.

    Der Rustcompiler ist selbst in Rust geschrieben und Speicherfehler sind da wirklich äußerst unwahrscheinlich. In C++ ist es sehr unwahrscheinlich ein C++ Programm zu schreiben das keine Speicherfehler enthält. Je komplexer das C++ Programm wird, desto mehr solcher Fehler werden sich einschleichen. In Rust ist es egal wie komplex oder groß das Projekt wird, oder wie firm die Leute in Punkto Speichersicherheit sind. Der Compiler lässt solche Fehler gar nicht erst zu und das ist der große Punkt.

    Javaprogramme sollen, so ich gelesen habe, auch nicht so 100% frei von Speicherlecks sein. Da habe ich aber zu wenig Ahnung von.

    C++ wird ja hier immer so verteidigt weil eben der Compiler so viele Fehler abfängt. Rust ist nun noch eine Tick schärfer und kann Dinge erkennen zu die ein C++ Compiler nie in der Lage sein kann.



  • In C++ ist es sehr unwahrscheinlich ein C++ Programm zu schreiben das keine Speicherfehler enthält. Je komplexer das C++ Programm wird, desto mehr solcher Fehler werden sich einschleichen. In Rust ist es egal wie komplex oder groß das Projekt wird, oder wie firm die Leute in Punkto Speichersicherheit sind. Der Compiler lässt solche Fehler gar nicht erst zu und das ist der große Punkt.

    Nein. Sowas ist, wenn man konsequent Smart-Pointer/RAII verwendet, ausgeschlossen.



  • Ja. Am besten Guidelines etablieren und ein Senior Dev macht einen Code Review. Fertig.



  • Rust ist nun noch eine Tick schärfer und kann Dinge erkennen zu die ein C++ Compiler nie in der Lage sein kann.

    An was denkst du da?



  • Jodocus schrieb:

    Nein. Sowas ist, wenn man konsequent Smart-Pointer/RAII verwendet, ausgeschlossen.

    Was ist mit dangling references, out of bounds und Race conditions?



  • Marthog schrieb:

    Jodocus schrieb:

    Nein. Sowas ist, wenn man konsequent Smart-Pointer/RAII verwendet, ausgeschlossen.

    Was ist mit dangling references, out of bounds und Race conditions?

    Dangling References lassen sich zb durch die Verwendung von shared_ptr vermeiden.
    Out of bounds mit boundchecks.
    Channels kannst du auch in C++ implementieren.



  • Gedankenexperiment:

    Hey Leute, ich habe eben angefangen, programmieren zu Lernen. Als Sprache habe ich mir dafür Rust ausgesucht, weil es so schön neu und hip ist. Gibt es irgendeinen Grund von Rust auf C umzusteigen?



  • Ja. Kein Mensch programmiert in Rust. Mit C steht dir die halbe Welt offen, mit Rust garnichts.



  • Oh, wenn das so ist, dann werd' ich wohl besser C lernen anstatt Rust. Vielen Dank, Ethon! 😉



  • 🙄 :p



  • Hey Leute, ich habe eben angefangen, programmieren zu Lernen. Als Sprache habe ich mir dafür C++ ausgesucht, weil es so schön neu und hip ist. Gibt es irgendeinen Grund von C++ auf C umzusteigen?



  • Nochmal schrieb:

    Hey Leute, ich habe eben angefangen, programmieren zu Lernen. Als Sprache habe ich mir dafür C++ ausgesucht, weil es so schön neu und hip ist. Gibt es irgendeinen Grund von C++ auf C umzusteigen?

    Ja. C ist automatisch einfacher, weil der Sprachkern viel kleiner ist. Dinge wie RAII braucht kein Mensch; denn man kann auch leckfrei in C programmieren.

    😉



  • ich lecke aber gerne ... ähm. nein. vergesst den letzten Satz bitte wieder ...



  • Also wenn man sich diesen Benchmarkvergleich ansieht, dann ist Rust nicht besonders schnell.
    C++ ist hier immer noch eine der schnellsten Sprache, aber an der Spitze steht mit einem Geschwindigkeitsvorteil von > 16 % gegenüber C++ D und das auch noch bei den wenigsten Zeilen Code, was für eine starke Ausdrucksstärke und auch wenig Arbeit für den Coder bedeutet.

    Obwohl D hier also rein von den Zahlen am besten abschneidet wird es in der Praxis immer noch kaum benutzt, wie soll da Rust überhaupt nur eine Chance haben, wenn Rust von den drei Sprachen am langsamsten ist und der SLOC Wert auch kein großer Sprung gegenüber C++ ist?

    https://togototo.wordpress.com/2013/08/23/benchmarks-round-two-parallel-go-rust-d-scala-and-nimrod/



  • Hier gibt's mal eine Debatte zu C++, D, Rust und Go von den Profis (ihr kennt sie sicher alle, wenn ihr euch die Leute anschaut):

    https://www.youtube.com/watch?v=BBbv1ej0fFo



  • Also wenn man sich diesen Benchmarkvergleich ansieht, dann ist Rust nicht besonders schnell.

    Verwechsle nicht Sprachen mit deren Implementierungen. Vom Sprachdesign her gibt es keine Gründe für Deine Beobachtung.

    Obwohl D hier also rein von den Zahlen am besten abschneidet wird es in der Praxis immer noch kaum benutzt, wie soll da Rust überhaupt nur eine Chance haben, wenn Rust von den drei Sprachen am langsamsten ist und der SLOC Wert auch kein großer Sprung gegenüber C++ ist?

    Ich kenne keine andere Sprache, die Speichersicherheit erreicht, ohne dabei auf Garbage Collection oder ausbremsende Checks zu setzen. Das ist es, was Rust für mich interessant macht. Du tickst da anscheinend anders. Und das ist ja auch okay.

    Wenn man als D Programmierer wirklich über den Tellerrand guckt, dann kann da u.a. so etwas bei heraus kommen:
    http://blog.dicebot.lv/2015/01/thoughts-about-rust-from-d-programmer.html

    Ich hoffe, ich konnte Dir mit dieser Antwort helfen.


Anmelden zum Antworten