burli
Anmeldungsdatum: 27. April 2007
Beiträge: 9001
Wohnort: Petersberg
|
Moin,
ich bin dabei, meine Programmierkenntnisse zu erweitern. Aber ich frage mich, ob ich mich auf Rust oder auf C++ konzentrieren soll. C++ erscheint mir überladen, kompliziert und es ist bekanntermaßen anfällige für Data Races, Buffer overflow und viele andere Bugs. Aber es ist eben die am weitesten verbreitete Sprache in Linux und auch auf anderen Systemen. Rust Projekte zu erstellen und zu managen ist dagegen ein Kinderspiel und der Compiler überprüft den Code schon zur Compilezeit auf Fehler, die unter anderem zu den genannten Bugs führen. Allerdings unterscheidet sich das Sprachkonzept deutlich von gängigen Sprachen, was eine deutlich längere Einarbeitungszeit zur Folge hat. Ich habe aber das Gefühl, dass sich Rust immer mehr verbreitet. Sogar Microsoft scheint Interesse an Rust zu haben. C++ lernen fühlt sich für mich an als ob man ein totes Pferd reiten will. Wie sieht es denn in der Linux Welt mit Rust aus? Gibt es, neben Firefox, irgendwelche erwähnenswerte Projekte, die Rust verwenden? Habt ihr schon Erfahrung mit Rust? Was ist eure Meinung?
|
frostschutz
Anmeldungsdatum: 18. November 2010
Beiträge: 7657
|
Klingt ja so als hättest du dich schon entschieden?
Allerdings unterscheidet sich das Sprachkonzept deutlich von gängigen Sprachen
Na ja. Jede Sprache hat ein Konzept, an das man sich gewöhnen muss. Das ist auch bei C/C++ nicht anders. Wenn du die Strickfallen nicht kennst...
Was ist eure Meinung?
Rust ist hochinteressant, schaden kanns nicht. Und egal in welcher Programmiersprache du Erfahrung sammelst, das ist übertragbar auf andere.
Gibt es, neben Firefox, irgendwelche erwähnenswerte Projekte, die Rust verwenden?
Rust Emacs? 😉 https://github.com/remacs/remacs
|
burli
(Themenstarter)
Anmeldungsdatum: 27. April 2007
Beiträge: 9001
Wohnort: Petersberg
|
frostschutz schrieb: Klingt ja so als hättest du dich schon entschieden?
Jain. Ich tendiere zu Rust, aber ich habe mich noch nicht endgültig festgelegt. Na ja. Jede Sprache hat ein Konzept, an das man sich gewöhnen muss. Das ist auch bei C/C++ nicht anders. Wenn du die Strickfallen nicht kennst...
Das stimmt, aber Rust geht zB im Vergleich zu Sprachen wie Python oder C/C++ anders mit Variablen um. Es gibt bestimmte Regeln, die schon vom Compiler überprüft werden und die wohl schon so manchen (erfahrenen) Programmierer aus der Fassung gebracht haben. Auch die OOP sieht in Rust etwas anders aus als "üblich". Ich habe gestern einen Artikel darüber gelesen. Normalerweise geht ein Programmierer, der eine neue Sprache lernen will, her und überfliegt die Dokumentation, schaut sich ein paar Beispiele an und legt los. Für Rust wurde empfohlen, die Doku von vorne bis hinten durchzulesen. Es ist einfacher, zwischen C++, Python, Java oder C# zu wechseln als von einer dieser Sprachen nach Rust.
Rust ist hochinteressant, schaden kanns nicht. Und egal in welcher Programmiersprache du Erfahrung sammelst, das ist übertragbar auf andere.
Das stimmt, in einem Video hat einer mal gesagt, dass er seinen C++ Code, nachdem er Erfahrungen mit Rust gesammelt hat, in einem völlig anderen Licht sieht und sich gewünscht hat, dass es einen vergleichbaren Compiler auch für C/C++ geben würde 😀
Rust Emacs? 😉 https://github.com/remacs/remacs
Ich kenne schon ein paar Projekte. Ich meinte eher, ob davon schon etwas "in der realen Welt" angekommen ist und vielleicht sogar schon in der Standard Installation einer Distribution auftaucht. Unter dem Strich wird es wohl Rust werden. Aber eure Meinung würde mich dennoch interessieren.
|
Dakuan
Anmeldungsdatum: 2. November 2004
Beiträge: 6345
Wohnort: Hamburg
|
Aber eure Meinung würde mich dennoch interessieren.
Dann sag ich auch noch was. Erstmal ist eine Programmiersprache nur ein Werkzeug. Du solltest erstmal das/die Werkzeug(e) verwenden, die dir am besten liegen bzw. am besten zu deiner Arbeitsweise passen. Andererseits kann es da auch mehr oder weniger starke Sachzwänge geben. Also ich experimentiere zwischendurch auch mal mit digitaler Signalverarbeitung in Echtzeit. Da erscheinen mir Programmiersprachen wie C oder C++ vorteilhafter. Zumindest erlebt man da weniger Überraschungen durch so etwas wie Garbage Collection, was zumindest auf single Core CPU's im Embedded Bereich schonmal das Timing verbiegen kann. Und welche Sprache dir am besten liegt, weist du erst wenn du einige ausprobiert hast. Allerdings kann das auch von Gewohnheiten beeinflusst sein. Je nachdem, was du zuerst kennengelernt hast kann es passieren das dir ähnliche Sprachen anfangs besser gefallen. Ich habe z.B. mit Assembler (Z80, MC68000) angefangen. Da erscheinen dann C und C++ als die natürliche Fortsetzung.
C++ erscheint mir überladen, kompliziert...
C++ entfernt sich immer weiter von C und mit vielen Neuerungen tue ich mich schwer. Aber man muss ja nicht alles nutzen.
... und es ist bekanntermaßen anfällige für Data Races, Buffer overflow und viele andere Bugs.
Das ist der Preis für die potentiell höhere Geschwindigkeit.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
Was ist denn Dein Ziel? Wenn Du etwas interessantes mit Deiner Freizeit anstellen willst und neue Dinge lernen, dann ist Rust vermutlich keine schlechte Wahl. Ich kenne die Sprache nicht, kann also mehr dazu nicht sagen. Wenn es Dir darum geht, Deine Möglichkeiten für Broterwerb zu verbessern, wäre vermutlich C++ eine bessere Wahl - ich würde dann allerdings eher zu Java greifen, weil ich finde, dass C++ zu viele Dinge zu Fuss macht - im 21. Jahrhundert sollten wir da schon weiter sein. Ansonsten ist auch Scala als Multi-Paradigma-Sprache interessant und sie läuft auf der JVM und kann so von der Arbeit profitieren, die über die Jahre in die Java VM geflossen ist. Wenn ich mal viel Zeit hätte, würde ich mir Scala und Lisp zu Gemüte führen - letzteres hauptsächlich wegen des sehr gelobten Buches "Structure and Interpretation of Computer Programs", das hier schon sein Jahren auf seinen Konsum wartet.
|
burli
(Themenstarter)
Anmeldungsdatum: 27. April 2007
Beiträge: 9001
Wohnort: Petersberg
|
Dakuan schrieb:
Andererseits kann es da auch mehr oder weniger starke Sachzwänge geben. Also ich experimentiere zwischendurch auch mal mit digitaler Signalverarbeitung in Echtzeit. Da erscheinen mir Programmiersprachen wie C oder C++ vorteilhafter. Zumindest erlebt man da weniger Überraschungen durch so etwas wie Garbage Collection, was zumindest auf single Core CPU's im Embedded Bereich schonmal das Timing verbiegen kann.
In Rust gibt es keinen GC
Und welche Sprache dir am besten liegt, weist du erst wenn du einige ausprobiert hast. Allerdings kann das auch von Gewohnheiten beeinflusst sein. Je nachdem, was du zuerst kennengelernt hast kann es passieren das dir ähnliche Sprachen anfangs besser gefallen.
Ich habe schon in verschiedenen Sprachen programmiert, die aber alle recht ähnlich sind. C, Pascal, Python und Lua sind die am häufigsten genutzten Sprachen, teilweise auf 8 Bit Controllern. Hab aber auch schon Webseiten in PHP geschrieben. Die Sprachen sind sich alle recht ähnlich. Rust fällt da etwas aus dem Rahmen
Ich habe z.B. mit Assembler (Z80, MC68000) angefangen. Da erscheinen dann C und C++ als die natürliche Fortsetzung. C++ entfernt sich immer weiter von C und mit vielen Neuerungen tue ich mich schwer. Aber man muss ja nicht alles nutzen.
Ich habe auf dem C64 angefangen die Bits mit Hammer und Meißel in das ROM zu klöpplen 😉. Spaß beiseite. Es geht mir wie dir. Mit C konnte ich mich noch anfreunden, die Anfänge von C++ gingen auch noch. Aber größere Projekte sind dermaßen komplex und die Build Tools und das ganze Drumrum dermaßen kompliziert geworden, da ist Cargo von Rust eine regelrechte Offenbarung. Mit einem einfachen Befehl hat man das Grundgerüst für ein Projekt inklusive Git Versionsverwaltung. Das Einbinden von Libs ist genauso einfach. Einfach in die Dependencies eintragen und die werden automatisch aus dem Internet runtergeladen und compiliert.
... und es ist bekanntermaßen anfällige für Data Races, Buffer overflow und viele andere Bugs.
Das ist der Preis für die potentiell höhere Geschwindigkeit.
Das ist ja der Witz von Rust. Es ist eine System-Programmiersprache mit der gleichen Performance von C/C++, aber ohne die Gefahr der üblichen Fehler. Oder zumindest auf ein absoluten Minimum reduziert. Wenn man Arrays verwendet gib es zB einen Bound Check, der natürlich etwas an Performance kostet. Wenn man wirklich ans Limit gehen will oder muss kann man einen minimal nötigen Anteil an Code als "unsafe" deklarieren und hat die volle C Performance. Das muss man dann aber explizit angeben und weiß dann auch genau, wo es kracht, wenn's dann mal kracht. Bei dem Debian Language Benchmark sind manche Rust Programme sogar schneller als C. Rust ist eine Systemsprache wie C/C++. Man kann damit auch kleine ARM Cortex M3 Controller programmieren und es gibt erste Ansätze von Betriebssystemen rklm schrieb: Was ist denn Dein Ziel? Wenn Du etwas interessantes mit Deiner Freizeit anstellen willst und neue Dinge lernen, dann ist Rust vermutlich keine schlechte Wahl. Ich kenne die Sprache nicht, kann also mehr dazu nicht sagen. Wenn es Dir darum geht, Deine Möglichkeiten für Broterwerb zu verbessern, wäre vermutlich C++ eine bessere Wahl - ich würde dann allerdings eher zu Java greifen, weil ich finde, dass C++ zu viele Dinge zu Fuss macht - im 21. Jahrhundert sollten wir da schon weiter sein. Ansonsten ist auch Scala als Multi-Paradigma-Sprache interessant und sie läuft auf der JVM und kann so von der Arbeit profitieren, die über die Jahre in die Java VM geflossen ist.
Für mich ist das ein Hobby. C++ ist über die Jahre gewachsen und hat sich ständig verändert. Was geblieben ist sind die Probleme. Hab mal gelesen, dass über 70% der Patches von Windows auf die Unsicherheit von C++ Code zurückzuführen ist. Ich hatte selbst schon Probleme damit
Wenn ich mal viel Zeit hätte, würde ich mir Scala und Lisp zu Gemüte führen - letzteres hauptsächlich wegen des sehr gelobten Buches "Structure and Interpretation of Computer Programs", das hier schon sein Jahren auf seinen Konsum wartet.
Scala und Lisp sind mir schon wieder zu exotisch. Ich sage nicht, dass sie schlecht sind, aber irgendwie passen die nicht so richtig in mein Weltbild. Ich habe überlegt, mich näher mit C# zu beschäftigen, aber mich stören die Garbage Collectors. Irgendwann will ich mich vielleicht mal an einem Spiel probieren. Da kann das dann schon stören. Ich bin auch viel auf Mikrocontrollern unterwegs und da ist die primäre Sprache nach wie vor C oder C++. Sprachen wie C# oder Java tun sich da schwer oder werden erst gar nicht unterstützt, obwohl es sogar eine JVM für AVR Controller gibt. Aber ob die wirklich Sinn ergibt... In meinen Augen ist Rust die weitaus bessere Sprache und auch das gesamte "Ökosystem" drum herum ist vielen anderen Sprachen weit voraus, aber Rust ist noch verhältnismäßig jung und C++ ist halt überall zu finden
|
Dakuan
Anmeldungsdatum: 2. November 2004
Beiträge: 6345
Wohnort: Hamburg
|
In Rust gibt es keinen GC
Sehr schön.
Ich habe schon in verschiedenen Sprachen programmiert, die aber alle recht ähnlich sind. C, Pascal, Python und Lua sind die am häufigsten genutzten Sprachen, teilweise auf 8 Bit Controllern.
Sieht bei mir ähnlich aus, wenn man Lua durch Fortran IV ersetzt. Cobol hatte ich schon nach einem Tag zum Abschuss freigegeben.
Ich habe auf dem C64 angefangen die Bits mit Hammer und Meißel in das ROM zu klöpplen 😉.
Haben wir ähnlich gemacht. Auf einem Siemens Prozessrechner. Statt Hammer und Meißel konnten wir aber auf Kippschalter und Glimmlampen (zur Kontrolle) zurückgreifen.
... die Anfänge von C++ gingen auch noch. Aber größere Projekte sind dermaßen komplex und die Build Tools und das ganze Drumrum dermaßen kompliziert geworden, da ist Cargo von Rust eine regelrechte Offenbarung.
Nach ca. 3 Jahren fange ich an, mich daran zu gewöhnen.
Wenn man Arrays verwendet gib es zB einen Bound Check, der natürlich etwas an Performance kostet.
Den kann man in C++ auch haben, wenn man std::array benutzt. Bei den Benchmarks finde ich schade, dass da keine FFT oder ein Algorithmus für FIR-Filter (Bild) bei ist. Da laufen viele Multiplikationen und Additionen in Schleife. Oft im hohen zweistelligen Bereich oder mehr und das 44100 Mal pro Sekunde. Aber alles in allem sehe ich, dass du ziemlich genau weißt, worauf du dich da einläßt. Also was hält dich ab?
|
burli
(Themenstarter)
Anmeldungsdatum: 27. April 2007
Beiträge: 9001
Wohnort: Petersberg
|
Ich finde auch, dass die Benchmarks ausgebaut werden könnten. Und mich stört, dass die Algorithmen vorgegeben sind. Da kann unter Umständen eine Sprache nicht ihr volles Potential nutzen. Auch die Compile Zeit bei Scriptsprachen wird nicht berücksichtigt. Bei Laufzeiten von mehreren Minuten mag das nicht ins Gewicht fallen, aber bei 1-2 Sekunden schon.
|
MisterIgo
Anmeldungsdatum: 23. April 2009
Beiträge: 947
|
Rust ist C++ gar nicht so unähnlich, wenn man in C++ Dinge wie Move-Semantic, Constness, Smart Pointer etc. benutzt.
Letztlich ist C++ ist ein gutes Beispiel für eine Sprache, die ständig um neue Konzepte angereichert wird, allerdings auch noch die ganzen alten Konzepte benutzt, die vor 30 Jahren schon da waren.
Rust hat diese alten Dinge nicht, ich würde aber mal voraussagen, dass das in 20 Jahren auch wieder so sein wird. Das einzige, was ich momentan bei Rust schade finde, ist das Tooling. Rust ist für Entwickler gut, aber für Distributoren nicht. Es kann nicht vernünftig dynamisch linken, es gibt keine ABI und die Kombination mit anderen Sprache außer C ist momentan eher mau (C++ kann außerdem bei Templates viel mehr). Das sind aber alles Probleme des Tooling, die sich, denke ich, noch lösen werden. Summa summarum: Wenn du eine Sprache neu lernen willst, würde ich Rust empfehlen. Ich bin mir ziemlich sicher, dass du dadurch ein besserer C++-Programmierer wirst.
|
burli
(Themenstarter)
Anmeldungsdatum: 27. April 2007
Beiträge: 9001
Wohnort: Petersberg
|
Ich glaube, Rust hat ein ähnliches Problem wie Linux. Windows User, die zu Linux wechseln erwarten, dass Linux genauso funktioniert wie Windows. Was man aus der Community dann immer hört ist "Linux ist nicht Windows" Rust geht es denke ich ähnlich. C++ oder Java Programmierer, die zu Rust wechseln und versuchen, ihre Erfahrung auf Rust zu übertragen, werden schnell frustriert sein. Deshalb kann man vielleicht über Rust sagen "Rust ist nicht C++" Ich fürchte nur, das wird viele Programmierer abschrecken. Dazu passend ein Interview, Interessanterweise auf dem Microsoft Developer Kanal https://youtu.be/FYGS2q1bljE
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
MisterIgo schrieb:
(C++ kann außerdem bei Templates viel mehr).
Was einen erheblichen Teil der Komplexität (und damit Fehleranfälligkeit) der Compiler sowie Verständnisschwierigkeiten der Programmierer verursacht.
Ich bin mir ziemlich sicher, dass du dadurch ein besserer C++-Programmierer wirst.
Zustimmung: In meiner Erfahrung hilft es möglichst mehrere Sprachen unterschiedlicher Paradigment zu kennen (idealerweise: zu beherrschen), weil man damit Konzepte aus anderen Sprachen nutzen kann. Man denke nur mal an Dateideskriptoren in C und den Zugriffsfunktionen; wenn man OOP kennt, dann kann man das sofort als Objektorientierung erkennen. Edit: Zitat repariert
|
NORACSA
Anmeldungsdatum: 31. Januar 2010
Beiträge: 180
|
rklm schrieb: Zustimmung: In meiner Erfahrung hilft es möglichst mehrere Sprachen unterschiedlicher Paradigment zu kennen (idealerweise: zu beherrschen), weil man damit Konzepte aus anderen Sprachen nutzen kann. Man denke nur mal an Dateideskriptoren in C und den Zugriffsfunktionen; wenn man OOP kennt, dann kann man das sofort als Objektorientierung erkennen.
Eigentlich hat das mit OOP recht wenig zu tun. Es ist einfach eine Variable die mit einer Gruppe von Funktionen verwendet wird. Auch wenn es zB in PHP für Datenbanken jeweils eine objektorientierte und eine nicht-objektorientierte Version gibt die dann eben einfach die entsprechende Variable übergeben bekommt macht das diese zweite Version noch lange nicht objektorientiert. Aber mindestens 1.000.000 % Zustimmung dafür dass man mehrere möglichst unterschiedliche Sprachen kennen sollte um einen Blick fürs große Ganze zu bekommen! Wichtig ist meiner Meinung nach allerdings, dass man gleichzeitig nur eine Sprache lernt und erst zur nächsten wechselt wenn man in dieser sattelfest ist, gerade wenn die zwei Sprachen sich ähnlich sind.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
NORACSA schrieb: rklm schrieb: Zustimmung: In meiner Erfahrung hilft es möglichst mehrere Sprachen unterschiedlicher Paradigment zu kennen (idealerweise: zu beherrschen), weil man damit Konzepte aus anderen Sprachen nutzen kann. Man denke nur mal an Dateideskriptoren in C und den Zugriffsfunktionen; wenn man OOP kennt, dann kann man das sofort als Objektorientierung erkennen.
Eigentlich hat das mit OOP recht wenig zu tun. Es ist einfach eine Variable die mit einer Gruppe von Funktionen verwendet wird.
Die Variable ist opak für den Nutzer - es ist schließlich nur ein Handle und Zugriff auf die Daten passiert nur über Zugriffsfunktionen (oder -methoden). Das ist schon genau das Information Hiding, das man von der OOP kennt.
Aber mindestens 1.000.000 % Zustimmung dafür dass man mehrere möglichst unterschiedliche Sprachen kennen sollte um einen Blick fürs große Ganze zu bekommen! Wichtig ist meiner Meinung nach allerdings, dass man gleichzeitig nur eine Sprache lernt und erst zur nächsten wechselt wenn man in dieser sattelfest ist, gerade wenn die zwei Sprachen sich ähnlich sind.
Das hilft sicherlich. In unserer Zeit machen wir ja meist viel zu viel gleichzeitig und dabei bleibt eine Menge auf der Strecke.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
Woran bei Rust denken muss, ist dass Interfaces zu APIs von in anderen Programmiersprachen wie C/C++ geschriebenen Bibliotheken (gerade wenn man GUI-Toolkits wie GTK und QT nutzen will, kommt man da nicht daran vorbei: https://areweguiyet.com/newsfeed/2019-01-13_rust2019.html) üblicherweise als unsafe Code umgesetzt werden müssen, d.h. für diesen Glue-Code kann man sich nicht darauf verlassen, dass der Compiler einen auf Speicherfehler, Ressourcen-Konflikte, Lebenszeitprobleme oder ähnliches hinweist: https://doc.rust-lang.org/nomicon/ffi.html - wenn man sowas selber basteln will oder auf Probleme mit existierenden Wrappern stößt, hilft dann eigentlich nur das Verhalten der anderen Sprache gut genug zu kennen, um das Richtige zu tun.
|
snafu1
Anmeldungsdatum: 5. September 2007
Beiträge: 2123
Wohnort: Gelsenkirchen
|
Es sollte schon klar sein, dass die in Rust gemachten Garantien nur für die Sprache selbst gelten und nicht magisch auf C++-Bibliotheken übergehen können. Das hat man bei anderen Programmiersprachen ja genau so. Nutze ich in Python beispielsweise PyQt (und damit hinter den Kulissen einen C++-Wrapper) oder Pakete aus dem wissenschaftlichen Bereich, die häufig in C implementiert sind, dann kann es auch zu harten Abstürzen kommen. Also z.B. durch einen Segfault, weil der Autor eine wichtige Überprüfung übersehen hat oder zu unerwartetem Verhalten, weil ein Objekt schon vom Garbage Collector abgeräumt wurde ohne dass einem dies auf der Python-Seite bewusst war. Das muss man halt alles mitdenken und es ist IMHO ein eher schwaches Argument, wenn man Rust dies anlasten möchte...
|