Forum: Compiler & IDEs Rustup geht nicht..


von Rbx (rcx)


Lesenswert?

Man sieht ja auf einigen Internetseiten Rustup-code und wundert sich, 
dass Rustup in Linux (Fedora 42) nicht geht. Schaut man sich ein wenig 
um, steht man wieder mal wie der Ochs vorm Scheunentor.
Andererseits, wenn ich schon ein wenig besseren Durchblick habe, möchte 
ich mich dann doch lieber auf die Community verlassen.
Kann man das anders sehen?
(https://www.reddit.com/r/rust/comments/4inmpb/lets_talk_about_rustuprs/)

von Oliver S. (oliverso)


Lesenswert?

Wenn du jetzt noch eine sinnvolle Frage formulieren könntest, wäre das 
für den weiteren Thread hilfreich, auch wenn heute Freitag ist.

Oliver
P.S. Den Code von rustup findet man nicht auf „einigen Internetseiten“, 
sondern primär hier: https://github.com/rust-lang/rustup

von Cyblord -. (cyblord)


Lesenswert?

Rbx schrieb:
> Man sieht ja auf einigen Internetseiten Rustup-code

Tut man das? Ich zumindest nicht.

> und wundert sich,
> dass Rustup in Linux (Fedora 42) nicht geht.

Und schon wieder kein Treffer...

> Schaut man sich ein wenig
> um, steht man wieder mal wie der Ochs vorm Scheunentor.

Nein, auch nicht.

> Kann man das anders sehen?

Oh man kann zu deinem ganzen Post eine sehr sehr ambivalente Meinung 
haben. Senil ist noch das netteste was mir dazu einfällt.

von Nemopuk (nemopuk)


Lesenswert?

Rbx schrieb:
> Man sieht ja auf einigen Internetseiten Rustup-code und wundert sich

Man?

Ich jedenfalls nicht. Was bezweckst du mit diesem Thema? Worauf willst 
du hibaus?

von Ein T. (ein_typ)


Lesenswert?

Rbx schrieb:
> Man sieht ja auf einigen Internetseiten Rustup-code und wundert sich,
> dass Rustup in Linux (Fedora 42) nicht geht. Schaut man sich ein wenig
> um, steht man wieder mal wie der Ochs vorm >Scheunentor.
> Andererseits, wenn ich schon ein wenig besseren Durchblick habe, möchte
> ich mich dann doch lieber auf die Community verlassen.
> Kann man das anders sehen?

Ja.

Zunächst sehe ich keinen "Rustup-Code" auf "einigen Internetseiten". Hin 
und wieder sehe ich Code in der Programmiersprache "Rust", aber "rustup" 
scheint lediglich ein Installationsprogramm für die Werkzeuge zur Arbeit 
mit dieser Programmiersprache zu sein.

> (https://www.reddit.com/r/rust/comments/4inmpb/lets_talk_about_rustuprs/)

Ohne diesen Thread gelesen zu haben, scheint es dort zunächst um Arch 
Linux und gewisse... Sicherheitsimplikationen hinsichtlich der 
Installation der Rust-Programmierwerkzeuge mit dem vom Rust-Projekt 
empfohlenen Methode mit einem Shellscript namens "rustup" zu gehen. Über 
Fedora steht dort nichts.

Weil ich es genauer wissen wollte, habe ich mir dann ein 
Installationsimage von "Fedora Workstation", Version 42, heruntergeladen 
und in einer virtuellen Maschine (VM) installiert. Nach dem Booten der 
frisch installierten VM habe ich diese gebootet und in der grafischen 
Benutzeroberfläche (die übrigens wirklich schick aussieht, ein 
Landschaftsbild mit Brücke im Comic-Stil) ein Terminal gestartet (ich 
bin halt ein Kommandozeilenfreund, vermutlich gibt es dafür auch 
grafische Werkzeuge).

In dem Terminal habe ich dann "dnf search rustup" ausgeführt, mir wurde 
dann ein Paket "rustup" vorgeschlagen, das ich installiert habe. 
Daraufhin stand mir das Programm "rustup" zur Verfügung, welches ich 
ausgeführt habe und auf die Abfrage die Option "1" für eine 
Standardinstallation der Rust-Werkzeuge ausgewählt. Das Programm hat 
dann eine Weile gerödelt und beendete sich mit dem Hinweis, daß die 
Rust-Installation nun vollständig sei.

Also habe ich ein kleines "Hello World"-Programm geschrieben und 
versucht, es mit dem Rust-Compiler "rustc" zu übersetzen. Das schlug mit 
dem Hinweis fehl, daß irgendein anderes Werkzeug fehlen würde -- ich 
habe vergessen, welches, wußte aber, daß es zu den 
Entwicklungswerkzeugen für C gehört. Also habe ich die Pakete make, 
automake, autoconf, gcc, gcc-c++ und kernel-devel mit dem 
Fedora-Paketmanager dnf installiert. Danach konnte ich dann auch mit 
"rustc" mein "Hello World" kompilieren und das Kompilat ausführen.

Als Gegencheck habe ich dann das von Fedoras "rustup" erzeugte 
Verzeichnis ".cargo" in meinem Homedirectory umbenannt und den auf [1] 
empfohlenen Befehl
1
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

ausgeführt. Daraufhin entspann sich derselbe Dialog, den ich bereits von 
dem Fedora-Werkzeug "rustup" kannte, ich habe dieselbe Option "1" 
gewählt und erhielt ein neues Verzeichnis .cargo in meinem 
Homedirectory. Mit den darin enthaltenen Werkzeugen konnte ich mein 
"Hello World" ebenfalls übersetzen und das erzeugte Executable 
ausführen. Mit einer kurzen Überprüfung stellte sich zudem heraus, daß 
das von Fedora gelieferte "rustup" dieselben Versionen der Werkzeuge 
installiert hatte wie das heruntergeladene Script.

Deine Aussage, "dass Rustup in Linux (Fedora 42) nicht geht", kann ich 
daher in keiner Weise nachvollziehen. Bei mir hat alles reibungslos 
funktioniert. Könntest Du mir bitte erklären, wie Du zu Deiner Aussage 
kommst? Vielleicht können wir das ja aufklären. Danke.

von Kaj G. (Firma: RUB) (bloody)


Lesenswert?


von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Rbx schrieb:
> steht man wieder mal wie der Ochs vorm Scheunentor.

Nicht "man", sondern Du.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Kaj G. schrieb:
> Ein 10 Jahre alter Reddit Thread? Ernsthaft?

Man bedient sich eben dessen, dass die eigenen Vorurteile bestätigt, 
auch wenn es überhaupt nicht mehr passend ist.

von Nick (b620ys)


Lesenswert?

Rbx schrieb:
> wenn ich schon ein wenig besseren Durchblick habe,

Sollen wir drauf warten? Drauf wetten?
Warum frägst Du nicht im Forum von Rust? Die sollten deine Probleme 
schnell beantworten können. Da sind recht freundliche und kompetente 
Leute unterwegs.
Aber Obacht: Die wollen klar gestellte Fragen, die Spinner!

https://rust-lang.org/

von BirnKichler S. (Firma: privat) (max707)


Lesenswert?

Rbx schrieb:
> Man sieht ja auf einigen Internetseiten Rustup-code und wundert
> sich,
> dass Rustup in Linux (Fedora 42) nicht geht. Schaut man sich ein wenig
> um, steht man wieder mal wie der Ochs vorm Scheunentor.
> Andererseits, wenn ich schon ein wenig besseren Durchblick habe, möchte
> ich mich dann doch lieber auf die Community verlassen.
> Kann man das anders sehen?
Ja.
> (https://www.reddit.com/r/rust/comments/4inmpb/lets_talk_about_rustuprs/)

von Ein T. (ein_typ)


Lesenswert?

Hm, scheint als hätten wir unseren TO verloren... :-(

von Nick (b620ys)


Lesenswert?

Ein T. schrieb:
> Hm, scheint als hätten wir unseren TO verloren... :-(

Das ist ja ganz was neues hier!

von Ein T. (ein_typ)


Lesenswert?

Nick schrieb:
> Ein T. schrieb:
>> Hm, scheint als hätten wir unseren TO verloren... :-(
>
> Das ist ja ganz was neues hier!

Das ist leider wahr. Aber in diesem Fall mag ich den TO und mache mir 
Sorgen, ob es ihm gut geht. :-(

von Nick (b620ys)


Lesenswert?

Ein T. schrieb:
> Aber in diesem Fall mag ich den TO und mache mir
> Sorgen, ob es ihm gut geht. :-(

Das ehrt Dich. Versuch ihn zu kontaktieren. Hier get es scheinbar nicht.

von Rbx (rcx)


Lesenswert?

Ein T. schrieb:
> Deine Aussage, "dass Rustup in Linux (Fedora 42) nicht geht", kann ich
> daher in keiner Weise nachvollziehen. Bei mir hat alles reibungslos
> funktioniert. Könntest Du mir bitte erklären, wie Du zu Deiner Aussage
> kommst? Vielleicht können wir das ja aufklären. Danke.

Ich kann dein Herumgemache auch nicht nachvollziehen. rustc geht bei mir 
einwandfrei und reicht erstmal völlig. Den anderen Krempel brauche ich 
eigentlich nicht, und wollte nur mal Meinungen und Einschätzungen hören.
Bei Haskell gab es ja auch schon so ein Herumgehampel mit Cabal und 
Stack - sofern man Internet hat. Eigentlich ist das alles nur 
Beihilfe-Zeug, aber nicht so zentral, wie wichtige Programmierung oder 
Programmierkniffe oder Programmierpraxis an sich.
Bei K+R-C kann man z.B. gleich lernen, wie man Kryptocrack-Programme 
schreiben kann oder beim Erlenkötter C, wie eine Game-Engine in den 
Grundbausteinen funktioniert.

Bei Haskell oder Rust muss man sich aber erst eine Weile einarbeiten, um 
auf den Geschmack zu kommen, da stören Internet oder "Pflege"-Zusätze 
eigentlich nur.
(sofern man nicht übers Internet lernt).
Relativ gut kommt man (dokumentierbar) vorwärts, wenn man bestimmte 
bekannte C oder C++ Programme nimmt, und die nach Haskell oder Rust 
übersetzt.
Wobei Rust ja auch C und Assembler ersetzen möchte. Das zu vergleichen 
ist sicher auch interessant - aber die eigentlichen Stärken von Rust 
liegen wohl eher in der Parallelverarbeitung.

von Oliver S. (oliverso)


Lesenswert?

Rbx schrieb:
> Wobei Rust ja auch C und Assembler ersetzen möchte. Das zu vergleichen
> ist sicher auch interessant - aber die eigentlichen Stärken von Rust
> liegen wohl eher in der Parallelverarbeitung.

Nachdem der Ausgangsbeitrag ja nun schon eine völlig willkürliche 
Abfolge von zusammenhangslosen Wörtern war, geht’s jetzt nahtlos weiter. 
Irgendwie geht da was gründlich durcheinander.

Oliver

von Nick (b620ys)


Lesenswert?

Oliver S. schrieb:
> Irgendwie geht da was gründlich durcheinander.

Danke, seh ich auch so. Ich musste mich schon zurückhalten auf das 
Posting (zwei vor diesem) zu antworten.
"K&R C und Kryptocrack-Programme" miteinander zu verknüpfen, das schnall 
ich -als bekennender K&R "Hasser"- nicht.

"Erlenkötter C und game engine". Das Buch ist von 1985. Und hat wohl von 
zeitgemässen C so viel am Hut wie K&R. Nichts. Wie 1985 und game engine 
zusammenhängen ist mir auch nicht klar. Liegt bestimmt an mir.

Und dann von rust + C (OK, passt halbwegs zusammen, fehlt noch Zig) auf 
Haskel umzuschwenken. Haskel ist eine funktionale Programmiersprache. 
Ich hab mir mal Haskel angeschaut, da kann ich gleich APL nehmen. ICH 
komm mit Beidem nicht zurecht. Ich habs mal mit Ocaml probiert, das ist 
mir leider zu seltsam, die Infrastruktur obskur.*)

Und dann Programme von C auf Haskel übersetzen. Das sind zwei komplett 
orthogonale Paradigmen. Übersetzen lässt sich das (möglicherweise) 
irgendwie, geht aber dann an der Zielsprache komplett und vorsätzlich 
vorbei. Ich hab das mal probiert. Von C auf Ocaml. Wenn man fertig ist, 
kann man mit Neuschreiben weitermachen.
Ich hab das auch mal von C auf rust gemacht. Klappt besser, beim 
Borrowing fällt man dann immer wieder auf die Schnauze. Und merkt dann, 
dass man das doch besser neu schreibt und nur die Struktur behält. 
Obwohl C und rust nah beieinander stehen.

Aber wurscht!



*) In Ocaml sind die Quelltexte im UVZ "bin". Auf die Frage, warum es 
kein UVZ "src" dafür gibt, bekam ich die Antwort, "Weil man aus den 
sourcen binaries erzeugt". Das wurde von Anderen auch so gutgeheissen.

von Ein T. (ein_typ)


Lesenswert?

Puh, ein Glück, Du bist wieder da und es Dir anscheinend gut geht. :-)

Rbx schrieb:
> Ich kann dein Herumgemache auch nicht nachvollziehen. rustc geht bei mir
> einwandfrei und reicht erstmal völlig.

Nunja, Du hattest im Eröffnungsbeitrag geschrieben:

Rbx schrieb:
> Man sieht ja auf einigen Internetseiten Rustup-code und wundert sich,
> dass Rustup in Linux (Fedora 42) nicht geht.

Wegen Deiner Aussagen hatte ich mich gefragt, ob Rustup unter Linux 
allgemein oder unter Fedora 42 wirklich "nicht geht", wie Du gesagt 
hattest. Darum habe ich es ausprobiert und gesehen, daß das einwandfrei 
funktioniert. Dies wollte ich Dir nur mitteilen und Dir meine 
Unterstützung bei der Klärung eventueller Probleme anbieten.

> Den anderen Krempel brauche ich
> eigentlich nicht, und wollte nur mal Meinungen und Einschätzungen hören.

Diesbezüglich kann ich nur vermuten, daß Du diesen "anderen Krempel" 
zumindest teilweise allerspätestens dann benötigst, wenn Du Programme 
schreiben wirst, die Bibliotheken aus externen Quellen benutzen sollen. 
Dann wird Dir zumindest der Paketmanager cargo sicherlich eine Hilfe 
sein.

> Bei Haskell gab es ja auch schon so ein Herumgehampel mit Cabal und
> Stack - sofern man Internet hat.

Wenn ich das richtig verstanden habe, ist Cabal ein Paketmanager, 
ähnlich wie cargo. Stack verwaltet die Abhängigkeiten der Pakete und 
baut wohl auf Cabal auf bzw. benutzt Cabal als Bibliothek, kann das 
sein?

> Eigentlich ist das alles nur
> Beihilfe-Zeug, aber nicht so zentral, wie wichtige Programmierung oder
> Programmierkniffe oder Programmierpraxis an sich.

Naja, viele dieser Werkzeuge muß man in der Regel nicht unbedingt haben, 
aber am Ende erleichtern sie Aufgaben sicherlich enorm. Programmieren 
ist ja nicht nur das reine Schreiben von Code, oder?

> Bei K+R-C kann man z.B. gleich lernen, wie man Kryptocrack-Programme
> schreiben kann oder beim Erlenkötter C, wie eine Game-Engine in den
> Grundbausteinen funktioniert.

Hm... ich glaube nicht, daß Kryptoanalyse oder Gameengines sinnvolle 
Aufgaben für Einsteiger einer bestimmte Sprache oder gar ins 
Programmieren selbst sind. Ich meine, das sehen wir hier im Forum ja 
leider oft: Menschen, die zunächst voller Enthusiasmus sind und ein 
bestimmtes Projekt realisieren möchten, sich dabei aber hoffnungslos 
übernehmen und alsbald frustriert aufgeben.

> Bei Haskell oder Rust muss man sich aber erst eine Weile einarbeiten, um
> auf den Geschmack zu kommen, da stören Internet oder "Pflege"-Zusätze
> eigentlich nur.
> Relativ gut kommt man (dokumentierbar) vorwärts, wenn man bestimmte
> bekannte C oder C++ Programme nimmt, und die nach Haskell oder Rust
> übersetzt.

Möglicherweise, allerdings... ich kann da natürlich nur für mich 
persönlich sprechen, aber eine neue Programmiersprache zu lernen ist für 
mich nicht nur eine akademische Übung, sondern ich habe auch den 
Anspruch, diese Sprache in meiner beruflichen und privaten Praxis 
benutzen zu können. Insofern ist Rust für mich deutlich interessanter 
als Haskell, das -- berechtigt oder nicht -- doch eher ein Nischendasein 
zu führen scheint.

> Wobei Rust ja auch C und Assembler ersetzen möchte. Das zu vergleichen
> ist sicher auch interessant - aber die eigentlichen Stärken von Rust
> liegen wohl eher in der Parallelverarbeitung.

Bisher habe ich mich mit Rust noch nicht intensiver beschäftigt, aber 
was ich davon bislang für Gleichzeitigkeit und Parallelisierung gesehen 
habe, scheint sich noch nicht sehr wesentlich von dem zu unterscheiden, 
was ich von anderen Sprachen kenne. Da finde ich den Ansatz von Golang 
mit seinem Kerngedanken "Do not communicate by sharing memory; instead, 
share memory by communicating" [1] irgendwie spannender... und nach 
einer Umdenkphase auch viel angenehmer. ;-)

[1] https://go.dev/blog/codelab-share

von Nick (b620ys)


Lesenswert?

Ein T. schrieb:
> Diesbezüglich kann ich nur vermuten, daß Du diesen "anderen Krempel"
> zumindest teilweise allerspätestens dann benötigst, wenn Du Programme
> schreiben wirst,

Ich seh den "Krempel" von rust als Stärke. Das ist sauber strukturiert 
und funktioniert einfach für rust. Unabhängig davon wofür man es 
einsetzen will. Kein Manufacturer lock in, egal welche Platform man 
verwenden will. Keine Abweichungen vom Standard (C) oder spezielle 
compiler-pragmas. Da gibts halt einfach nur EIN rust. Und ich hoffe, 
dass das so bleibt.

von Ein T. (ein_typ)


Lesenswert?

Nick schrieb:
> Ich seh den "Krempel" von rust als Stärke. Das ist sauber strukturiert
> und funktioniert einfach für rust.

Naja, wenn es für Python funktionieren würde... wär doch komisch, oder? 
;-)

Aber Scherz beiseite: ich glaube, wir reden aneinander vorbei. Ich bezog 
mich mit dem "Krempel", da der TO von rustc gesprochen hatte, auf die 
Werkzeuge von Rust wie cargo et cetera. Welchen "Krempel" meinst Du?

von Nick (b620ys)


Lesenswert?

Ein T. schrieb:
> ich glaube, wir reden aneinander vorbei.

Nein. Ich mein schon auch z.B. cargo oder das eigentlich nicht 
vorhandene make. Oder den Zwang zur einzig wahren Formatierung. Das hat 
man sich schon gut überlegt und nicht so zusammengeschustert wie in 
OCaml.

Ein T. schrieb:
> Welchen "Krempel" meinst Du?

Genau den "Krempel" der Teil des Ganzen ist. Wer will, kann rust und 
alles drumrum als Krempel bezeichnen. Ich find es gut. Es ist halt nicht 
so billig zu erlernen wie z.b. Java oder Basic. :-)

von Ein T. (ein_typ)


Lesenswert?

Nick schrieb:
> Nein. Ich mein schon auch z.B. cargo oder das eigentlich nicht
> vorhandene make.

Ah, okay. Was make(1) angeht... ich finde es immer wieder verblüffend, 
wie lange sich das olle Ding hält.

> Genau den "Krempel" der Teil des Ganzen ist. Wer will, kann rust und
> alles drumrum als Krempel bezeichnen. Ich find es gut. Es ist halt nicht
> so billig zu erlernen wie z.b. Java oder Basic. :-)

Das liest sich jedenfalls interessant... ich glaube, das schaue ich mir 
mal genauer an. Andererseits, Java mit seinem OO-Zwang "billig zu 
erlernen" zu nennen, hat hier, wo OOP als Teufelszeug gilt, eine gewisse 
Komik. :-D

von Nick (b620ys)


Lesenswert?

Ein T. schrieb:
> ich glaube, das schaue ich mir mal genauer an.

Ja, mach das! Aber für Embedded z.Zt. eher nicht geeignet (also ich 
würds mir nicht antun). Allerdings gibt es eine Referenzplattform auf 
einem STM32.
https://docs.rust-embedded.org

Bei der Gelegenheit fällt Dir dann hoffentlich die IMHO gute Doku von 
rust auf.
Rust hat knallharte Regeln die auch durchgezogen werden.

> Andererseits, Java mit seinem OO-Zwang "billig zu
> erlernen" zu nennen, hat hier, wo OOP als Teufelszeug gilt, eine gewisse
> Komik. :-D

Wenn man von C++ kommt, dann find ich Java "billig". Ich hab damals[tm] 
den OOP-Hype mitgemacht. Also das funktioniert schon. Aber sein Platz 
ist eher der Desktop oder der Server. Mich interessiert Java nicht mehr. 
OOP ist oft genug wirklich sinnvoll. Vom Denkansatz her geht das aber 
selbst mit schnödem C.

von Norbert (der_norbert)


Lesenswert?

Ein T. schrieb:
> Ah, okay. Was make(1) angeht... ich finde es immer wieder verblüffend,
> wie lange sich das olle Ding hält.

Sicherlich noch viel länger als die meisten von uns sich halten werden. 
;-)

