The union types are obsoleted by oneof: https://developers.google.com/protocol-buffers/docs/proto#oneof
On Sat, Feb 7, 2015 at 4:53 AM, Alfred Kwan <[email protected]> wrote: > To implement the has_boo() in 3.0 implies one boolean per each truly > optional field, which means additional maintenance is now required, e.g. > matching naming scheme for the pool together with the optional struct, also > should we group all booleans together or should they sit right next to the > to corresponding optional structures... > > With the uncertainty of how "any" replaces "extensions" plus the removal > of has_boo(), it seems like new adopters (I'm one of them) should pick V2 > over 3.0. > > On Wednesday, January 28, 2015 at 3:10:39 PM UTC-5, Feng Xiao wrote: >> >> >> >> On Wed Jan 28 2015 at 12:06:21 PM Troy Lee <[email protected]> wrote: >> >>> Feng, >>> >>> Version 3 removes presence logic. >>> How do we exam whether a field is exist or not? >>> >> This is no possible for singular primitive fields. For singular message >> fields, the has methods will still be generated. Basically with proto3 >> you'll need to write your code without depending on these dropped features. >> It's believed that most users don't use the field presence logic much and >> for those who need this feature adding a bool field is an easy workaround. >> >> >>> >>> Thanks, >>> troylee >>> >>> Feng Xiao於 2014年12月11日星期四 UTC+8下午12時51分01秒寫道: >>> >>>> Hi all, >>>> >>>> I just published protobuf v3.0.0-alpha-1 on our github site: >>>> https://github.com/google/protobuf/releases/tag/v3.0.0-alpha-1 >>>> >>>> This is the first alpha release of protobuf v3.0.0. In protobuf v3.0.0, >>>> we will add a new protobuf language version (aka proto3) and support a >>>> wider range of programming languages (to name a few: ruby, php, node.js, >>>> objective-c). This alpha version contains C++ and Java implementation with >>>> partial proto3 support (see below for details). In future releases we will >>>> add support for more programming languages and implement the full proto3 >>>> feature set. Besides proto3, this alpha version also includes two other new >>>> features: map fields and arena allocation. They are implemented for both >>>> proto3 and the old protobuf language version (aka proto2). >>>> >>>> We are currently working on the documentation of these new features and >>>> when it's ready it will be updated to our protobuf developer guide >>>> <https://developers.google.com/protocol-buffers/docs/overview>. For >>>> the time being if you have any questions regarding proto3 or other new >>>> features, please post your question in the discussion group. >>>> >>>> CHANGS >>>> ======= >>>> Version 3.0.0-alpha-1 (C++/Java): >>>> >>>> General >>>> * Introduced Protocol Buffers language version 3 (aka proto3). >>>> >>>> When protobuf was initially opensourced it implemented Protocol >>>> Buffers >>>> language version 2 (aka proto2), which is why the version number >>>> started from v2.0.0. From v3.0.0, a new language version (proto3) is >>>> introduced while the old version (proto2) will continue to be >>>> supported. >>>> >>>> The main intent of introducing proto3 is to clean up protobuf before >>>> pushing the language as the foundation of Google's new API platform. >>>> In proto3, the language is simplified, both for ease of use and to >>>> make it available in a wider range of programming languages. At the >>>> same time a few features are added to better support common idioms >>>> found in APIs. >>>> >>>> The following are the main new features in language version 3: >>>> >>>> 1. Removal of field presence logic for primitive value fields, >>>> removal >>>> of required fields, and removal of default values. This makes >>>> proto3 >>>> significantly easier to implement with open struct >>>> representations, >>>> as in languages like Android Java, Objective C, or Go. >>>> 2. Removal of unknown fields. >>>> 3. Removal of extensions, which are instead replaced by a new >>>> standard >>>> type called Any. >>>> 4. Fix semantics for unknown enum values. >>>> 5. Addition of maps. >>>> 6. Addition of a small set of standard types for representation >>>> of time, >>>> dynamic data, etc. >>>> 7. A well-defined encoding in JSON as an alternative to binary >>>> proto >>>> encoding. >>>> >>>> This release (v3.0.0-alpha-1) includes partial proto3 support for >>>> C++ and >>>> Java. Items 6 (well-known types) and 7 (JSON format) in the above >>>> feature >>>> list are not implemented. >>>> >>>> A new notion "syntax" is introduced to specify whether a .proto file >>>> uses proto2 or proto3: >>>> >>>> // foo.proto >>>> syntax = "proto3"; >>>> message Bar {...} >>>> >>>> If omitted, the protocol compiler will generate a warning and >>>> "proto2" will >>>> be used as the default. This warning will be turned into an error >>>> in a >>>> future release. >>>> >>>> We recommend that new Protocol Buffers users use proto3. However, >>>> we do not >>>> generally recommend that existing users migrate from proto2 from >>>> proto3 due >>>> to API incompatibility, and we will continue to support proto2 for >>>> a long >>>> time. >>>> >>>> * Added support for map fields (implemented in C++/Java for both >>>> proto2 and >>>> proto3). >>>> >>>> Map fields can be declared using the following syntax: >>>> >>>> message Foo { >>>> map<string, string> values = 1; >>>> } >>>> >>>> Data of a map field will be stored in memory as an unordered map >>>> and it >>>> can be accessed through generated accessors. >>>> >>>> C++ >>>> * Added arena allocation support (for both proto2 and proto3). >>>> >>>> Profiling shows memory allocation and deallocation constitutes a >>>> significant >>>> fraction of CPU-time spent in protobuf code and arena allocation is >>>> a >>>> technique introduced to reduce this cost. With arena allocation, new >>>> objects will be allocated from a large piece of preallocated memory >>>> and >>>> deallocation of these objects is almost free. Early adoption shows >>>> 20% to >>>> 50% improvement in some Google binaries. >>>> >>>> To enable arena support, add the following option to your .proto >>>> file: >>>> >>>> option cc_enable_arenas = true; >>>> >>>> Protocol compiler will generate additional code to make the >>>> generated >>>> message classes work with arenas. This does not change the existing >>>> API >>>> of protobuf messages and does not affect wire format. Your existing >>>> code >>>> should continue to work after adding this option. In the future we >>>> will >>>> make this option enabled by default. >>>> >>>> To actually take advantage of arena allocation, you need to use the >>>> arena >>>> APIs when creating messages. A quick example of using the arena API: >>>> >>>> { >>>> google::protobuf::Arena arena; >>>> // Allocate a protobuf message in the arena. >>>> MyMessage* message = Arena::CreateMessage<MyMessage>(&arena); >>>> // All submessages will be allocated in the same arena. >>>> if (!message->ParseFromString(data)) { >>>> // Deal with malformed input data. >>>> } >>>> // Must not delete the message here. It will be deleted >>>> automatically >>>> // when the arena is destroyed. >>>> } >>>> >>>> Currently arena does not work with map fields. Enabling arena in a >>>> .proto >>>> file containing map fields will result in compile errors in the >>>> generated >>>> code. This will be addressed in a future release. >>>> ======= >>>> >>>> Thanks, >>>> Feng >>>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Protocol Buffers" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To post to this group, send email to [email protected]. >>> Visit this group at http://groups.google.com/group/protobuf. >>> For more options, visit https://groups.google.com/d/optout. >>> >> -- > You received this message because you are subscribed to the Google Groups > "Protocol Buffers" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/protobuf. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/protobuf. For more options, visit https://groups.google.com/d/optout.
