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