Und das ist auch gut so, schließlich wird es tagtäglich zig-tausendfach 
zur vollsten Zufriedenheit genutzt.

von Ein T. (ein_typ)


Lesenswert?

Nick schrieb:
> Ja, mach das!

:-)

> Aber für Embedded z.Zt. eher nicht geeignet

Embedded mach' ich eh nicht (mehr) so oft und wenn, ist Cpp mein Freund. 
:-)

> Bei der Gelegenheit fällt Dir dann hoffentlich die IMHO gute Doku von
> rust auf.
> Rust hat knallharte Regeln die auch durchgezogen werden.

Jo, hab' schon ein bisschen 'reingelesen, sieht richtig gut aus.

> Wenn man von C++ kommt, dann find ich Java "billig". Ich hab damals[tm]
> den OOP-Hype mitgemacht. Also das funktioniert schon.

Bitte nicht flashc verstehen: ich mag OOP sehr, mag mich aber nicht 
darauf festnageln lassen. Java mochte ich noch nie, diese Arbeit hätte 
ich damals lieber in Cpp investiert gesehen. :-)

> OOP ist oft genug wirklich sinnvoll. Vom Denkansatz her geht das aber
> selbst mit schnödem C.

Im Kern unterstützt OO doch weitgehend nur, was auch in den prozeduralen 
Sprachen als guter Stil gilt... und dazu kommt dann noch die so häufig 
überstrapazierte Vererbung. Aber wenn man sowas hier im Forum sagt, 
geben einem die anderen alten weißen Männer immer so viele Minuspunkte. 
:-)

