Protocol Buffers - Google's data interchange format (grpc依赖)
https://developers.google.com/protocol-buffers/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
296 lines
14 KiB
296 lines
14 KiB
????-??-?? version 2.1.0: |
|
|
|
General |
|
* Repeated fields of primitive types (types other that string, group, and |
|
nested messages) may now use the option [packed = true] to get a more |
|
efficient encoding. In the new encoding, the entire list is written |
|
as a single byte blob using the "length-delimited" wire type. Within |
|
this blob, the individual values are encoded the same way they would |
|
be normally except without a tag before each value (thus, they are |
|
tightly "packed"). |
|
* For each field, the generated code contains an integer constant assigned |
|
to the field number. For example, the .proto file: |
|
message Foo { optional int bar_baz = 123; } |
|
would generate the following constants, all with the integer value 123: |
|
C++: Foo::kBarBazFieldNumber |
|
Java: Foo.BAR_BAZ_FIELD_NUMBER |
|
Python: Foo.BAR_BAZ_FIELD_NUMBER |
|
Constants are also generated for extensions, with the same naming scheme. |
|
These constants may be used as switch cases. |
|
* Updated bundled Google Test to version 1.3.0. Google Test is now bundled |
|
in its verbatim form as a nested autoconf package, so you can drop in any |
|
other version of Google Test if needed. |
|
* optimize_for = SPEED is now the default, by popular demand. Use |
|
optimize_for = CODE_SIZE if code size is more important in your app. |
|
* It is now an error to define a default value for a repeated field. |
|
Previously, this was silently ignored (it had no effect on the generated |
|
code). |
|
* Fields can now be marked deprecated like: |
|
optional int32 foo = 1 [deprecated = true]; |
|
Currently this does not have any actual effect, but in the future the code |
|
generators may generate deprecation annotations in each language. |
|
|
|
protoc |
|
* --error_format=msvs option causes errors to be printed in Visual Studio |
|
format, which should allow them to be clicked on in the build log to go |
|
directly to the error location. |
|
* The type name resolver will no longer resolve type names to fields. For |
|
example, this now works: |
|
message Foo {} |
|
message Bar { |
|
optional int32 Foo = 1; |
|
optional Foo baz = 2; |
|
} |
|
Previously, the type of "baz" would resolve to "Bar.Foo", and you'd get |
|
an error because Bar.Foo is a field, not a type. Now the type of "baz" |
|
resolves to the message type Foo. This change is unlikely to make a |
|
difference to anyone who follows the Protocol Buffers style guide. |
|
|
|
C++ |
|
* Several optimizations, including but not limited to: |
|
- Serialization, especially to flat arrays, is 10%-50% faster, possibly |
|
more for small objects. |
|
- Several descriptor operations which previously required locking no longer |
|
do. |
|
- Descriptors are now constructed lazily on first use, rather than at |
|
process startup time. This should save memory in programs which do not |
|
use descriptors or reflection. |
|
- UnknownFieldSet completely redesigned to be more efficient (especially in |
|
terms of memory usage). |
|
- Various optimizations to reduce code size (though the serialization speed |
|
optimizations increased code size). |
|
* Message interface has method ParseFromBoundedZeroCopyStream() which parses |
|
a limited number of bytes from an input stream rather than parsing until |
|
EOF. |
|
* GzipInputStream and GzipOutputStream support reading/writing gzip- or |
|
zlib-compressed streams if zlib is available. |
|
(google/protobuf/io/gzip_stream.h) |
|
* DescriptorPool::FindAllExtensions() and corresponding |
|
DescriptorDatabase::FindAllExtensions() can be used to enumerate all |
|
extensions of a given type. |
|
* For each enum type Foo, protoc will generate functions: |
|
const string& Foo_Name(Foo value); |
|
bool Foo_Parse(const string& name, Foo* result); |
|
The former returns the name of the enum constant corresponding to the given |
|
value while the latter finds the value corresponding to a name. |
|
* RepeatedField and RepeatedPtrField now have back-insertion iterators. |
|
* String fields now have setters that take a char* and a size, in addition |
|
to the existing ones that took char* or const string&. |
|
* DescriptorPool::AllowUnknownDependencies() may be used to tell |
|
DescriptorPool to create placeholder descriptors for unknown entities |
|
referenced in a FileDescriptorProto. This can allow you to parse a .proto |
|
file without having access to other .proto files that it imports, for |
|
example. |
|
* Updated gtest to latest version. The gtest package is now included as a |
|
nested autoconf package, so it should be able to drop new versions into the |
|
"gtest" subdirectory without modification. |
|
|
|
Java |
|
* Fixed bug where Message.mergeFrom(Message) failed to merge extensions. |
|
* Message interface has new method toBuilder() which is equivalent to |
|
newBuilderForType().mergeFrom(this). |
|
* All enums now implement the ProtocolMessageEnum interface. |
|
* Setting a field to null now throws NullPointerException. |
|
* Fixed tendency for TextFormat's parsing to overflow the stack when |
|
parsing large string values. The underlying problem is with Java's |
|
regex implementation (which unfortunately uses recursive backtracking |
|
rather than building an NFA). Worked around by making use of possesive |
|
quantifiers. |
|
* Generated service classes now also generate pure interfaces. For a service |
|
Foo, Foo.Interface is a pure interface containing all of the service's |
|
defined methods. Foo.newReflectiveService() can be called to wrap an |
|
instance of this interface in a class that implements the generic |
|
RpcService interface, which provides reflection support that is usually |
|
needed by RPC server implementations. |
|
* RPC interfaces now support blocking operation in addition to non-blocking. |
|
The protocol compiler generates separate blocking and non-blocking stubs |
|
which operate against separate blocking and non-blocking RPC interfaces. |
|
RPC implementations will have to implement the new interfaces in order to |
|
support blocking mode. |
|
* New I/O methods parseDelimitedFrom(), mergeDelimitedFrom(), and |
|
writeDelimitedTo() read and write "delemited" messages from/to a stream, |
|
meaning that the message size precedes the data. This way, you can write |
|
multiple messages to a stream without having to worry about delimiting |
|
them yourself. |
|
* Throw a more descriptive exception when build() is double-called. |
|
* Add a method to query whether CodedInputStream is at the end of the input |
|
stream. |
|
* Add a method to reset a CodedInputStream's size counter; useful when |
|
reading many messages with the same stream. |
|
* equals() and hashCode() now account for unknown fields. |
|
|
|
Python |
|
* Added slicing support for repeated scalar fields. Added slice retrieval and |
|
removal of repeated composite fields. |
|
* Updated RPC interfaces to allow for blocking operation. A client may |
|
now pass None for a callback when making an RPC, in which case the |
|
call will block until the response is received, and the response |
|
object will be returned directly to the caller. This interface change |
|
cannot be used in practice until RPC implementations are updated to |
|
implement it. |
|
* Changes to input_stream.py should make protobuf compatible with appengine. |
|
|
|
2008-11-25 version 2.0.3: |
|
|
|
protoc |
|
* Enum values may now have custom options, using syntax similar to field |
|
options. |
|
* Fixed bug where .proto files which use custom options but don't actually |
|
define them (i.e. they import another .proto file defining the options) |
|
had to explicitly import descriptor.proto. |
|
* Adjacent string literals in .proto files will now be concatenated, like in |
|
C. |
|
* If an input file is a Windows absolute path (e.g. "C:\foo\bar.proto") and |
|
the import path only contains "." (or contains "." but does not contain |
|
the file), protoc incorrectly thought that the file was under ".", because |
|
it thought that the path was relative (since it didn't start with a slash). |
|
This has been fixed. |
|
|
|
C++ |
|
* Generated message classes now have a Swap() method which efficiently swaps |
|
the contents of two objects. |
|
* All message classes now have a SpaceUsed() method which returns an estimate |
|
of the number of bytes of allocated memory currently owned by the object. |
|
This is particularly useful when you are reusing a single message object |
|
to improve performance but want to make sure it doesn't bloat up too large. |
|
* New method Message::SerializeAsString() returns a string containing the |
|
serialized data. May be more convenient than calling |
|
SerializeToString(string*). |
|
* In debug mode, log error messages when string-type fields are found to |
|
contain bytes that are not valid UTF-8. |
|
* Fixed bug where a message with multiple extension ranges couldn't parse |
|
extensions. |
|
* Fixed bug where MergeFrom(const Message&) didn't do anything if invoked on |
|
a message that contained no fields (but possibly contained extensions). |
|
* Fixed ShortDebugString() to not be O(n^2). Durr. |
|
* Fixed crash in TextFormat parsing if the first token in the input caused a |
|
tokenization error. |
|
* Fixed obscure bugs in zero_copy_stream_impl.cc. |
|
* Added support for HP C++ on Tru64. |
|
* Only build tests on "make check", not "make". |
|
* Fixed alignment issue that caused crashes when using DynamicMessage on |
|
64-bit Sparc machines. |
|
* Simplify template usage to work with MSVC 2003. |
|
* Work around GCC 4.3.x x86_64 compiler bug that caused crashes on startup. |
|
(This affected Fedora 9 in particular.) |
|
* Now works on "Solaris 10 using recent Sun Studio". |
|
|
|
Java |
|
* New overload of mergeFrom() which parses a slice of a byte array instead |
|
of the whole thing. |
|
* New method ByteString.asReadOnlyByteBuffer() does what it sounds like. |
|
* Improved performance of isInitialized() when optimizing for code size. |
|
|
|
Python |
|
* Corrected ListFields() signature in Message base class to match what |
|
subclasses actually implement. |
|
* Some minor refactoring. |
|
* Don't pass self as first argument to superclass constructor (no longer |
|
allowed in Python 2.6). |
|
|
|
2008-09-29 version 2.0.2: |
|
|
|
General |
|
* License changed from Apache 2.0 to New BSD. |
|
* It is now possible to define custom "options", which are basically |
|
annotations which may be placed on definitions in a .proto file. |
|
For example, you might define a field option called "foo" like so: |
|
import "google/protobuf/descriptor.proto" |
|
extend google.protobuf.FieldOptions { |
|
optional string foo = 12345; |
|
} |
|
Then you annotate a field using the "foo" option: |
|
message MyMessage { |
|
optional int32 some_field = 1 [(foo) = "bar"] |
|
} |
|
The value of this option is then visible via the message's |
|
Descriptor: |
|
const FieldDescriptor* field = |
|
MyMessage::descriptor()->FindFieldByName("some_field"); |
|
assert(field->options().GetExtension(foo) == "bar"); |
|
This feature has been implemented and tested in C++ and Java. |
|
Other languages may or may not need to do extra work to support |
|
custom options, depending on how they construct descriptors. |
|
|
|
C++ |
|
* Fixed some GCC warnings that only occur when using -pedantic. |
|
* Improved static initialization code, making ordering more |
|
predictable among other things. |
|
* TextFormat will no longer accept messages which contain multiple |
|
instances of a singular field. Previously, the latter instance |
|
would overwrite the former. |
|
* Now works on systems that don't have hash_map. |
|
|
|
Java |
|
* Print @Override annotation in generated code where appropriate. |
|
|
|
Python |
|
* Strings now use the "unicode" type rather than the "str" type. |
|
String fields may still be assigned ASCII "str" values; they will |
|
automatically be converted. |
|
* Adding a property to an object representing a repeated field now |
|
raises an exception. For example: |
|
# No longer works (and never should have). |
|
message.some_repeated_field.foo = 1 |
|
|
|
Windows |
|
* We now build static libraries rather than DLLs by default on MSVC. |
|
See vsprojects/readme.txt for more information. |
|
|
|
2008-08-15 version 2.0.1: |
|
|
|
protoc |
|
* New flags --encode and --decode can be used to convert between protobuf text |
|
format and binary format from the command-line. |
|
* New flag --descriptor_set_out can be used to write FileDescriptorProtos for |
|
all parsed files directly into a single output file. This is particularly |
|
useful if you wish to parse .proto files from programs written in languages |
|
other than C++: just run protoc as a background process and have it output |
|
a FileDescriptorList, then parse that natively. |
|
* Improved error message when an enum value's name conflicts with another |
|
symbol defined in the enum type's scope, e.g. if two enum types declared |
|
in the same scope have values with the same name. This is disallowed for |
|
compatibility with C++, but this wasn't clear from the error. |
|
* Fixed absolute output paths on Windows. |
|
* Allow trailing slashes in --proto_path mappings. |
|
|
|
C++ |
|
* Reflection objects are now per-class rather than per-instance. To make this |
|
possible, the Reflection interface had to be changed such that all methods |
|
take the Message instance as a parameter. This change improves performance |
|
significantly in memory-bandwidth-limited use cases, since it makes the |
|
message objects smaller. Note that source-incompatible interface changes |
|
like this will not be made again after the library leaves beta. |
|
* Heuristically detect sub-messages when printing unknown fields. |
|
* Fix static initialization ordering bug that caused crashes at startup when |
|
compiling on Mac with static linking. |
|
* Fixed TokenizerTest when compiling with -DNDEBUG on Linux. |
|
* Fixed incorrect definition of kint32min. |
|
* Fix bytes type setter to work with byte sequences with embedded NULLs. |
|
* Other irrelevant tweaks. |
|
|
|
Java |
|
* Fixed UnknownFieldSet's parsing of varints larger than 32 bits. |
|
* Fixed TextFormat's parsing of "inf" and "nan". |
|
* Fixed TextFormat's parsing of comments. |
|
* Added info to Java POM that will be required when we upload the |
|
package to a Maven repo. |
|
|
|
Python |
|
* MergeFrom(message) and CopyFrom(message) are now implemented. |
|
* SerializeToString() raises an exception if the message is missing required |
|
fields. |
|
* Code organization improvements. |
|
* Fixed doc comments for RpcController and RpcChannel, which had somehow been |
|
swapped. |
|
* Fixed text_format_test on Windows where floating-point exponents sometimes |
|
contain extra zeros. |
|
* Fix Python service CallMethod() implementation. |
|
|
|
Other |
|
* Improved readmes. |
|
* VIM syntax highlighting improvements. |
|
|
|
2008-07-07 version 2.0.0: |
|
|
|
* First public release.
|
|
|