Serialisierung
Erweiterbarkeit Datenformat
Abschnitt betitelt „Erweiterbarkeit Datenformat“Wählen Sie jede Designoption aus, die die folgende Anforderung erfüllt:
Anforderung: Es sollte möglich sein, ein neues Datenformat hinzuzufügen, ohne den Code in bestehenden Implementierungen des Serialize -Traits ändern zu müssen.
Beide Designs sind ausreichend entkoppelt, sodass jedes neue Datenformat unabhängig von jeglichen Serialize -Implementierungen ist. Bei Option 1 konvertiert jedes Datenformat einen Value in die Darstellung des Formats. Value fungiert als Modulgrenze.
Bei Option 2 gibt es keine explizite Zwischenrepräsentation eines serialisierten Wertes, sondern jede Serialize -Implementierung ist explizit generisch über jede Wahl von S , die Serializer implementiert.
Speichereffiziente Serialisierung
Abschnitt betitelt „Speichereffiziente Serialisierung“Wählen Sie jede Designoption aus, die die folgende Anforderung erfüllt:
Anforderung: Der Serialisierungsprozess sollte so wenig Speicher wie möglich verbrauchen.
Option 1 serialisiert Daten, indem sie zuerst eine Datenstruktur in eine Zwischenrepräsentation, Value , umwandelt und dann Value in das endgültige Format konvertiert. Diese Zwischen-Datenstruktur verbraucht Speicher, der bei Option 2 nicht benötigt wird, da die Daten direkt in das endgültige Format konvertiert werden.
Kompilierte Binärgröße
Abschnitt betitelt „Kompilierte Binärgröße“Wählen Sie jede Designoption aus, die die folgende Anforderung erfüllt:
Anforderung: Wenn derselbe Datentyp in mehrere Formate serialisiert wird, sollte dies die Größe des kompilierten Binärprogramms so wenig wie möglich erhöhen.
Bei Option 1 gibt es nur eine einzige Instanziierung von Serialize , die einen Typ T in einen Value umwandelt. Da Option 2 generisch über Serialisierer S ist, wird der Rust-Compiler jedes Mal, wenn T::serialize mit einem neuen S aufgerufen wird, eine neue Instanz von T::serialize monomorphisieren, was die Größe des Binärprogramms im Vergleich zu Option 1 erhöhen würde.