von Rbx (rcx)


Lesenswert?

Ein T. schrieb:
> Bitte nicht flashc verstehen: ich mag OOP sehr, mag mich aber nicht
> darauf festnageln lassen. Java mochte ich noch nie, diese Arbeit hätte
> ich damals lieber in Cpp investiert gesehen. :-)

Ist aber kein Zeitverlust, weil OOP in C++ eher rudimentär implementiert 
ist. Viel wichtiger sind da die Templates oder die Polymorphie richtig 
einzusetzen.
Jedenfalls ist C++ nicht unbedingt die beste Programmiersprache um sich 
OOP tiefschürfend einzusaugen.
Darüberhinaus schiele ich gerade ein wenig nach D.
Ich meine, du hast ja Python, sonst könnte C# auch noch eine Empfehlung 
sein.

von Ein T. (ein_typ)


Lesenswert?

Rbx schrieb:
> Ist aber kein Zeitverlust, weil OOP in C++ eher rudimentär implementiert
> ist.

Oh... dabei gehen mit Cpp ein paar Sachen, die nicht einmal das 
hochgelobte Java kann. Was genau fehlt Dir denn bei Cpp?

> Viel wichtiger sind da die Templates oder die Polymorphie richtig
> einzusetzen.

Ich glaube, es ist immer wichtig, die passenden Werkzeuge zu wählen und 
sie dann natürlich auch richtig einzusetzen.

> Jedenfalls ist C++ nicht unbedingt die beste Programmiersprache um sich
> OOP tiefschürfend einzusaugen.

Ach, bei mir hat es mit C, Cpp und Perl -- dessen nachträglich 
angeflanschte Objektorientierung wirklich lustig war, da mußte man seine 
Objekte segnen (bless) -- IMHO ziemlich gut geklappt. Aber ich habe ja 
auch noch ein paar andere Sprachen, unter anderem auch Java. In diesem 
Zusammenhang finde ich auch Golang mit einer OOP ohne Vererbung und 
einem ganz eigenen Verständnis von Interfaces ziemlich spannend. :-)

> Darüberhinaus schiele ich gerade ein wenig nach D.

Kann es eventuell möglicherweise vielleicht sein, daß Du eine gewisse... 
Neigung zu Exoten hast? :-)

> Ich meine, du hast ja Python, sonst könnte C# auch noch eine Empfehlung
> sein.

Ach, wie gesagt, ich hab' noch ein paar andere Sprachen... aber klar, 
Python hat schon einen ziemlich hohen Coolheitsfaktor...  ;-)

von Rbx (rcx)


Lesenswert?

Ein T. schrieb:
> Oh... dabei gehen mit Cpp ein paar Sachen, die nicht einmal das
> hochgelobte Java kann. Was genau fehlt Dir denn bei Cpp?

Was willst du da jetzt hören? C++ ist komplex und OOP ist ebenfalls 
reichlich komplex, erst recht vor dem Hintergrund der Implementierung.
Da sind doch Programmierspachen wie Java oder Objective-C erstmal 
wesentlich hilfreicher um einen gewissen Überblick über OOP zu bekommen.
Ganz abgesehen davon stehen bei Java und Objective-C das Nachrichten 
austauschen eher im Vordergrund.
Dazu gehören auch eine gewisse Strenge und Demut, da interessiert es 
erstmal nicht, was man mit C++ sonst noch alles anstellen kann oder 
könnte.
Spannender wäre in diesem Zusammenhang vielleicht, was man hinsichtlich 
OOP mit Ruby alles anstellen könnte ;)

Die KI kann man irgendwie gar nicht fragen, wie das mit dem OOP in Rust 
ist.
Da landet man letztendlich wieder mal bei:
https://www.reddit.com/r/rust/comments/1pyv0vb/thoughts_on_oop/?tl=de
https://www.reddit.com/r/rust/comments/1h48us2/opinions_on_rust_in_scientific_settings/
;)

SPJ meinte mal sowas wie die "Signatur" wäre das UML in Haskell.
Naja, man muss ja Haskell nicht mögen, aber sowas wie Compiler 
programmieren erschien mir früher viel schwieriger. Dank einiger 
Haskell-Papers verstehe ich solche Zusammenhänge deutlich besser.

Exploring Verse, Haskell, Language Design and Teaching (with Simon 
Peyton Jones)
https://www.youtube.com/watch?v=UBgam9XUHs0

Ein kleiner Anfang hinsichtlich schneller compilieren:
Solving Rust’s biggest problem
https://www.youtube.com/watch?v=P1cJJMLMEKk

von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

Rbx schrieb:
> Die KI kann man irgendwie gar nicht fragen, wie das mit dem OOP in Rust
> ist.
Welche hast du denn gefragt?

Hast du einfach mal in die Doku geguckt? Kapitel 18.
https://doc.rust-lang.org/book/ch18-00-oop.html
https://doc.rust-lang.org/book/ch18-01-what-is-oo.html
https://doc.rust-lang.org/book/ch18-02-trait-objects.html
https://doc.rust-lang.org/book/ch18-03-oo-design-patterns.html

von Ein T. (ein_typ)


Lesenswert?

Rbx schrieb:
> Was willst du da jetzt hören?

Naja, Du hattest geschrieben, daß Deiner Meinung nach:

Rbx schrieb:
> [...] OOP in C++ eher rudimentär implementiert ist.

