Vektoren in Arrays umwandeln und zurück [duplizieren]

8

Ich versuche, die am meisten Rust-artige Art der Umwandlung von einem Vektor zu einem Array und zurück zu ermitteln. Diese Makros funktionieren und können sogar mit einigen unsicheren Blöcken generisch gemacht werden, aber es fühlt sich allesamt sehr un-Rust an.

Ich würde jede Eingabe schätzen und keine Schläge halten, ich denke, dass dieser Code alles andere als schön oder optimal ist. Ich habe erst seit ein paar Wochen mit Rust gespielt und jage Releases und Docs so sehr zu schätzen, dass ich Hilfe schätze.

%Vor%     
dirvine 21.04.2015, 22:44
quelle

1 Antwort

7

Der Code scheint mir gut zu sein, obwohl eine sehr wichtige Sicherheitsfrage zu beachten ist: Es kann keine Panik geben, solange arr nicht vollständig initialisiert ist. Laufende Destruktoren auf nicht initialisiertem Speicher könnten leicht zu undefiniertem Verhalten führen, und insbesondere bedeutet dies, dass into_iter und die next -Methode davon niemals in Panik geraten sollte (ich glaube, das ist unmöglich für die Teile enumerate und mem::* des Iterators in Panik angesichts der Einschränkungen des Codes).

Das heißt, man kann das replace / forget idiom mit einer einzigen Funktion ausdrücken: std::ptr::write .

%Vor%

Obwohl ich es schreiben würde als:

%Vor%

Ähnlich kann man eine Iterator-Güte auf die spezialisierten Versionen u8 anwenden:

%Vor%

Obwohl das erste wahrscheinlich besser geschrieben ist als arr.to_vec() und die zweite als

%Vor%

Obwohl diese Funktion derzeit instabil ist und daher nur verwendbar ist jeden Abend.

    
huon 21.04.2015, 23:03
quelle

Tags und Links