1. Foren
  2. Kommentare
  3. Software-Entwicklung
  4. Alle Kommentare zum Artikel
  5. › Programmiersprache: Rust…

impl Trait merkwürdig beschrieben

Neue Foren im Freiraum! Raumfahrt und freie Software haben jetzt einen Platz, die Games tummeln sich jetzt alle in einem Forum.
  1. Thema

Neues Thema Ansicht wechseln


  1. impl Trait merkwürdig beschrieben

    Autor: Boereck 11.05.18 - 23:09

    Also, die Beschreibung des "impl Trait" Sprachfratures ist sehr merkwürdig und mindestens missverständlich:
    "Auf eine Funktion angewendet bedeutet das für diese, dass sie keine Argumente akzeptieren muss, aber einen Typ zurück gibt, der das Trait Trait implementiert."

    Beim "impl Trait" geht es hauptsächlich darum, dass Rust keine generischen Rückgabe-Typen bei Funktionen erlaubt. Das "impl Trait" erlaubt nun anstelle dass ein konkreter Typen angegeben werden muss, zu sagen, dass der Rückgabewert ein bestimmtes Trait implementiert (ohne genau zu sagen welcher Typ das ist). Der Compiler muss aber den konkreten zurückgegenen Typen eindeutig bestimmen können. Bei Wertetypen muss ja der Empfänger des Wertes entsprechend Speicher reservieren. Das bedeutet auch, dass innerhalb der Funktion alle Zweige die einen Rückgabewert festlegen denselben Typen für den Rückgabewert haben müssen. Also z.B. eine Funktion den Ergebnistyp "impl C" hat, darf nicht in einem If-Zweig Typ A und im Else Zweig Typ B zurück gegeben werden, auch wenn beide das Trait C implementieren.

    Bisher wurde oft alternativ als Rückgabetyp Box<Trait> genommen, also der Speicher auf dem Heap zurück gegeben. Ein weiterer Nachteil davon ist, dass Aufrufe auf dem Trait mittels V-Table geschehen müssen, da die konkrete Implementierung des Traits dem Compiler unbekannt ist.

  2. Re: impl Trait merkwürdig beschrieben

    Autor: CalebR 12.05.18 - 02:59

    Vielen Dank für die Erklährung!

  3. Re: impl Trait merkwürdig beschrieben

    Autor: Gremlin2 12.05.18 - 22:25

    Boereck schrieb:
    --------------------------------------------------------------------------------
    > für den Rückgabewert haben müssen. Also z.B. eine Funktion den Ergebnistyp
    > "impl C" hat, darf nicht in einem If-Zweig Typ A und im Else Zweig Typ B
    > zurück gegeben werden, auch wenn beide das Trait C implementieren.

    Wofür ist denn das Trait gut? Bei C++ ist es ja das gleiche nur ohne die Sache mit dem Trait.

  4. Re: impl Trait merkwürdig beschrieben

    Autor: Smincke 12.05.18 - 23:56

    Traits sind in Rust für vieles gut/notwendig. Traits sind wie abstrakte Klassen, oder Interfaces, aber sie dürfen nur Methoden enthalten.

    Wenn du std::string::ToString implementierts für einen Typ(muss nicht dein eigener sein), dann kannst du ihn in Funktionen als parameter mitgeben, die Box<ToString>, impl ToSting, oder ToString als generic haben wollen.
    Dadurch kannst du universelle Metoden schreiben, ohne, dass du die selbe Funktion für verschiedene Typen schreiben musst. Wenn du eine Box benutzt generiert der compiler eine Funktion, die mit allen Typen, die ToString implementieren funktioniert, bei den anderen beiden varianten generiert der Compiler eine passende Methode für jeden Typ, der ToString implementiert.
    Die Box Methode ist langsamer, aber der generierte maschinencode ist idR kleiner, während die andere variante schneller, aber meist größer ist.

    Traits sind notwendig, weil Rust sonst keine Vererbung hat.
    Man kann echt coole sachen damit machen: Beispiel

  5. Re: impl Trait merkwürdig beschrieben

    Autor: Gremlin2 13.05.18 - 02:11

    Danke! :-)
    In dem Beispiel sehe ich Composition wo in C++ function templates vorkämen. Vielleicht weil es damit in Rust abstrakter ist, mit weniger speziellen Features, und deshalb besser.

    Mozilla löst mit Rust neben der memory safety anscheinend auch andere Probleme, die ein erfolgreiches Software-Unternehmen grundsätzlich lösen will. Und mir scheint, Golem will Rust näher bringen, aber man müsste weiter ausholen. Mehr als "diamond problem" fiel mir nicht ein. Syntaktisch ist Rust zuerst recht schwierig, und dann wären in Golem Beweggründe gut, Motive, warum in Rust mehr Code dasteht, als es scheinbar sein müsste. Das ist vielleicht so eine Angelegenheit wie in Lua. Der Compiler soll nicht vollgepumpt werden, sondern schlank und vertrauenswürdig bleiben. Und die Rust-Programmierer sind offensichtlich etwas intelligenter oder mutiger.

  6. Re: impl Trait merkwürdig beschrieben

    Autor: Smincke 13.05.18 - 02:33

    Rust code zu schreiben ist anfangs schwer. Aber, wenn der Code compiliert, dann funktioniert er meist. In C, wenn ich mit Pointern arbeite und einen Stern falsch setze, dann bekomm ich uninitailisierte werte, werde von einer falschen Stelle, oder das Programm stürzt ab.
    In rust mault einen der compiler an, wenn man was falsch macht. Und wenn man eine Metode, oder einen Parameter von einer Referenz anspricht braucht man keinen Stern. Und seit diesem Patch werden Referenzen bei Optionen auch automatisch aufgelöst.

  1. Thema

Neues Thema Ansicht wechseln


Um zu kommentieren, loggen Sie sich bitte ein oder registrieren Sie sich. Sie müssen ausserdem in Ihrem Account-Profil unter Forum einen Nutzernamen vergeben haben. Zum Login

Stellenmarkt
  1. Java Entwickler:in (m/w/d)
    Lufthansa Industry Solutions TS GmbH, Oldenburg
  2. Sachbearbeiter*in (m/w/d) Dokumentenmanagenement
    Paul-Ehrlich-Institut, Langen
  3. Microsoft Dynamics Business Central Developer / Programmierer (m/w/d)
    Heinz von Heiden GmbH Massivhäuser, Isernhagen
  4. Akademische Mitarbeiterin / Akademischer Mitarbeiter (w/m/d) der Fachrichtung Elektrotechnik, ... (m/w/d)
    Karlsruher Institut für Technologie (KIT) Campus Nord, Eggenstein-Leopoldshafen

Detailsuche


Golem pur
  • Golem.de ohne Werbung nutzen

Anzeige
Hardware-Angebote


Haben wir etwas übersehen?

E-Mail an news@golem.de