Wenn ich "rudimentär" jetzt so interpretiere, wie die Google-KI das 
macht ("unvollständig, unvollkommen, nur in Ansätzen [vorhanden], 
unzureichend"), dann scheint Dir dabei doch etwas zu fehlen. Da wüßte 
ich gern, was.

> C++ ist komplex und OOP ist ebenfalls
> reichlich komplex, erst recht vor dem Hintergrund der Implementierung.

Hm... okay, Cpp hat seine Eigenheiten, aber die OOP als solche empfinde 
ich jetzt nicht als übermäßig komplex -- im Gegenteil finde ich, OOP 
fühlt sich häufig viel natürlicher an als prozedurale oder funktionale 
Programmierung.

> Da sind doch Programmierspachen wie Java oder Objective-C erstmal
> wesentlich hilfreicher um einen gewissen Überblick über OOP zu bekommen.

Objective-C kenne ich nicht, aber... die OOP von Java steht hinsichtlich 
ihrer Komplexität der von Cpp wenig nach, finde ich. Ok, in Java gibt es 
keine echte Mehrfachvererbung wie in Cpp oder Python, aber die braucht 
man ja eher selten, und kann in Java etwas Ähnliches mit Interfaces 
abbilden.

> Ganz abgesehen davon stehen bei Java und Objective-C das Nachrichten
> austauschen eher im Vordergrund.

Kannst Du das bitte näher erläutern? DAnke.

> Spannender wäre in diesem Zusammenhang vielleicht, was man hinsichtlich
> OOP mit Ruby alles anstellen könnte ;)

Ruby habe ich mir vor einigen Jahren mal näher angeschaut, als mein Team 
eine gemeinsame Skriptsprache etablieren wollte und Ruby einer der 
Kandidaten war. Grundsätzlich würde ich aus der Erinnerung heraus 
vermuten, daß dabei ziemlich ähnliche Dinge möglich sind wie mit anderen 
OO-Sprachen.

> Die KI kann man irgendwie gar nicht fragen, wie das mit dem OOP in Rust
> ist.

Du kannst in die Dokumentation [1] schauen. Ich hab' mich noch nicht 
besonders tief in Rust hineingefuchst -- und habe gerade auch andere 
Dinge zu erledigen -- aber Rust scheint ein OO-Modell ähnlich dem von 
Golang zu haben, zusätzlich allerdings sogenannte Traits. Structs und 
Interfaces sind auch aus den anderen OO-Sprachen bekannt und Traits sind 
Funktionen, die mehrere Structs benutzen können, soweit ich das bisher 
verstanden habe. Eine Vererbung, so wie wir sie kennen, scheint es nicht 
zu geben, und wenngleich ich Vererbung als nützliches Feature sehe, weiß 
ich auch, wie oft sie mißbraucht wird -- darum verzichten beispielsweise 
Golang und anscheinend auch Rust darauf.

[1] https://doc.rust-lang.org/book/ch05-03-method-syntax.html

> Da landet man letztendlich wieder mal bei:
> https://www.reddit.com/r/rust/comments/1pyv0vb/thoughts_on_oop/?tl=de
> 
https://www.reddit.com/r/rust/comments/1h48us2/opinions_on_rust_in_scientific_settings/

Warum auch immer, lande ich eher selten auf Reddit. :-)

> SPJ meinte mal sowas wie die "Signatur" wäre das UML in Haskell.

Was ist SPJ? Und ist mit "UML" die Unified Modeling Language gemeint? 
Welche Zusammenhänge gibt es zwischen der Unified Modeling Language und 
Haskell?

> Naja, man muss ja Haskell nicht mögen, aber sowas wie Compiler
> programmieren erschien mir früher viel schwieriger. Dank einiger
> Haskell-Papers verstehe ich solche Zusammenhänge deutlich besser.

Ich hab' weder etwas für, noch gegen Haskell. ich weiß darüber nicht 
viel. Es ist wohl eine funktionale Programmiersprache, mit einer Syntax, 
die sich mir nicht auf Anhieb erschließen möchte, und das von mir gerne 
und oft eingesetzte Programm pandoc(1) ist wohl damit geschrieben. 
Außerdem sollen Programme, die in Haskell geschrieben worden sind, nicht 
besonders performant sein -- sofern ich mich recht entsinne, hattest Du 
das hier mal erwähnt?

> Exploring Verse, Haskell, Language Design and Teaching (with Simon
> Peyton Jones)
> https://www.youtube.com/watch?v=UBgam9XUHs0
>
> Ein kleiner Anfang hinsichtlich schneller compilieren:
> Solving Rust’s biggest problem
> https://www.youtube.com/watch?v=P1cJJMLMEKk

Danke für die Links, die habe ich mir mal gespeichert. Aber mein 
Interesse am Compilerbau steht auf meiner Liste aktuell sehr, sehr weit 
hinten. :-)

von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

Ein T. schrieb:
> zusätzlich allerdings sogenannte Traits. Structs und
> Interfaces sind auch aus den anderen OO-Sprachen bekannt und Traits sind
> Funktionen, die mehrere Structs benutzen können, soweit ich das bisher
> verstanden habe.

Rust hat 3 Sachen:
- Traits
- Structs
- Enums

Traits müssen auf Structs oder Enums implementiert werden und sind am 
besten als Interface zu verstehen. Von einem Trait kann kein Objekt 
erstellt werden. Traits können ein Default verhalten bereitstellen, 
müssen es aber nicht. Methoden können für Structs und Enums 
implementiert werden.

Ein T. schrieb:
> Eine Vererbung, so wie wir sie kennen, scheint es nicht
> zu geben
Das ist richtig. Es wird composition over inheritance bevorzugt.

: Bearbeitet durch User
von Ein T. (ein_typ)


Lesenswert?

Kaj G. schrieb:
> Traits müssen auf Structs oder Enums implementiert werden und sind am
> besten als Interface zu verstehen. Von einem Trait kann kein Objekt
> erstellt werden. Traits können ein Default verhalten bereitstellen,
> müssen es aber nicht. Methoden können für Structs und Enums
> implementiert werden.

Ja, das hatte ich in Deinen Links (danke dafür!) auch mittlerweile 
gelesen, Traits sind offenbar so etwas wie Golang-Interfaces auf 
Steroiden. :-)

> Das ist richtig. Es wird composition over inheritance bevorzugt.

Auch das erinnert mich stark an Golang... :-)

von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

Korrektur:
"Vererbung" gibt es in beschränktem Maße, mit Derive:
1
#[derive(Debug, Copy, ...)]
2
struct MyStruct {
3
...
4
}

Das wird an vielen Stellen benutz.
Wenn ein Objekt mit <>= Operatoren Vergleichbar sein soll:
1
#[derive(Eq, PartialEq)]
2
struct MyStruct {
3
...
4
}

wenn ein Objekt mit Serde (de)serialisierbar sein soll.
1
#[derive(serde::Deserialize, serde::Serialize)]
2
struct MyStruct {
3
...
4
}

Wobei ich mich nie damit beschäftigt habe, was die Voraussetzungen sind, 
damit etwas per Derive benutzt werden kann. Und ich verstehe es mehr als 
"short cut" zu einem
1
impl serde::Deserialize for MyStruct {
2
...
3
}
4
5
impl serde::Serialize for MyStruct {
6
...
7
}

Ein T. schrieb:
> danke dafür!
Gerne :)

von Nick (b620ys)


Lesenswert?

Ein T. schrieb:
> Objective-C kenne ich nicht, aber...

ObjC ist eine schöne Sprache. Aber ich sehe keinen Sinn darin heute noch 
dafür Energie reinzustecken. Das wird kaum unterstützt, ausser man 
greift auf die üblichen Kommandozeilen-Geschichten zurück.
ObjC ist auch irgendwie eigenartig in der Syntax. Man muss bei jedem 
Funktionsaufruf den Parameternamen und den Parameter angeben. Änlich wie 
man es bei Verilog machen kann. Nur, man muss.
Die OOP-Geschichten sind einfach angelegt. Man könnte auch rudimentär 
sagen.
Was aber extrem witzig ist, es ist eine dynamische Sprache. Nein, in C++ 
ist das <dynamic> (oder wie das war) eine Tatsachenvortäuschen. Das 
<dynamic> muss zu compile-time auflösbar sein. In ObjC passiert das zur 
Laufzeit. Dazu weist ObjC für Variablen keinen Speicherplatz zu, 
sondern bildet einen hash. Zur Laufzeit wird dann über den hash auf die 
Variable zugegriffen. Man kann sogar zur Laufzeit einen Variablennamen 
aus Strings zusammenfassen, sich den hash geben lassen und dann auf 
diese Variable zugreifen.

Ach ja, man muss sich damit abgeben, dass die Tasten [ und ] extremen 
Verschleiß unterliegen. Gefühlt sind 10% des codes eckige Klammern. :-]]

Ich hoffe, ich verwechsel das folgende jetzt nicht mit einer anderen 
Sprache:
Das dynamische Verhalten geht sogar so weit, dass man zur Laufzeit 
nachschauen kann ob in einem record ein bestimmtes Feld existiert und 
kann auch nachträglich ein beliebiges hinzufügen. Damit kann man u.a. 
Vererbung implementieren.
Mir hat die Arbeit mit ObjC riesen Spaß gemacht und ich trauere dem ein 
wenig hinterher.

rust und OOP:
Vorsicht! Wenn man von C++ kommt, sollte man das C++ lieber komplett 
vergessen. C++ arbeitet mit Pointern, und die gibt es in Rust einfach 
nicht. Man kann das umschiffen mit unsafe code, aber da kommt nur massiv 
Ärger dabei raus. Sinnvoll geht es nur mit enums. Wobei die enums 
komplett nichts mit den enums von C zu tun haben. Das nur als Warnung.

Die pointer innerhalb von z.B. arrays oder strings umgeht rust mit 
slices. Ich find die sehr genial. Die slices sind sicher 
(Pointerüberlauf unmöglich), aber fast genauso effektiv.
Man muss sich schon umgewöhnen wenn man von C kommt. Manches existiert 
einfach nicht, oder wird anders gemacht. Auch wenn man glaubt, dass rust 
C-ähnlich ist. Ja und Nein. Und mit der Brechstange kommt man in rust 
nicht weiter. In C ist die Brechstange oft ein nützliches (und 
gefährliches) Mittel. rust bezeichnet sich als sichere 
Programmiersprache und setzt das auch gnadenlos durch.
BTDT.

von Rbx (rcx)


Lesenswert?

