Devo inviare messaggi a un'altra squadra utilizzando la versione proto2 di Google Protocol Buffers. Stanno usando Java e C++ su Linux. Sto usando C# su Windows.Proto2 vs. Proto3 in C#
La porta protobuf-csharp di Jon Skeet (https://github.com/jskeet/protobuf-csharp-port) supporta proto2. Se ho capito bene, Google ha preso questo codice e ne ha piegato una versione aggiornata nel progetto protobuf principale (https://github.com/google/protobuf/tree/master/csharp). Ma non supporta più proto2 per C#, solo proto3.
Non sono sicuro di quale progetto dovrei utilizzare. Sembra che il nuovo sarà meglio supportato (prestazioni, supporto per proto3 se l'altro team aggiornerà mai). Ma dovrei convertire il file .proto che mi è stato dato da proto2 a proto3 e correre il rischio che si verifichino problemi.
Ho letto che per la maggior parte, i messaggi per proto2 e proto3 sono compatibili. Non ho esperienza con i Protocol Buffers, ma il file .proto con cui sto lavorando sembra piuttosto vanilla, nessun valore predefinito o nulla o nested. Sembra quindi che potrei cancellare solo le parole chiave "richieste" e "facoltative" e utilizzare la nuova libreria, trattandola come un file proto3.
Secondo la tua opinione, vale la pena usare la nuova libreria? Esiste un elenco di caratteristiche di proto che renderebbero incompatibili i messaggi proto2 e proto3?
non riesco ancora a credere di aver eliminato le impostazioni predefinite :( –
La guida linguistica per [proto2] (https://developers.google.com/protocol-buffers/docs/proto) elenca le mappe come supportate. provato a utilizzare il proto compilatore 3 con [proto3] (https://developers.google.com/protocol-buffers/docs/proto3#default) e sembra ignorare i campi impostati con valori predefiniti (int con 0 è stato rimosso da binary e json rappresentazione) – Manoj
@Manoj: Penso che fossero supportati in una certa misura, ma non da tutte le lingue, e probabilmente con una semantica leggermente diversa. Non sono sicuro di cosa intendi per "sembra ignorare i campi impostati con valori predefiniti". significa semplicemente "il valore 0 non è serializzato", hai ragione, –