protocol buffers - protobuffers - ¿Por qué no hay valores predeterminados personalizados en proto3?
protocol buffer list (2)
En mi archivo autogenerado .pb.cc veo algunos lugares como este:
if (this->myint() != 0) {
y pocos como este:
myint_ = 0;
Entonces, ¿por qué no habilitar el valor predeterminado y generar
static ::google::protobuf::int32 myint_defaultvalue = 5;
...
if (this->myint() != myint_defaultvalue) {
...
...
myint_ = myint_defaultvalue;
...
¿en lugar?
La versión proto2 de Protocol Buffers permite especificar valores predeterminados para elementos de mensaje:
optional double scaling_factor = 3 [default = 1.0];
¿Por qué esto ya no es posible en proto3 ? Considero que esta es una característica excelente para guardar bytes adicionales en el cable sin la necesidad de escribir ningún código envoltorio.
Según tengo entendido, proto3 ya no le permite detectar presencia en el campo y ya no admite valores predeterminados que no sean cero porque esto facilita la implementación de protobufs en términos de "estructuras antiguas" en varios idiomas, sin la necesidad de generar métodos de acceso. Se considera que esto hace que Protobuf sea más fácil de usar en esos idiomas.
(Personalmente, creo que los idiomas que carecen de accesores y propiedades no son muy buenos y que protobuf no debería diseñarse, pero ya no es mi proyecto).