Kaj G. schrieb:
> Rbx schrieb:
>> Die KI kann man irgendwie gar nicht fragen, wie das mit dem OOP in Rust
>> ist.
> Welche hast du denn gefragt?

Die übliche halt, Google eben. Mein Hintergrundgedanke dazu war u.a. MPI 
oder openMP, ATLAS in Octave - oder was sich sonst so bei C-Sprachen 
anbietet, um die Laufzeit von Programmen schneller ablaufen zu lassen.

Bei Haskell lohnt es sich, die wissenschaftlichen Papers von SPJ zur 
Parallelisierung des GHC zu lesen, das gibt Einblicke darüber, dass man 
sich bei der Parallelisierung mit Haskell auch schon größere Mühe 
gemacht hatte.

Immerhin gib es bei Rust sowas:
https://github.com/rsmpi/rsmpi

von Ein T. (ein_typ)


Lesenswert?

Nick schrieb:
> ObjC ist eine schöne Sprache. Aber ich sehe keinen Sinn darin heute noch
> dafür Energie reinzustecken. Das wird kaum unterstützt, ausser man
> greift auf die üblichen Kommandozeilen-Geschichten zurück.

ObjC hab' ich irgendwie immer mit Apple assoziiert -- und ich mag Macs, 
wurde aber nach dem HP 97 und dem VC20 schon früh mit UNIX sozialisiert. 
:-)

> Was aber extrem witzig ist, es ist eine dynamische Sprache.

Liest sich interessant, aber... wenn ich mir alles näher anschaue, das 
ich interessant finde, dann komme ich ja zu gar nichts mehr. :-)

> rust und OOP:
> Vorsicht! Wenn man von C++ kommt, sollte man das C++ lieber komplett
> vergessen. C++ arbeitet mit Pointern, und die gibt es in Rust einfach
> nicht. Man kann das umschiffen mit unsafe code, aber da kommt nur massiv
> Ärger dabei raus. Sinnvoll geht es nur mit enums. Wobei die enums
> komplett nichts mit den enums von C zu tun haben. Das nur als Warnung.

Danke für die Warnung, aber... ich mag C++ und seine OOP zwar, aber ich 
bin nicht sonderlich darauf fixiert, und komme ja auch mit Java, Python, 
Golang, und früher mit Perl5, mit ihren OOP-Varianten und ihren 
bisweilen subtilen Unterschieden gut zurande. Insbesondere Go scheint 
Rust bei der OO zu ähneln -- und Slices gibt es auch in Go. Lustig unter 
Go ist, daß sogar Funktionen Methoden haben können [1]...

Rust und ich werden -- wenn es soweit ist -- vermutlich schnell Freunde, 
da mache ich mir wenig Sorgen. Auf der anderen Seite bleibt Go für mich 
aktuell wichtiger, weil im Moment so viel Infrastrukturzeug damit 
entwickelt wurde: Kubernetes, Docker, Podman, Traefik, Caddy, um nur ein 
paar zu nennen.

[1] https://kinbiko.com/posts/2021-01-10-function-types-in-go/

von Rbx (rcx)


Lesenswert?

Ein T. schrieb:
> Rust und ich werden -- wenn es soweit ist -- vermutlich schnell Freunde,

Der Hoare ist allerdings später zu Swift übergelaufen.

Ich bin mir jetzt auch nicht sicher, ob die Entwurfsmuster so gut zu 
Rust passen, das meiste dazu läuft eher über OO.
Nun ist man bei Rust auf jeden Fall auf einer sichereren Seite, wenn man 
sich mit dem Real World Haskell-Buch Kapitel 4 
(https://book.realworldhaskell.org/read/) befasst hat. Kommt mir im 
Moment wie Kinderkram vor - aber damals brauchte ich schon ein paar 
Tage, wenn nicht Wochen, damit fertig zu werden.
Was ist daran so besonders? Naja, bekommt auf jeden Fall schon mal eine 
Ahnung, welche Art von Jonglage sich mit den "Typen" so anstellen 
lassen.
Da ist dann das Beschäftigen mit dem Lambda-Kalkül schon etwas 
beruhigender.
Netterweise kann man Inline-Assembly in Rust machen - spricht schon mal 
für Rust ;)

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Nick schrieb:

> Vorsicht! Wenn man von C++ kommt, sollte man das C++ lieber komplett
> vergessen. C++ arbeitet mit Pointern

Nein. Es kann mit Zeigern arbeiten. Das ist eben die Erbsünde der 
gewollten C-Komptibilität. Sauberer C++-Code braucht keine Zeiger.

Das Problem bei C++ ist einfach: Es ist unendlich schwer, das sicher zu 
verwenden. Denn es schleppt so ziemlich alle Unsicherheiten seit Asm mit 
und macht sie für den Programmierer jederzeit leicht verfügbar. Nur mit 
sehr viel Disziplin kann man C++ sicher bekommen.

Allerdings: bei Rust sieht das letztlich nicht viel anders aus. Da wird 
die Unsicherheit eigentlich auch nur aus dem Sprachumfang ausgelagert 
und in die importierte Softwaremodule verschoben. Man sieht es also 
nicht mehr so leicht. Das ist eigentlich auch schon alles.

Nur theoretisch ist also Rust wenigstens Speicher-sicher. Wenn nix 
importiert werden muss. Praktisch muß aber fast immer was importiert 
werden. All die Lücken in den importierten Teilen kann also auch 
Rust-Verwendung nicht beheben.

Das allerdings ist auch wieder nix wirklich neues. Es gab ja schon das 
Konzept der "managed"-Sprachen (Java, C# usw.). Aber bei denen ist es 
letztlich ganz genauso. Solange sie nix importieren, sind sie nutzlos. 
Und wenn sie was importieren, ist der Nutzen des Managing eher begrenzt. 
Bestenfalls für den Teil des Codes wirksam, der in der jeweiligen 
Sprache verfasst wurde.

von Harald K. (kirnbichler)


Lesenswert?

Ob S. schrieb:
> Das Problem bei C++ ist einfach: Es ist unendlich schwer, das sicher zu
> verwenden.

Verwende doch einfach dein früheres Pseudonym weiter, dann kommt man 
nicht auf die Idee, Du könntest irgendwas sachliches über 
Programmiersprachen schreiben.

von Nick (b620ys)


Lesenswert?

Ob S. schrieb:
> Nein. Es kann mit Zeigern arbeiten. Das ist eben die Erbsünde der
> gewollten C-Komptibilität.

In rust geht der gewollte und/oder notwendige "Blödsinn" mit Zeigern der 
aus C bekannt ist nicht. Selbst mit unsave wirds es schwierig.

Ob S. schrieb:
> Sauberer C++-Code braucht keine Zeiger.

Geniales Argument! Es hat aber unsichere Zeiger.
Ich selbst verwende schon ewig kein C++ mehr. Die Sprache ist völlig aus 
dem Ruder gelaufen. Und mir fällt dazu immer Stroustrup ein, als er auf 
einem Vortrag sinngemäß sagte: Wenn ich gewusst hätte was aus C++ wird, 
hätte ich es nicht angefangen.

von Harald K. (kirnbichler)


Lesenswert?

Nick schrieb:
> Geniales Argument!

Sich mit "C-Hater" über Programmiersprachen zu unterhalten ist ähnlich 
sinnlos, wie mit einer Taube Schach spielen zu wollen - irgendwann wirft 
sie alle Figuren um und kackt aufs Schachbrett.

von Nemopuk (nemopuk)


Lesenswert?

Ob S. schrieb:
> Es kann mit Zeigern arbeiten. Das ist eben die Erbsünde der gewollten
> C-Komptibilität. Sauberer C++-Code braucht keine Zeiger.

Googles junge Go Sprache (die extra für den Einsatz unerfahrener 
Entwickler konzipiert wurde), setzt ebenfalls fest auf Zeiger. 
Referenzen hat man weg gelassen. Alles was bei der Übergabe nicht 
kopiert werden soll geht über Zeiger. Und kopierte structs als Argument 
sind tückisch, weil es keine deep Kopien sind. Also erleben Zeiger ein 
regelrechtes Revival in Go.

: Bearbeitet durch User
von Ein T. (ein_typ)


Lesenswert?

Rbx schrieb:
> Die übliche halt, Google eben. Mein Hintergrundgedanke dazu war u.a. MPI
> oder openMP, ATLAS in Octave - oder was sich sonst so bei C-Sprachen
> anbietet, um die Laufzeit von Programmen schneller ablaufen zu lassen.

Für die Parallelisierung von Programmen gibt es zunächst zwei 
altbewährte Techniken, nämlich Multiprocessing und Multithreading.

Du hingegen sprichst jetzt zum wiederholten Mal von MPI. Warum 
eigentlich?

von Ein T. (ein_typ)


Lesenswert?

Rbx schrieb:
> Ich bin mir jetzt auch nicht sicher, ob die Entwurfsmuster so gut zu
> Rust passen, das meiste dazu läuft eher über OO.

Mir fällt eine ganze Reihe von GoF-Entwurfsmustern ein, die sich 
zumindest mit Golang leicht realisieren lassen. Da der Rust-Weg dem von 
Golang sehr ähnlich zu sein scheint, würde ich da wenig Probleme 
erwarten.

> Nun ist man bei Rust auf jeden Fall auf einer sichereren Seite, wenn man
> sich mit dem Real World Haskell-Buch Kapitel 4
> (https://book.realworldhaskell.org/read/) befasst hat.

Man soll ein Haskell-Buch lesen, um Rust zu lernen?

> Netterweise kann man Inline-Assembly in Rust machen - spricht schon mal
> für Rust ;)

Ob es ein besonderes Merkmal einer Programmiersprache ist, eine andere 
Sprache darin einbetten zu können... hm, hm, hm.

von Ein T. (ein_typ)


Lesenswert?

Nemopuk schrieb:
> Googles junge Go Sprache (die extra für den Einsatz unerfahrener
> Entwickler konzipiert wurde), setzt ebenfalls fest auf Zeiger.
> Referenzen hat man weg gelassen. Alles was bei der Übergabe nicht
> kopiert werden soll geht über Zeiger. Und kopierte structs als Argument
> sind tückisch, weil es keine deep Kopien sind. Also erleben Zeiger ein
> regelrechtes Revival in Go.

Naja, die schwierigen Teile wie die Zeigerarithmetik haben wie 
weggelassen, das eliminiert zumindest einige der fehleranfälligeren 
Aspekte -- und für Arrays / Slices und Maps gibt es native Datentypen. 
Andererseits kann man  Golangs Zeiger gewinnbringend nutzen, um unnötige 
Kopien (Kontextwechsel!) etwa bei Methodenaufrufen oder dem Messaging 
über Channels zu vermeiden.

Okay, nach den Erfahrungen mit C kann ich schon irgendwo nachvollziehen, 
daß manche Leute beim Wort "Zeiger" gerne die Nase rümpfen. Aber 
nichtsdestotrotz können Zeiger, mit Bedacht genutzt, ein sehr nützliches 
Werkzeug sein.

von Ein T. (ein_typ)


Lesenswert?

Harald K. schrieb:
> Nick schrieb:
>> Geniales Argument!
>
> Sich mit "C-Hater" über Programmiersprachen zu unterhalten ist ähnlich
> sinnlos, wie mit einer Taube Schach spielen zu wollen - irgendwann wirft
> sie alle Figuren um und kackt aufs Schachbrett.

Naja, irgendwann... beim C-Haider ist das der Eröffnungszug. :-)

