1d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville2009-01-08 version 2.3.0: 2fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 3d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville General 4d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville * Parsers for repeated numeric fields now always accept both packed and 5d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unpacked input. The [packed=true] option only affects serializers. 6d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville Therefore, it is possible to switch a field to packed format without 7d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville breaking backwards-compatibility -- as long as all parties are using 8d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville protobuf 2.3.0 or above, at least. 9d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville * The generic RPC service code generated by the C++, Java, and Python 10d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville generators can be disabled via file options: 11d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville option cc_generic_services = false; 12d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville option java_generic_services = false; 13d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville option py_generic_services = false; 14d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville This allows plugins to generate alternative code, possibly specific to some 15d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville particular RPC implementation. 16d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 17d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville protoc 18d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville * Now supports a plugin system for code generators. Plugins can generate 19d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville code for new languages or inject additional code into the output of other 20d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville code generators. Plugins are just binaries which accept a protocol buffer 21d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville on stdin and write a protocol buffer to stdout, so they may be written in 22d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville any language. See src/google/protobuf/compiler/plugin.proto. 23d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville **WARNING**: Plugins are experimental. The interface may change in a 24d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville future version. 25d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville * If the output location ends in .zip or .jar, protoc will write its output 26d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville to a zip/jar archive instead of a directory. For example: 27d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville protoc --java_out=myproto_srcs.jar --python_out=myproto.zip myproto.proto 28d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville Currently the archive contents are not compressed, though this could change 29d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville in the future. 30d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville * inf, -inf, and nan can now be used as default values for float and double 31d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville fields. 32fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 33fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville C++ 34d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville * Various speed and code size optimizations. 35d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville * DynamicMessageFactory is now fully thread-safe. 36d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville * Message::Utf8DebugString() method is like DebugString() but avoids escaping 37d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville UTF-8 bytes. 38d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville * Compiled-in message types can now contain dynamic extensions, through use 39d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville of CodedInputStream::SetExtensionRegistry(). 40d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville * Now compiles shared libraries (DLLs) by default on Cygwin and MinGW, to 41d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville match other platforms. Use --disable-shared to avoid this. 42d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 43d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville Java 44d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville * parseDelimitedFrom() and mergeDelimitedFrom() now detect EOF and return 45d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville false/null instead of throwing an exception. 46d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville * Fixed some initialization ordering bugs. 47d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville * Fixes for OpenJDK 7. 48d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 49d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville Python 50d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville * 10-25 times faster than 2.2.0, still pure-Python. 51d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville * Calling a mutating method on a sub-message always instantiates the message 52d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville in its parent even if the mutating method doesn't actually mutate anything 53d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville (e.g. parsing from an empty string). 54d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville * Expanded descriptors a bit. 55fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 56fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville2009-08-11 version 2.2.0: 57fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 58fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville C++ 59fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Lite mode: The "optimize_for = LITE_RUNTIME" option causes the compiler 60fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville to generate code which only depends libprotobuf-lite, which is much smaller 61fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville than libprotobuf but lacks descriptors, reflection, and some other features. 62fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fixed bug where Message.Swap(Message) was only implemented for 63fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville optimize_for_speed. Swap now properly implemented in both modes 64fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (Issue 91). 65fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Added RemoveLast and SwapElements(index1, index2) to Reflection 66fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville interface for repeated elements. 67fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Added Swap(Message) to Reflection interface. 68fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Floating-point literals in generated code that are intended to be 69fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville single-precision now explicitly have 'f' suffix to avoid pedantic warnings 70fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville produced by some compilers. 71fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * The [deprecated=true] option now causes the C++ code generator to generate 72fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville a GCC-style deprecation annotation (no-op on other compilers). 73fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * google::protobuf::GetEnumDescriptor<SomeGeneratedEnumType>() returns the 74fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville EnumDescriptor for that type -- useful for templates which cannot call 75fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville SomeGeneratedEnumType_descriptor(). 76fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Various optimizations and obscure bug fixes. 77fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 78fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Java 79fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Lite mode: The "optimize_for = LITE_RUNTIME" option causes the compiler 80fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville to generate code which only depends libprotobuf-lite, which is much smaller 81fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville than libprotobuf but lacks descriptors, reflection, and some other features. 82fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Lots of style cleanups. 83fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 84fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Python 85fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fixed endianness bug with floats and doubles. 86fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Text format parsing support. 87fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fix bug with parsing packed repeated fields in embedded messages. 88fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Ability to initialize fields by passing keyword args to constructor. 89fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Support iterators in extend and __setslice__ for containers. 90fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 91fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville2009-05-13 version 2.1.0: 92fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 93fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville General 94fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Repeated fields of primitive types (types other that string, group, and 95fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville nested messages) may now use the option [packed = true] to get a more 96fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville efficient encoding. In the new encoding, the entire list is written 97fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville as a single byte blob using the "length-delimited" wire type. Within 98fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville this blob, the individual values are encoded the same way they would 99fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville be normally except without a tag before each value (thus, they are 100fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville tightly "packed"). 101fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * For each field, the generated code contains an integer constant assigned 102fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville to the field number. For example, the .proto file: 103fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message Foo { optional int bar_baz = 123; } 104fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville would generate the following constants, all with the integer value 123: 105fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville C++: Foo::kBarBazFieldNumber 106fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Java: Foo.BAR_BAZ_FIELD_NUMBER 107fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Python: Foo.BAR_BAZ_FIELD_NUMBER 108fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Constants are also generated for extensions, with the same naming scheme. 109fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville These constants may be used as switch cases. 110fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Updated bundled Google Test to version 1.3.0. Google Test is now bundled 111fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville in its verbatim form as a nested autoconf package, so you can drop in any 112fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville other version of Google Test if needed. 113fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * optimize_for = SPEED is now the default, by popular demand. Use 114fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville optimize_for = CODE_SIZE if code size is more important in your app. 115fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * It is now an error to define a default value for a repeated field. 116fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Previously, this was silently ignored (it had no effect on the generated 117fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville code). 118fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fields can now be marked deprecated like: 119fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville optional int32 foo = 1 [deprecated = true]; 120fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Currently this does not have any actual effect, but in the future the code 121fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville generators may generate deprecation annotations in each language. 122fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Cross-compiling should now be possible using the --with-protoc option to 123fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville configure. See README.txt for more info. 124fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 125fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville protoc 126fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * --error_format=msvs option causes errors to be printed in Visual Studio 127fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville format, which should allow them to be clicked on in the build log to go 128fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville directly to the error location. 129fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * The type name resolver will no longer resolve type names to fields. For 130fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville example, this now works: 131fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message Foo {} 132fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message Bar { 133fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville optional int32 Foo = 1; 134fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville optional Foo baz = 2; 135fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 136fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Previously, the type of "baz" would resolve to "Bar.Foo", and you'd get 137fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville an error because Bar.Foo is a field, not a type. Now the type of "baz" 138fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville resolves to the message type Foo. This change is unlikely to make a 139fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville difference to anyone who follows the Protocol Buffers style guide. 140fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 141fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville C++ 142fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Several optimizations, including but not limited to: 143fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville - Serialization, especially to flat arrays, is 10%-50% faster, possibly 144fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville more for small objects. 145fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville - Several descriptor operations which previously required locking no longer 146fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville do. 147fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville - Descriptors are now constructed lazily on first use, rather than at 148fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville process startup time. This should save memory in programs which do not 149fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville use descriptors or reflection. 150fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville - UnknownFieldSet completely redesigned to be more efficient (especially in 151fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville terms of memory usage). 152fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville - Various optimizations to reduce code size (though the serialization speed 153fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville optimizations increased code size). 154fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Message interface has method ParseFromBoundedZeroCopyStream() which parses 155fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville a limited number of bytes from an input stream rather than parsing until 156fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville EOF. 157fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * GzipInputStream and GzipOutputStream support reading/writing gzip- or 158fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville zlib-compressed streams if zlib is available. 159fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (google/protobuf/io/gzip_stream.h) 160fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * DescriptorPool::FindAllExtensions() and corresponding 161fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville DescriptorDatabase::FindAllExtensions() can be used to enumerate all 162fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extensions of a given type. 163fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * For each enum type Foo, protoc will generate functions: 164fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const string& Foo_Name(Foo value); 165fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville bool Foo_Parse(const string& name, Foo* result); 166fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville The former returns the name of the enum constant corresponding to the given 167fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville value while the latter finds the value corresponding to a name. 168fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * RepeatedField and RepeatedPtrField now have back-insertion iterators. 169fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * String fields now have setters that take a char* and a size, in addition 170fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville to the existing ones that took char* or const string&. 171fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * DescriptorPool::AllowUnknownDependencies() may be used to tell 172fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville DescriptorPool to create placeholder descriptors for unknown entities 173fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville referenced in a FileDescriptorProto. This can allow you to parse a .proto 174fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville file without having access to other .proto files that it imports, for 175fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville example. 176fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Updated gtest to latest version. The gtest package is now included as a 177fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville nested autoconf package, so it should be able to drop new versions into the 178fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "gtest" subdirectory without modification. 179fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 180fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Java 181fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fixed bug where Message.mergeFrom(Message) failed to merge extensions. 182fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Message interface has new method toBuilder() which is equivalent to 183fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville newBuilderForType().mergeFrom(this). 184fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * All enums now implement the ProtocolMessageEnum interface. 185fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Setting a field to null now throws NullPointerException. 186fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fixed tendency for TextFormat's parsing to overflow the stack when 187fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville parsing large string values. The underlying problem is with Java's 188fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville regex implementation (which unfortunately uses recursive backtracking 189fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville rather than building an NFA). Worked around by making use of possesive 190fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville quantifiers. 191fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Generated service classes now also generate pure interfaces. For a service 192fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Foo, Foo.Interface is a pure interface containing all of the service's 193fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville defined methods. Foo.newReflectiveService() can be called to wrap an 194fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville instance of this interface in a class that implements the generic 195fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville RpcService interface, which provides reflection support that is usually 196fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville needed by RPC server implementations. 197fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * RPC interfaces now support blocking operation in addition to non-blocking. 198fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville The protocol compiler generates separate blocking and non-blocking stubs 199fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville which operate against separate blocking and non-blocking RPC interfaces. 200fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville RPC implementations will have to implement the new interfaces in order to 201fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville support blocking mode. 202fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * New I/O methods parseDelimitedFrom(), mergeDelimitedFrom(), and 203fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville writeDelimitedTo() read and write "delemited" messages from/to a stream, 204fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville meaning that the message size precedes the data. This way, you can write 205fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville multiple messages to a stream without having to worry about delimiting 206fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville them yourself. 207fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Throw a more descriptive exception when build() is double-called. 208fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Add a method to query whether CodedInputStream is at the end of the input 209fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville stream. 210fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Add a method to reset a CodedInputStream's size counter; useful when 211fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville reading many messages with the same stream. 212fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * equals() and hashCode() now account for unknown fields. 213fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 214fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Python 215fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Added slicing support for repeated scalar fields. Added slice retrieval and 216fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville removal of repeated composite fields. 217fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Updated RPC interfaces to allow for blocking operation. A client may 218fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville now pass None for a callback when making an RPC, in which case the 219fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville call will block until the response is received, and the response 220fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville object will be returned directly to the caller. This interface change 221fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville cannot be used in practice until RPC implementations are updated to 222fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville implement it. 223fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Changes to input_stream.py should make protobuf compatible with appengine. 224fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 225fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville2008-11-25 version 2.0.3: 226fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 227fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville protoc 228fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Enum values may now have custom options, using syntax similar to field 229fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville options. 230fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fixed bug where .proto files which use custom options but don't actually 231fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville define them (i.e. they import another .proto file defining the options) 232fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville had to explicitly import descriptor.proto. 233fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Adjacent string literals in .proto files will now be concatenated, like in 234fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville C. 235fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * If an input file is a Windows absolute path (e.g. "C:\foo\bar.proto") and 236fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville the import path only contains "." (or contains "." but does not contain 237fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville the file), protoc incorrectly thought that the file was under ".", because 238fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville it thought that the path was relative (since it didn't start with a slash). 239fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville This has been fixed. 240fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 241fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville C++ 242fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Generated message classes now have a Swap() method which efficiently swaps 243fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville the contents of two objects. 244fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * All message classes now have a SpaceUsed() method which returns an estimate 245fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville of the number of bytes of allocated memory currently owned by the object. 246fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville This is particularly useful when you are reusing a single message object 247fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville to improve performance but want to make sure it doesn't bloat up too large. 248fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * New method Message::SerializeAsString() returns a string containing the 249fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville serialized data. May be more convenient than calling 250fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville SerializeToString(string*). 251fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * In debug mode, log error messages when string-type fields are found to 252fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville contain bytes that are not valid UTF-8. 253fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fixed bug where a message with multiple extension ranges couldn't parse 254fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extensions. 255fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fixed bug where MergeFrom(const Message&) didn't do anything if invoked on 256fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville a message that contained no fields (but possibly contained extensions). 257fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fixed ShortDebugString() to not be O(n^2). Durr. 258fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fixed crash in TextFormat parsing if the first token in the input caused a 259fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville tokenization error. 260fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fixed obscure bugs in zero_copy_stream_impl.cc. 261fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Added support for HP C++ on Tru64. 262fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Only build tests on "make check", not "make". 263fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fixed alignment issue that caused crashes when using DynamicMessage on 264fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 64-bit Sparc machines. 265fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Simplify template usage to work with MSVC 2003. 266fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Work around GCC 4.3.x x86_64 compiler bug that caused crashes on startup. 267fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (This affected Fedora 9 in particular.) 268fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Now works on "Solaris 10 using recent Sun Studio". 269fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 270fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Java 271fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * New overload of mergeFrom() which parses a slice of a byte array instead 272fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville of the whole thing. 273fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * New method ByteString.asReadOnlyByteBuffer() does what it sounds like. 274fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Improved performance of isInitialized() when optimizing for code size. 275fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 276fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Python 277fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Corrected ListFields() signature in Message base class to match what 278fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville subclasses actually implement. 279fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Some minor refactoring. 280fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Don't pass self as first argument to superclass constructor (no longer 281fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville allowed in Python 2.6). 282fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 283fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville2008-09-29 version 2.0.2: 284fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 285fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville General 286fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * License changed from Apache 2.0 to New BSD. 287fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * It is now possible to define custom "options", which are basically 288fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville annotations which may be placed on definitions in a .proto file. 289fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville For example, you might define a field option called "foo" like so: 290fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville import "google/protobuf/descriptor.proto" 291fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extend google.protobuf.FieldOptions { 292fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville optional string foo = 12345; 293fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 294fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Then you annotate a field using the "foo" option: 295fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message MyMessage { 296fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville optional int32 some_field = 1 [(foo) = "bar"] 297fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 298fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville The value of this option is then visible via the message's 299fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Descriptor: 300fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const FieldDescriptor* field = 301fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MyMessage::descriptor()->FindFieldByName("some_field"); 302fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assert(field->options().GetExtension(foo) == "bar"); 303fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville This feature has been implemented and tested in C++ and Java. 304fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Other languages may or may not need to do extra work to support 305fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville custom options, depending on how they construct descriptors. 306fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 307fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville C++ 308fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fixed some GCC warnings that only occur when using -pedantic. 309fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Improved static initialization code, making ordering more 310fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville predictable among other things. 311fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * TextFormat will no longer accept messages which contain multiple 312fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville instances of a singular field. Previously, the latter instance 313fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville would overwrite the former. 314fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Now works on systems that don't have hash_map. 315fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 316fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Java 317fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Print @Override annotation in generated code where appropriate. 318fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 319fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Python 320fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Strings now use the "unicode" type rather than the "str" type. 321fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville String fields may still be assigned ASCII "str" values; they will 322fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville automatically be converted. 323fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Adding a property to an object representing a repeated field now 324fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville raises an exception. For example: 325fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # No longer works (and never should have). 326fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message.some_repeated_field.foo = 1 327fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 328fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Windows 329fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * We now build static libraries rather than DLLs by default on MSVC. 330fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville See vsprojects/readme.txt for more information. 331fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 332fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville2008-08-15 version 2.0.1: 333fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 334fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville protoc 335fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * New flags --encode and --decode can be used to convert between protobuf text 336fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville format and binary format from the command-line. 337fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * New flag --descriptor_set_out can be used to write FileDescriptorProtos for 338fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville all parsed files directly into a single output file. This is particularly 339fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville useful if you wish to parse .proto files from programs written in languages 340fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville other than C++: just run protoc as a background process and have it output 341fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville a FileDescriptorList, then parse that natively. 342fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Improved error message when an enum value's name conflicts with another 343fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville symbol defined in the enum type's scope, e.g. if two enum types declared 344fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville in the same scope have values with the same name. This is disallowed for 345fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville compatibility with C++, but this wasn't clear from the error. 346fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fixed absolute output paths on Windows. 347fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Allow trailing slashes in --proto_path mappings. 348fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 349fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville C++ 350fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Reflection objects are now per-class rather than per-instance. To make this 351fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville possible, the Reflection interface had to be changed such that all methods 352fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville take the Message instance as a parameter. This change improves performance 353fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville significantly in memory-bandwidth-limited use cases, since it makes the 354fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message objects smaller. Note that source-incompatible interface changes 355fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville like this will not be made again after the library leaves beta. 356fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Heuristically detect sub-messages when printing unknown fields. 357fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fix static initialization ordering bug that caused crashes at startup when 358fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville compiling on Mac with static linking. 359fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fixed TokenizerTest when compiling with -DNDEBUG on Linux. 360fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fixed incorrect definition of kint32min. 361fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fix bytes type setter to work with byte sequences with embedded NULLs. 362fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Other irrelevant tweaks. 363fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 364fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Java 365fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fixed UnknownFieldSet's parsing of varints larger than 32 bits. 366fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fixed TextFormat's parsing of "inf" and "nan". 367fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fixed TextFormat's parsing of comments. 368fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Added info to Java POM that will be required when we upload the 369fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville package to a Maven repo. 370fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 371fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Python 372fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * MergeFrom(message) and CopyFrom(message) are now implemented. 373fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * SerializeToString() raises an exception if the message is missing required 374fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville fields. 375fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Code organization improvements. 376fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fixed doc comments for RpcController and RpcChannel, which had somehow been 377fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville swapped. 378fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fixed text_format_test on Windows where floating-point exponents sometimes 379fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville contain extra zeros. 380fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Fix Python service CallMethod() implementation. 381fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 382fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Other 383fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Improved readmes. 384fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * VIM syntax highlighting improvements. 385fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 386fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville2008-07-07 version 2.0.0: 387fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 388fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * First public release. 389