Ich muss Nachrichten an ein anderes Team mit der Proto2-Version von Google Protocol Buffers senden. Sie verwenden Java und C++ unter Linux. Ich verwende C# unter Windows.Proto2 vs Proto3 in C#
Jon Skeets protobuf-csharp-port (https://github.com/jskeet/protobuf-csharp-port) unterstützt Proto2. Wenn ich richtig verstanden habe, hat Google diesen Code genommen und eine aktualisierte Version davon in das Hauptprojekt protobuf (https://github.com/google/protobuf/tree/master/csharp) gefaltet. Aber es unterstützt nicht mehr Proto2 für C#, nur Proto3.
Ich bin mir nicht sicher, welches Projekt ich verwenden sollte. Es sieht so aus, als ob der neue besser unterstützt wird (Leistung, Unterstützung für Proto3, wenn das andere Team jemals Upgrades durchführt). Aber ich müsste die .proto-Datei, die ich erhalten hatte, von Proto2 nach Proto3 konvertieren und alle damit verbundenen Probleme riskieren.
Ich habe gelesen, dass zum größten Teil die Nachrichten für Proto2 und Proto3 kompatibel sind. Ich habe keine Erfahrung mit Protokoll-Puffer, aber die .proto-Datei, mit der ich arbeite, sieht ziemlich Vanille, keine Standardwerte oder oneof oder geschachteltes irgendetwas aus. Es scheint also so, als könnte ich einfach ihre "erforderlichen" und "optionalen" Schlüsselwörter löschen und die neue Bibliothek verwenden und diese als eine Proto3-Datei behandeln.
Ist es Ihrer Meinung nach die Mühe wert, die neuere Bibliothek zu verwenden? Gibt es eine Liste von Proto-Features, die die Proto2- und Proto3-Nachrichten inkompatibel machen würden?
können immer noch nicht glauben, dass sie Standardeinstellungen loswerden :( –
Der Sprachenführer für [Proto2] (https://developers.google.com/protocol-buffers/docs/proto) listet Karten als unterstützt versucht mit Proto-Compiler 3 mit [Proto3] (https://developers.google.com/protocol-buffers/docs/proto3#default) und es scheint zu ignorieren Felder mit Standardwerten (int mit 0 wurde aus binären und json entfernt – Manoj
@Manoj: Ich denke, dass sie in gewissem Maße unterstützt wurden, aber nicht in allen Sprachen, und möglicherweise mit etwas anderer Semantik.Unsicher, was Sie meinen, "es scheint Felder zu ignorieren, die mit Standardwerten eingestellt sind." nur bedeuten "der Wert 0 ist nicht serialisiert" dann hast du recht. –