von Rbx (rcx)


Lesenswert?

Ein T. schrieb:
> Du hingegen sprichst jetzt zum wiederholten Mal von MPI. Warum
> eigentlich?

Warum eigentlich nicht? Wäre zumindest ein Hintergrund, am Ende doch 
lieber Fortran zu nehmen.

Aber es gibt natürlich auch Leute, die denken, die kommen mit Python 
überall hin obwohl die Grafikkartenschnittstelle bei Cuda nach wie vor C 
und C++ vorgibt.
Ist natürlich auch eine nette Sache mit Wrappern für x und y 
nicht-C-oder-C++-Programmiersprache - sofern das Problem selber 
mitmacht. Für Haskell musste man ja auch erstmal suchen welche Programme 
die Vorteile zeigen - während auf der anderen Seite die Low-Level-Ebene 
völlig außen vor bleibt und die Anbindung außer an C ->naja..
(oder Grafik bei Haskell, einfaches Plotten, z.B. wie bei Octave oder 
Python, müsste doch auch gehen - scheint aber keinen Vorrang zu haben, 
Rechnen mit Hexzahlen nicht, Spiele auch nicht oder professionelle 
Programme mit Industriestandard erst recht nicht - allenfalls mühsam 
zusammengesucht als POC.)
Und apropos Low-Level-Ebene:
Jetzt kann man bei Rust direkt an ein Code-Fragment dranschreiben: 
"Unsafe".
Weißt du wo der Vorteil dieser Geschichte ist?
Früher bei Spickzetteln meinte mal eine Lehrerin, die Spickzettel haben 
den Vorteil, dass man die zu merkenden Sachen zuerstmal aufschreiben 
muss. Mit etwas Glück braucht es anschließend den Spickzettel gar nicht 
mehr.

Überhaupt, man kann so tolle Sachen mit LEA machen - da darf ich aber 
gar nicht lange drüber nachdenken, sonst lande ich am Ende doch wieder 
bei der Suche nach Möglichkeiten für Linux-Assembly und dann findet man 
zuerst oft Seiten wie
https://www.hackingarticles.in/64-bit-linux-assembly-and-shellcoding/

Ein T. schrieb:
> Man soll ein Haskell-Buch lesen, um Rust zu lernen?

Ne, nur das verlinkte Kapitel 4 verstehen.
Man könnte sich theoretisch auch damit beschäftigen:
https://ocaml.org/

Aber jetzt würde ich sagen, schauen wir uns doch einfach mal Rust 
genauer an.
Bei Println! fragt man sich ein wenig, wo das "#" vorm Ausrufezeichen 
bleibt.

Bei PC-Assembler hat man allerdings auch nicht alles an Firlefanz im 
Griff, z.B. brauchte man üblicherweise die recht umfangreiche 
Interrupt-Liste von Ralf Brown.
Oder auch DOS hatte seine eigenen Interrupts oder eben verschiedene 
Programme.
Spätere Compilerpackete hatten sich auch um den Segmentteil gekümmert, 
so dass man das nicht mehr selber machen musste.

von Nemopuk (nemopuk)


Lesenswert?

Rbx schrieb:
> Bei PC-Assembler ... brauchte man üblicherweise die recht umfangreiche
> Interrupt-Liste von Ralf Brown.

Diese Zeiten sind seit zig Jahren vorbei, das war im letzten 
Jahrtausend. Unter Windows, Linux, BSD, ... ruft man OS Funktionen ganz 
sicher nicht mehr per Interrupt auf.

: Bearbeitet durch User
von Nick (b620ys)


Lesenswert?

Nemopuk schrieb:
> ruft man OS Funktionen ganz
> sicher nicht mehr per Interrupt auf.

Doch, wenn man Spiele mit Haskell programmiert.

von Ein T. (ein_typ)


Lesenswert?

Rbx schrieb:
> Ein T. schrieb:
>> Du hingegen sprichst jetzt zum wiederholten Mal von MPI. Warum
>> eigentlich?
>
> Warum eigentlich nicht? Wäre zumindest ein Hintergrund, am Ende doch
> lieber Fortran zu nehmen.

Nee, sorry, vor FORTRAN bin ich FORTgeRANnt. :-)

> Aber es gibt natürlich auch Leute, die denken, die kommen mit Python
> überall hin obwohl die Grafikkartenschnittstelle bei Cuda nach wie vor C
> und C++ vorgibt.

Es war eines der wichtigsten Designziele von Python und ist bis heute 
eine seiner großen Stärken, eine gute Glue-Sprache zu sein.

> Und apropos Low-Level-Ebene:
> Jetzt kann man bei Rust direkt an ein Code-Fragment dranschreiben:
> "Unsafe". Weißt du wo der Vorteil dieser Geschichte ist?

Mir fallen da mehrere Punkte ein, welche(n) meinst Du?

> Überhaupt, man kann so tolle Sachen mit LEA machen

Man kann mit vielen Dingen tolle Sachen machen. Bestimmt auch mit Lea, 
aber die habe ich seit unserer Pfadfinderzeit leider nicht mehr gesehen, 
deswegen mach ich sowas heute lieber mit meiner wunderbaren Sabrina. :-)

> Ein T. schrieb:
>> Man soll ein Haskell-Buch lesen, um Rust zu lernen?
>
> Ne, nur das verlinkte Kapitel 4 verstehen.
> Man könnte sich theoretisch auch damit beschäftigen:
> https://ocaml.org/

Ja, das könnte man theoretisch machen, und wenn man möchte, sicherlich 
auch praktisch. Allerdings stehe ich diesbezüglich leider immer wieder 
vor einem riesigen Problem, daß mein Tag nämlich leider nur 24 Stunden 
hat.

> Aber jetzt würde ich sagen, schauen wir uns doch einfach mal Rust
> genauer an.
> Bei Println! fragt man sich ein wenig, wo das "#" vorm Ausrufezeichen
> bleibt.

Ehrlich gesagt glaube ich nicht, daß ich mich einer Programmiersprache 
mit syntaktischen Betrachtungen nähern möchte... jedenfalls, solange wir 
nicht über alte Versionen einer Sprache reden, vor der ich FORTgeRANnt 
bin.

> Bei PC-Assembler hat man allerdings auch nicht alles an Firlefanz im
> Griff, z.B. brauchte man üblicherweise die recht umfangreiche
> Interrupt-Liste von Ralf Brown.

Bei PC-Assembler hat man aber auch die Möglichkeit, es nur dann zu 
benutzen, wenn man es wirklich braucht.

> Oder auch DOS hatte seine eigenen Interrupts oder eben verschiedene
> Programme.

Beides haben IIRC aber auch Linux, Solaris und die BSDs...

> Spätere Compilerpackete hatten sich auch um den Segmentteil gekümmert,
> so dass man das nicht mehr selber machen musste.

Das machen Compiler sogar heute noch. Das finde ich super, weil meine 
Zeit (siehe oben) beschränkt ist, und ich vor allem deswegen mit einem 
Computer arbeite, damit er tut, was er besser kann als ich. :-)

Wie dem auch sei: wie Du vielleicht an meinen mitunter flapsigen 
Antworten erkennen kannst, fällt es mir leider zunehmend schwer, Deinen 
Gedanken und Ausführungen zu folgen. Das liegt natürlich an mir und 
meinem mangelnden Intellekt, aber bitte sei doch etwas deutlicher. 
Dankeschön!

von Nick (b620ys)


Lesenswert?

Ein T. schrieb:
> Das liegt natürlich an mir und meinem mangelnden Intellekt,

Nein, das liegt an mir.

von Roland F. (rhf)


Lesenswert?

Hallo,
Ein T. schrieb:
> Das liegt natürlich an mir und meinem mangelnden Intellekt...

Und ich dachte es geht nur mir so.

rhf

: Bearbeitet durch User
von Rbx (rcx)


Lesenswert?

Ein T. schrieb:
> aber bitte sei doch etwas deutlicher.
> Dankeschön!

Und du könntest deine Fragen in Threads auch mal genauer spezifizieren, 
sonst müsste man glauben, dass du das nur machst, um den Leuten auf die 
Füsse zu treten, damit die herummaulen.

..ach so, hier noch ein Link, über den ich gestolpert bin:
https://github.com/rust-unofficial/awesome-rust

Nemopuk schrieb:
> Diese Zeiten sind seit zig Jahren vorbei, das war im letzten
> Jahrtausend. Unter Windows, Linux, BSD, ... ruft man OS Funktionen ganz
> sicher nicht mehr per Interrupt auf.

Du hast keine Ahnung, komische grobe Schubladen du hast.
Bei Rust auf MCs muss man wohl auch alles, auch bei blinki blinki auf 
"unsafe" laufen lassen. Diesbezüglich wollte ich mal Emails schreiben - 
..
Allerdings denke ich im Moment etwas über das alte C Programm mit 
Celsius und Fahrenheit nach. Da könnte man aktuell wohl noch eine 
Version mit Rankine dazunehmen ;)

von Harald K. (kirnbichler)


Lesenswert?

Rbx schrieb:
> Da könnte man aktuell wohl noch eine
> Version mit Rankine dazunehmen

Réaumur nicht vergessen.

von Nick (b620ys)


Lesenswert?

Rbx schrieb:
> Bei Rust auf MCs muss man wohl auch alles, auch bei blinki blinki auf
> "unsafe" laufen lassen.

Geht das in Haskell oder OCaml auch?
Ach so, damit kann man kein barebone "Betriebssystem" schreiben.
1
static mut COUNTER: u32 = 0;
2
3
#[entry]
4
fn main() -> ! {
5
    set_timer_1hz();
6
    let mut last_state = false;
7
    loop {
8
        let state = read_signal_level();
9
        if state && !last_state {
10
            // New critical section ensures synchronised access to COUNTER
11
            cortex_m::interrupt::free(|_| {
12
                unsafe { COUNTER += 1 };
13
            });
14
        }
15
        last_state = state;
16
    }
17
}
18
19
#[interrupt]
20
fn timer() {
21
    unsafe { COUNTER = 0; }
22
}

Sicherlich hast Du eine Lösung wie man das sonst ohne unsafe machen 
könnte.
Vorläufig kannst Du aufzeigen, wie man da das "Alles" finden kann.

Rbx schrieb:
> scheint aber keinen Vorrang zu haben,
> Rechnen mit Hexzahlen nicht,

Welche Sprache ist das denn in der man Hex darstellen kann, aber nicht 
damit rechnen?
foo = 0xD000 + 0x0F;
Rechne mal kurz nach!

: Bearbeitet durch User
von Rbx (rcx)


Lesenswert?

Harald K. schrieb:
> Réaumur nicht vergessen.

Das ist aber alt, und passt nicht ganz zu Rust. Eigentlich müsste 
diesbezüglich eher was mit L finden, was zu Lisp passt ;)

Nick schrieb:
> Sicherlich hast Du eine Lösung wie man das sonst ohne unsafe machen
> könnte.

So ganz indirekt mit viel Know How - nur hat das eben nicht jeder. Ganz 
abgesehen von so manchen Dokumentationen oder wenig Doku, oder teilweise 
Doku oder gar nicht da Doku.
Ich bin aber kein Programmiersprachenentwickler, also warum fragst du 
mich das überhaupt? Schließlich habe ich Rust nicht erfunden, sondern 
versuche im Moment nur etwas Informations Gathering zu betreiben.

Nick schrieb:
> Welche Sprache ist das denn in der man Hex darstellen kann, aber nicht
> damit rechnen?

Ja, bei Haskell gibt es wohl eine Bib mit der das geht. Sollte aber 
eigentlich kein Problem beim ghci mit Standardausrüstung sein.
Kannst du selbst überprüfen. Gib deine Rechnung oben in den ghci ein und 
schau was herauskommt.
Könnte man natürlich auch auf Papier machen, aber darum geht es hier 
wohl nicht.

von Ein T. (ein_typ)


Lesenswert?

Rbx schrieb:
> Und du könntest deine Fragen in Threads auch mal genauer spezifizieren,
> sonst müsste man glauben, dass du das nur machst, um den Leuten auf die
> Füsse zu treten, damit die herummaulen.

Okay, dann stelle ich eine frühere Frage noch einmal. Was genau 
emfindest Du an der OO von Cpp als "rudimentär"?

> ..ach so, hier noch ein Link, über den ich gestolpert bin:
> https://github.com/rust-unofficial/awesome-rust

Danke für den Link, das ist sicherlich eine wertvolle Ressource. Genauso 
wie die vielen anderen kuratierten "Awesome"-Listen, etwa für Python 
[1], Go [2] und sogar einzelne Frameworks wie zum Beispiel Gofiber [3]. 
Viele der Listen werden sehr gut gepflegt und sind dann oft absolut 
großartige Quellen.

[1] https://github.com/vinta/awesome-python
[2] https://github.com/avelino/awesome-go
[3] https://github.com/gofiber/awesome-fiber

von Rbx (rcx)


Lesenswert?

Ein T. schrieb:
> Okay, dann stelle ich eine frühere Frage noch einmal. Was genau
> emfindest Du an der OO von Cpp als "rudimentär"?

Du schriebest ja oben selbst, dass du OO nicht so komplex findest. Naja, 
dann könnte man so antworten, dass die Einfachheit von OO in C++ etwas 
untergeht.
Steht auch nicht im Vordergrund, ganz abgesehen von didaktischen 
Hintergründen, wo die anderen Programmiersprachen das Umdenken etwas 
leichter machen.

von Ein T. (ein_typ)


Lesenswert?

Rbx schrieb:
> Schließlich habe ich Rust nicht erfunden, sondern
> versuche im Moment nur etwas Informations Gathering zu betreiben.

Um Informationen über Software allgemein und besonders 
Programmiersprachen zu gewinnen, bieten sich zunächst ihre offiziellen 
Dokumentationen an. Meistens gibt es diese online und häufig sogar 
kostenlos. Dort findest Du sicher viel bessere Informationen als mit 
wilden Recherchen im Netz und KI-Modellen.

Für viele Programmiersprachen gibt es zudem so genannte "Bücher", häufig 
mit einem Namen wie "The <you-name-it> Programming Language", oft 
ergänzt durch weitere Werke, die häufig "A Tour Of <you-name-it>".

Beispiele: "The C++ Programming Language" [1] und "A Tour Of C++" von 
Bjarne Stroustrup [2], die sind leider kostenpflichtig, auch wenn man 
sie im Internet als PDF finden kann. Für C++ gibt es sogar ein 
ausgesprochen lesenswertes und kluges Buch namens "The Design and 
Evolution of C++" von Bjarne Stroustrup, in dem er beschreibt, wie er 
die Sprache C++ entwickelt hat, und warum er welche Designentscheidungen 
getroffen hat.

"The Go Programming Language" [3] und "A Tour Of Go" [4] gibt es 
kostenlos im Internet, genauso "The Rust Programming Language" [5] 
(zudem eine interaktive Version [6]) und "The Cargo Book" [7] über das 
Werkzeug "Cargo", das in Rust für das Build- und Dependency-Management 
verantwortlich ist. Für Rust gibt es ebenfalls interaktive Tutorials, 
die beide "A Tour Of Rust" heißen [8,9].

Für viele Sprachen gibt es darüber hinaus Leitfäden zur effektiven 
Anwendung, beispielsweise "Effective Rust" [10], "Effective Go" [11], 
und weitere. Einige Skriptsprachen weichen von dem Namensschema ab, aber 
auch für Python und Perl gibt es entsprechende Dokumentationen.

Viel Spaß beim Lesen! :-)

[1] https://www.stroustrup.com/4th.html
[2] https://www.stroustrup.com/tour3.html
[3] https://www.gopl.io/
[4] https://go.dev/tour/
[5] https://doc.rust-lang.org/book/
[6] https://rust-book.cs.brown.edu/
[7] https://doc.rust-lang.org/cargo/
[8] https://tourofrust.com/
[9] https://rust-tour.dev/
[10] https://effective-rust.com/
[11] https://go.dev/doc/effective_go

von Ein T. (ein_typ)


Lesenswert?

Rbx schrieb:
> Ein T. schrieb:
>> Okay, dann stelle ich eine frühere Frage noch einmal. Was genau
>> emfindest Du an der OO von Cpp als "rudimentär"?
>
> Du schriebest ja oben selbst, dass du OO nicht so komplex findest. Naja,
> dann könnte man so antworten, dass die Einfachheit von OO in C++ etwas
> untergeht.

So leid es mir tut, sehe ich das nicht. Alle bekannteren OO-Features von 
der  Datenkapselung über Vererbung, Überladung, Interfaces, Messaging: 
all das ist in Cpp vorhanden, auch wenn Interfaces in Cpp als abstrakte 
Klassen umgesetzt werden. Und im Gegensatz zu Java beherrscht Cpp sogar 
echte Mehrfachvererbung und das Überladen von Operatoren.

Obendrein ist Cpp allerdings nicht nur eine objektorientierte Sprache 
wie Java, sondern eine multiparadigmatische Sprache. Das heißt, ich kann 
in Cpp nicht nur objektorientiert, sondern auch prozedural und 
funktional arbeiten, und, zugegeben, in Verbindung mit generischer 
Programmierung durch Templates und weiteren Features wie Move- und 
Copy-Semantiken wird Cpp natürlich nicht einfacher, keine Frage -- eher 
sogar im Gegenteil.

> Steht auch nicht im Vordergrund, ganz abgesehen von didaktischen
> Hintergründen, wo die anderen Programmiersprachen das Umdenken etwas
> leichter machen.

Hier an der RWTH in Aachen wird Cpp seit vielen Jahren gelehrt, siehe 
hier [1] für den Kurs im aktuellen Wintersemester. Und wenn das sogar so 
Feld-, Wald- und Wiesen-Sysops können wie ich, kann das gar so schwierig 
nicht sein. :-)

Allerdings, wie gesagt, ist Cpp, aus den oben aufgeführten Gründen, 
durchaus umfangreicher als Java, und wer reine OOP lernen will, der ist 
mit Java für den Anfang womöglich besser bedient. Aber das heißt ja 
nicht, daß die OOP von Cpp jener von Java irgendwie nachstünde, 
schlecher oder unvollständig wäre, sondern nur, daß sie in Java die 
einzige Option und in Cpp nur ein weiteres Werkzeug in einem sehr viel 
größeren Werkzeugkasten ist.

[1] https://www.igpm.rwth-aachen.de/studium/cpp

von Sheeva P. (sheevaplug)


Lesenswert?

Rbx schrieb:
> Ich bin mir jetzt auch nicht sicher, ob die Entwurfsmuster so gut zu
> Rust passen, das meiste dazu läuft eher über OO.

Ich habe zwei Fragen:

1. Über welche Entwurfsmuster sprechen wir hier?

2. Kannst Du noch eine andere Sprache als Haskell?

von Nick (b620ys)


Lesenswert?

Ich ergänze um eine Frage:
3. Hast Du rustup jetzt 10 Jahre später zum laufen gebracht?

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Harald K. schrieb:
> Ob S. schrieb:
>> Das Problem bei C++ ist einfach: Es ist unendlich schwer, das sicher zu
>> verwenden.
>
> Verwende doch einfach dein früheres Pseudonym weiter, dann kommt man
> nicht auf die Idee, Du könntest irgendwas sachliches über
> Programmiersprachen schreiben.

Mir scheint, das was ich schrieb, war sehr sachlich und korrekt. Wenn du 
anderer Meinung bist, steht es dir ja frei, sachliche Gegenargumente 
anzuführen.

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Ein T. schrieb:

> So leid es mir tut, sehe ich das nicht. Alle bekannteren OO-Features von
> der  Datenkapselung über Vererbung, Überladung, Interfaces, Messaging:
> all das ist in Cpp vorhanden, auch wenn Interfaces in Cpp als abstrakte
> Klassen umgesetzt werden. Und im Gegensatz zu Java beherrscht Cpp sogar
> echte Mehrfachvererbung und das Überladen von Operatoren.

Mehrfachvererbung ist generell der Schlund zur unwartbaren Hölle. Und 
auch nicht Teil dessen, was den Designern des OOP vorschwebte. Da war 
strenge Hierarchie (also Baum) intendiert, kein offener Graph. Schon aus 
rein praktischen Gründen. C++ zeigt (wenn man es darauf anlegt), warum 
die ursprüngliche OOP-Intention sich bei der Vererbung freiwillig auf 
einen Baum beschränkt hat...

Und das Überladen von Operatoren ist zwar gelegentlich durchaus 
nützlich, sogar wünschenswert und (im Kontext) logisch, verführt aber 
durchaus auch dazu, es mißbräuchlich, rein zur Code-Obfuskation zu 
verwenden. Ich habe schon Code gesehen, der das tut.
Da wollte wohl ein C#-Entwickler seinen Posten sichern (ja, auch C# kann 
Operatoren überladen). Ist ihm nicht gelungen. Im Gegenteil: Der 
Nachweis der mißbräuchlichen, im Sinne der Sache völlig zwecklosen 
Nutzung hat im Endeffekt dazu geführt, dass er rausgeflogen ist. Und am 
Ende wurde das mit einem Urteil eines Arbeitsgerichtes bestätigt, das 
explizit diesen Kündigungsgrund anerkannt hat.

> Obendrein ist Cpp allerdings nicht nur eine objektorientierte Sprache
> wie Java, sondern eine multiparadigmatische Sprache.

Jepp. Und eine, die viele Altlasten absichtlich mitnimmt. Das macht sie 
überaus komplex und immanent unsicher. Ich bin fast sicher, dass es 
weltweit nur sehr wenige Leute gibt, die C++ vollständig "im Kopf" 
haben.

Der weitaus überwiegende Teil der C++-Programmierer benutzt selber das, 
was er kennt, importiert aber ohne Nachzudenken fremde Quellen, die sich 
bestenfalls dadurch auszeichnen, dass sie in C++ legal sind.

Soll heißen: so lange der Compiler nicht meckert, wird der Code typisch 
überhaupt nicht geprüft. Und selbst, wenn er meckert, geht es mehr 
darum, den Mecker zu entsorgen, als die Ursache zu finden...

von Ein T. (ein_typ)


Lesenswert?

Ob S. schrieb:
> Mehrfachvererbung ist generell der Schlund zur unwartbaren Hölle. Und
> auch nicht Teil dessen, was den Designern des OOP vorschwebte. Da war
> strenge Hierarchie (also Baum) intendiert, kein offener Graph.

Nichtsdestotrotz kann auch Mehrfachvererbung mitunter ausgesprochen 
nützlich sein und dann gerade die Hölle der Unwartbarkeit verhindern.

Deine persönlichen Abneigungen verhindern, daß Du sachlich und objektiv 
über Programmiersprachen sprechen kannst. Stattdessen schreibst Du so 
viel Unfug, muß das denn wirklich sein?

von Oliver S. (oliverso)


Lesenswert?

Ein T. schrieb:
> Nichtsdestotrotz kann auch Mehrfachvererbung mitunter ausgesprochen
> nützlich sein und dann gerade die Hölle der Unwartbarkeit verhindern.

Wobei die use-cases doch sehr überschaubar sein werden. Das einzige, wo 
mit C++ Mehrfachvererbung sehr sinnvoll ist, ist die Nachbildung der 
fehlenden Interfaces durch vollständig virtuelle Klassen.

Oliver

von Sheeva P. (sheevaplug)


Lesenswert?

Oliver S. schrieb:
> Wobei die use-cases doch sehr überschaubar sein werden.

Natürlich.

> Das einzige, wo
> mit C++ Mehrfachvererbung sehr sinnvoll ist, ist die Nachbildung der
> fehlenden Interfaces durch vollständig virtuelle Klassen.

Ja, das ist ein Beispiel. In Python kann Mehrfachvererbung viel 
nützlicher sein, aber dennoch: das ist ein Ausnahmefeature für 
Ausnahmefälle.

Dennoch habe ich in meiner Zeit als Entwickler mindestens einen Fall in 
Cpp und IIRC zwei in Python gehabt wo das die beste Lösung war. Im 
dritten Fall unter Python haben sich die Anforderungen während der 
Laufzeit des Projekts geändert und deswegen war es besser davon 
wegzugehen.

Letztlich verstehe ich Eure Punkte nur teilweise (und nein ich möchte 
Dich keinesfalls mit dem Hater gleichsetzen, bitte nicht falsch 
verstehen): das stellt ein selten genutztes aber dennoch sehr mächtiges 
Feature dar.

Ich kann nur für mich sprechen, aber ich habe lieber mächtige Features 
und benutze sie nicht, als sie gar nicht erst zu haben.

von Sheeva P. (sheevaplug)


Lesenswert?

Ob S. schrieb:
> Mehrfachvererbung ist generell der Schlund zur unwartbaren Hölle. Und
> auch nicht Teil dessen, was den Designern des OOP vorschwebte. Da war
> strenge Hierarchie (also Baum) intendiert, kein offener Graph. Schon aus
> rein praktischen Gründen.

Ja, Simula, Algol und Smalltalk konnten anfangs nur einfache Vererbung. 
Das war auch der damaligen Hard- und Software geschuldet und ist 
deswegen kein besonders kluges Argument.

> Und das Überladen von Operatoren ist zwar gelegentlich durchaus
> nützlich, sogar wünschenswert und (im Kontext) logisch, verführt aber
> durchaus auch dazu, es mißbräuchlich, rein zur Code-Obfuskation zu
> verwenden. Ich habe schon Code gesehen, der das tut.

Solchen Code habe ich auch schon gesehen. Wobei ich mir bis heute noch 
nicht sicher bin ob es um Obfuskation, um Unfähigkeit oder einfach nur 
darum ging, eine mißglückte Implementierung weiter zu benutzen weil 
keine Ressourcen für einen Umbau freigegeben worden sind.

Aber Softwareentwicklung ist oft kein Ponyhof und Entwickler sind nicht 
immer frei in ihren Entscheidungen. Das gehört dazu und auch zu der 
Abwägung ob man besondere Features wie Mehrfachvererbung oder 
Operatorüberladung vorschlägt.

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Oliver S. schrieb:

> Wobei die use-cases doch sehr überschaubar sein werden. Das einzige, wo
> mit C++ Mehrfachvererbung sehr sinnvoll ist, ist die Nachbildung der
> fehlenden Interfaces durch vollständig virtuelle Klassen.

Jepp. Und wenn C++ darauf beschränkt wäre, wäre ja auch alles OK. Aber 
C++ ist eben leider nicht darauf beschränkt.

In die Hölle fährt man also über kurz oder lang ein, wenn man diese 
"Freiheit" tatsächlich nutzt. Das Schlimme dabei ist: zu Anfang merkt 
man es noch nicht. Da funktioniert i.d.R. noch alles. Aber wehe, wenn in 
den "Zuläufen" an mehreren Stellen erweitert wird...

von Oliver S. (oliverso)


Lesenswert?

Ob S. schrieb:
> In die Hölle fährt man also über kurz oder lang ein, wenn man diese
> "Freiheit" tatsächlich nutzt.

Das C++ einem beliebig viele Möglichkeiten bietet, um sich von hinten 
durch die Brust ins Auge schließen kann, und das auch noch mit 
beliebiger Zeitverzögerung, ist ja nun nichts Neues.

Sheeva P. schrieb:
> Ich kann nur für mich sprechen, aber ich habe lieber mächtige Features
> und benutze sie nicht, als sie gar nicht erst zu haben.

So ist es. Auch wenn C++23 und C++26 den Anschein erwecken, daß da immer 
noch die Unsäglichkeiten aus C++11 repariert werden.

Oliver

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.