blob: c3503fc8f9d041b742d275c7fcd3e520fe01edb2 [file] [log] [blame]
Josh Haberman81e75c12015-12-30 14:03:49 -080012015-12-30 version 3.0.0-beta-2 (C++/Java/Python/Ruby/Nano/Objective-C/C#/JavaScript)
Feng Xiaod5fb4082015-12-21 14:36:30 -08002 General
Dongjoon Hyun7b08d492016-01-11 14:52:01 -08003 * Introduced a new language implementation: JavaScript.
Feng Xiaod5fb4082015-12-21 14:36:30 -08004 * Added a new field option "json_name". By default proto field names are
5 converted to "lowerCamelCase" in proto3 JSON format. This option can be
6 used to override this behavior and specify a different JSON name for the
7 field.
8 * Added conformance tests to ensure implementations are following proto3 JSON
9 specification.
10
11 C++ (Beta)
12 * Various bug fixes and improvements to the JSON support utility:
13 - Duplicate map keys in JSON are now rejected (i.e., translation will
14 fail).
15 - Fixed wire-format for google.protobuf.Value/ListValue.
16 - Fixed precision loss when converting google.protobuf.Timestamp.
17 - Fixed a bug when parsing invalid UTF-8 code points.
18 - Fixed a memory leak.
19 - Reduced call stack usage.
20
21 Java (Beta)
22 * Cleaned up some unused methods on CodedOutputStream.
23 * Presized lists for packed fields during parsing in the lite runtime to
24 reduce allocations and improve performance.
25 * Improved the performance of unknown fields in the lite runtime.
26 * Introduced UnsafeByteStrings to support zero-copy ByteString creation.
27 * Various bug fixes and improvements to the JSON support utility:
28 - Fixed a thread-safety bug.
29 - Added a new option “preservingProtoFieldNames” to JsonFormat.
30 - Added a new option “includingDefaultValueFields” to JsonFormat.
31 - Updated the JSON utility to comply with proto3 JSON specification.
32
33 Python (Beta)
34 * Added proto3 JSON format utility. It includes support for all field types
35 and a few well-known types except for Any and Struct.
36 * Added runtime support for Any, Timestamp, Duration and FieldMask.
37 * [ ] is now accepted for repeated scalar fields in text format parser.
Josh Haberman81e75c12015-12-30 14:03:49 -080038 * Map fields now have proper O(1) performance for lookup/insert/delete
39 when using the Python/C++ implementation. They were previously using O(n)
40 search-based algorithms because the C++ reflection interface didn't
41 support true map operations.
Feng Xiaod5fb4082015-12-21 14:36:30 -080042
43 Objective-C (Beta)
44 * Various bug-fixes and code tweaks to pass more strict compiler warnings.
45 * Now has conformance test coverage and is passing all tests.
46
47 C# (Beta)
48 * Various bug-fixes.
49 * Code generation: Files generated in directories based on namespace.
50 * Code generation: Include comments from .proto files in XML doc
51 comments (naively)
52 * Code generation: Change organization/naming of "reflection class" (access
53 to file descriptor)
54 * Code generation and library: Add Parser property to MessageDescriptor,
55 and introduce a non-generic parser type.
56 * Library: Added TypeRegistry to support JSON parsing/formatting of Any.
57 * Library: Added Any.Pack/Unpack support.
58 * Library: Implemented JSON parsing.
59
60 Javascript (Alpha)
61 * Added proto3 support for JavaScript. The runtime is written in pure
62 JavaScript and works in browsers and in Node.js. To generate JavaScript
63 code for your proto, invoke protoc with "--js_out". See js/README.md
64 for more build instructions.
65
Feng Xiaocc607532015-08-26 16:31:30 -0700662015-08-26 version 3.0.0-beta-1 (C++/Java/Python/Ruby/Nano/Objective-C/C#)
67 About Beta
68 * This is the first beta release of protobuf v3.0.0. Not all languages
69 have reached beta stage. Languages not marked as beta are still in
70 alpha (i.e., be prepared for API breaking changes).
71
72 General
73 * Proto3 JSON is supported in several languages (fully supported in C++
74 and Java, partially supported in Ruby/C#). The JSON spec is defined in
75 the proto3 language guide:
76
77 https://developers.google.com/protocol-buffers/docs/proto3#json
78
79 We will publish a more detailed spec to define the exact behavior of
80 proto3-conformant JSON serializers and parsers. Until then, do not rely
81 on specific behaviors of the implementation if it’s not documented in
82 the above spec. More specifically, the behavior is not yet finalized for
83 the following:
84 - Parsing invalid JSON input (e.g., input with trailing commas).
85 - Non-camelCase names in JSON input.
86 - The same field appears multiple times in JSON input.
87 - JSON arrays contain “null” values.
88 - The message has unknown fields.
89
90 * Proto3 now enforces strict UTF-8 checking. Parsing will fail if a string
91 field contains non UTF-8 data.
92
93 C++ (Beta)
94 * Introduced new utility functions/classes in the google/protobuf/util
95 directory:
96 - MessageDifferencer: compare two proto messages and report their
97 differences.
98 - JsonUtil: support converting protobuf binary format to/from JSON.
99 - TimeUtil: utility functions to work with well-known types Timestamp
100 and Duration.
101 - FieldMaskUtil: utility functions to work with FieldMask.
102
103 * Performance optimization of arena construction and destruction.
104 * Bug fixes for arena and maps support.
105 * Changed to use cmake for Windows Visual Studio builds.
106 * Added Bazel support.
107
108 Java (Beta)
109 * Introduced a new util package that will be distributed as a separate
110 artifact in maven. It contains:
111 - JsonFormat: convert proto messages to/from JSON.
112 - TimeUtil: utility functions to work with Timestamp and Duration.
113 - FieldMaskUtil: utility functions to work with FieldMask.
114
115 * The static PARSER in each generated message is deprecated, and it will
116 be removed in a future release. A static parser() getter is generated
117 for each message type instead.
118 * Performance optimizations for String fields serialization.
119 * Performance optimizations for Lite runtime on Android:
120 - Reduced allocations
121 - Reduced method overhead after ProGuarding
122 - Reduced code size after ProGuarding
123
124 Python (Alpha)
125 * Removed legacy Python 2.5 support.
126 * Moved to a single Python 2.x/3.x-compatible codebase, instead of using 2to3.
127 * Fixed build/tests on Python 2.6, 2.7, 3.3, and 3.4.
128 - Pure-Python works on all four.
129 - Python/C++ implementation works on all but 3.4, due to changes in the
130 Python/C++ API in 3.4.
131 * Some preliminary work has been done to allow for multiple DescriptorPools
132 with Python/C++.
133
134 Ruby (Alpha)
135 * Many bugfixes:
136 - fixed parsing/serialization of bytes, sint, sfixed types
137 - other parser bugfixes
138 - fixed memory leak affecting Ruby 2.2
139
140 JavaNano (Alpha)
141 * JavaNano generated code now will be put in a nano package by default to
142 avoid conflicts with Java generated code.
143
144 Objective-C (Alpha)
145 * Added non-null markup to ObjC library. Requires SDK 8.4+ to build.
146 * Many bugfixes:
147 - Removed the class/enum filter.
148 - Renamed some internal types to avoid conflicts with the well-known types
149 protos.
150 - Added missing support for parsing repeated primitive fields in packed or
151 unpacked forms.
152 - Added *Count for repeated and map<> fields to avoid auto-create when
153 checking for them being set.
154
155 C# (Alpha)
156 * Namespace changed to Google.Protobuf (and NuGet package will be named
157 correspondingly).
158 * Target platforms now .NET 4.5 and selected portable subsets only.
159 * Removed lite runtime.
160 * Reimplementation to use mutable message types.
161 * Null references used to represent "no value" for message type fields.
162 * Proto3 semantics supported; proto2 files are prohibited for C# codegen.
163 Most proto3 features supported:
164 - JSON formatting (a.k.a. serialization to JSON), including well-known
165 types (except for Any).
166 - Wrapper types mapped to nullable value types (or string/ByteString
167 allowing nullability). JSON parsing is not supported yet.
168 - maps
169 - oneof
170 - enum unknown value preservation
171
Bo Yang8908cf12015-05-26 14:37:47 -07001722015-05-25 version 3.0.0-alpha-3 (Objective-C/C#):
173 General
174 * Introduced two new language implementations (Objective-C, C#) to proto3.
Bo Yang3e2c8a52015-05-28 14:52:44 -0700175 * Explicit "optional" keyword are disallowed in proto3 syntax, as fields are
176 optional by default.
177 * Group fields are no longer supported in proto3 syntax.
Bo Yang8908cf12015-05-26 14:37:47 -0700178 * Changed repeated primitive fields to use packed serialization by default in
179 proto3 (implemented for C++, Java, Python in this release). The user can
180 still disable packed serialization by setting packed to false for now.
181 * Added well-known type protos (any.proto, empty.proto, timestamp.proto,
182 duration.proto, etc.). Users can import and use these protos just like
Dongjoon Hyun7b08d492016-01-11 14:52:01 -0800183 regular proto files. Additional runtime support will be added for them in
Bo Yang8908cf12015-05-26 14:37:47 -0700184 future releases (in the form of utility helper functions, or having them
185 replaced by language specific types in generated code).
186 * Added a "reserved" keyword in both proto2 and proto3 syntax. User can use
187 this keyword to declare reserved field numbers and names to prevent them
188 from being reused by other fields in the same message.
189
190 To reserve field numbers, add a reserved declaration in your message:
191
192 message TestMessage {
193 reserved 2, 15, 9 to 11, 3;
194 }
195
196 This reserves field numbers 2, 3, 9, 10, 11 and 15. If a user uses any of
197 these as field numbers, the protocol buffer compiler will report an error.
198
199 Field names can also be reserved:
200
201 message TestMessage {
202 reserved "foo", "bar";
203 }
204
205 * Various bug fixes since 3.0.0-alpha-2
206
207 Objective-C
208 Objective-C includes a code generator and a native objective-c runtime
209 library. By adding “--objc_out” to protoc, the code generator will generate
210 a header(*.pbobjc.h) and an implementation file(*.pbobjc.m) for each proto
211 file.
212
213 In this first release, the generated interface provides: enums, messages,
214 field support(single, repeated, map, oneof), proto2 and proto3 syntax
215 support, parsing and serialization. It’s compatible with ARC and non-ARC
216 usage. Besides, user can also access it via the swift bridging header.
217
218 See objectivec/README.md for details.
219
220 C#
221 * C# protobufs are based on project
222 https://github.com/jskeet/protobuf-csharp-port. The original project was
223 frozen and all the new development will happen here.
224 * Codegen plugin for C# was completely rewritten to C++ and is now an
Dongjoon Hyun7b08d492016-01-11 14:52:01 -0800225 integral part of protoc.
Bo Yang8908cf12015-05-26 14:37:47 -0700226 * Some refactorings and cleanup has been applied to the C# runtime library.
227 * Only proto2 is supported in C# at the moment, proto3 support is in
228 progress and will likely bring significant breaking changes to the API.
229
230 See csharp/README.md for details.
231
232 C++
233 * Added runtime support for Any type. To use Any in your proto file, first
234 import the definition of Any:
235
236 // foo.proto
237 import "google/protobuf/any.proto";
238 message Foo {
239 google.protobuf.Any any_field = 1;
240 }
241 message Bar {
242 int32 value = 1;
243 }
244
245 Then in C++ you can access the Any field using PackFrom()/UnpackTo()
246 methods:
247
248 Foo foo;
249 Bar bar = ...;
250 foo.mutable_any_field()->PackFrom(bar);
251 ...
252 if (foo.any_field().IsType<Bar>()) {
253 foo.any_field().UnpackTo(&bar);
254 ...
255 }
256 * In text format, entries of a map field will be sorted by key.
257
258 Java
259 * Continued optimizations on the lite runtime to improve performance for
260 Android.
261
262 Python
263 * Added map support.
264 - maps now have a dict-like interface (msg.map_field[key] = value)
265 - existing code that modifies maps via the repeated field interface
266 will need to be updated.
267
268 Ruby
269 * Improvements to RepeatedField's emulation of the Ruby Array API.
270 * Various speedups and internal cleanups.
271
Josh Haberman7d5cf8d2015-02-25 23:47:09 -08002722015-02-26 version 3.0.0-alpha-2 (Python/Ruby/JavaNano):
Jisi Liu32f5d012015-02-20 14:45:45 -0800273 General
Josh Haberman7d5cf8d2015-02-25 23:47:09 -0800274 * Introduced three new language implementations (Ruby, JavaNano, and
275 Python) to proto3.
Jisi Liu32f5d012015-02-20 14:45:45 -0800276 * Various bug fixes since 3.0.0-alpha-1
277
Josh Haberman31e8c202015-02-25 23:06:35 -0800278 Python:
279 Python has received several updates, most notably support for proto3
280 semantics in any .proto file that declares syntax="proto3".
281 Messages declared in proto3 files no longer represent field presence
282 for scalar fields (number, enums, booleans, or strings). You can
283 no longer call HasField() for such fields, and they are serialized
284 based on whether they have a non-zero/empty/false value.
285
286 One other notable change is in the C++-accelerated implementation.
287 Descriptor objects (which describe the protobuf schema and allow
288 reflection over it) are no longer duplicated between the Python
289 and C++ layers. The Python descriptors are now simple wrappers
290 around the C++ descriptors. This change should significantly
291 reduce the memory usage of programs that use a lot of message
292 types.
293
Jisi Liu32f5d012015-02-20 14:45:45 -0800294 Ruby:
Chris Fallin1d4f3212015-02-20 17:32:06 -0800295 We have added proto3 support for Ruby via a native C extension.
296
297 The Ruby extension itself is included in the ruby/ directory, and details on
298 building and installing the extension are in ruby/README.md. The extension
299 will also be published as a Ruby gem. Code generator support is included as
300 part of `protoc` with the `--ruby_out` flag.
301
302 The Ruby extension implements a user-friendly DSL to define message types
303 (also generated by the code generator from `.proto` files). Once a message
304 type is defined, the user may create instances of the message that behave in
305 ways idiomatic to Ruby. For example:
306
307 - Message fields are present as ordinary Ruby properties (getter method
308 `foo` and setter method `foo=`).
309 - Repeated field elements are stored in a container that acts like a native
310 Ruby array, and map elements are stored in a container that acts like a
311 native Ruby hashmap.
312 - The usual well-known methods, such as `#to_s`, `#dup`, and the like, are
313 present.
314
315 Unlike several existing third-party Ruby extensions for protobuf, this
316 extension is built on a "strongly-typed" philosophy: message fields and
317 array/map containers will throw exceptions eagerly when values of the
318 incorrect type are inserted.
319
320 See ruby/README.md for details.
Jisi Liu32f5d012015-02-20 14:45:45 -0800321
322 JavaNano:
323 JavaNano is a special code generator and runtime library designed especially
324 for resource-restricted systems, like Android. It is very resource-friendly
325 in both the amount of code and the runtime overhead. Here is an an overview
326 of JavaNano features compared with the official Java protobuf:
327
328 - No descriptors or message builders.
329 - All messages are mutable; fields are public Java fields.
330 - For optional fields only, encapsulation behind setter/getter/hazzer/
331 clearer functions is opt-in, which provide proper 'has' state support.
332 - For proto2, if not opted in, has state (field presence) is not available.
333 Serialization outputs all fields not equal to their defaults.
334 The behavior is consistent with proto3 semantics.
335 - Required fields (proto2 only) are always serialized.
336 - Enum constants are integers; protection against invalid values only
337 when parsing from the wire.
338 - Enum constants can be generated into container interfaces bearing
339 the enum's name (so the referencing code is in Java style).
340 - CodedInputByteBufferNano can only take byte[] (not InputStream).
341 - Similarly CodedOutputByteBufferNano can only write to byte[].
342 - Repeated fields are in arrays, not ArrayList or Vector. Null array
343 elements are allowed and silently ignored.
344 - Full support for serializing/deserializing repeated packed fields.
345 - Support extensions (in proto2).
346 - Unset messages/groups are null, not an immutable empty default
347 instance.
348 - toByteArray(...) and mergeFrom(...) are now static functions of
349 MessageNano.
350 - The 'bytes' type translates to the Java type byte[].
351
352 See javanano/README.txt for details.
353
Feng Xiao9104da32014-12-09 11:57:52 -08003542014-12-01 version 3.0.0-alpha-1 (C++/Java):
355
356 General
357 * Introduced Protocol Buffers language version 3 (aka proto3).
358
359 When protobuf was initially opensourced it implemented Protocol Buffers
360 language version 2 (aka proto2), which is why the version number
361 started from v2.0.0. From v3.0.0, a new language version (proto3) is
362 introduced while the old version (proto2) will continue to be supported.
363
364 The main intent of introducing proto3 is to clean up protobuf before
365 pushing the language as the foundation of Google's new API platform.
366 In proto3, the language is simplified, both for ease of use and to
367 make it available in a wider range of programming languages. At the
368 same time a few features are added to better support common idioms
369 found in APIs.
370
371 The following are the main new features in language version 3:
372
373 1. Removal of field presence logic for primitive value fields, removal
374 of required fields, and removal of default values. This makes proto3
375 significantly easier to implement with open struct representations,
376 as in languages like Android Java, Objective C, or Go.
377 2. Removal of unknown fields.
378 3. Removal of extensions, which are instead replaced by a new standard
379 type called Any.
380 4. Fix semantics for unknown enum values.
381 5. Addition of maps.
382 6. Addition of a small set of standard types for representation of time,
383 dynamic data, etc.
384 7. A well-defined encoding in JSON as an alternative to binary proto
385 encoding.
386
387 This release (v3.0.0-alpha-1) includes partial proto3 support for C++ and
388 Java. Items 6 (well-known types) and 7 (JSON format) in the above feature
Dongjoon Hyun7b08d492016-01-11 14:52:01 -0800389 list are not implemented.
Feng Xiao9104da32014-12-09 11:57:52 -0800390
391 A new notion "syntax" is introduced to specify whether a .proto file
392 uses proto2 or proto3:
393
394 // foo.proto
395 syntax = "proto3";
396 message Bar {...}
397
398 If omitted, the protocol compiler will generate a warning and "proto2" will
399 be used as the default. This warning will be turned into an error in a
400 future release.
401
402 We recommend that new Protocol Buffers users use proto3. However, we do not
403 generally recommend that existing users migrate from proto2 from proto3 due
404 to API incompatibility, and we will continue to support proto2 for a long
405 time.
406
407 * Added support for map fields (implemented in C++/Java for both proto2 and
408 proto3).
409
410 Map fields can be declared using the following syntax:
411
412 message Foo {
413 map<string, string> values = 1;
414 }
415
416 Data of a map field will be stored in memory as an unordered map and it
417 can be accessed through generated accessors.
418
419 C++
420 * Added arena allocation support (for both proto2 and proto3).
421
422 Profiling shows memory allocation and deallocation constitutes a significant
423 fraction of CPU-time spent in protobuf code and arena allocation is a
424 technique introduced to reduce this cost. With arena allocation, new
425 objects will be allocated from a large piece of preallocated memory and
426 deallocation of these objects is almost free. Early adoption shows 20% to
427 50% improvement in some Google binaries.
428
429 To enable arena support, add the following option to your .proto file:
430
431 option cc_enable_arenas = true;
432
433 Protocol compiler will generate additional code to make the generated
434 message classes work with arenas. This does not change the existing API
435 of protobuf messages and does not affect wire format. Your existing code
436 should continue to work after adding this option. In the future we will
437 make this option enabled by default.
438
439 To actually take advantage of arena allocation, you need to use the arena
440 APIs when creating messages. A quick example of using the arena API:
441
442 {
443 google::protobuf::Arena arena;
444 // Allocate a protobuf message in the arena.
445 MyMessage* message = Arena::CreateMessage<MyMessage>(&arena);
446 // All submessages will be allocated in the same arena.
447 if (!message->ParseFromString(data)) {
448 // Deal with malformed input data.
449 }
450 // Must not delete the message here. It will be deleted automatically
451 // when the arena is destroyed.
452 }
453
454 Currently arena does not work with map fields. Enabling arena in a .proto
455 file containing map fields will result in compile errors in the generated
456 code. This will be addressed in a future release.
457
Feng Xiaobba83652014-10-20 17:06:06 -07004582014-10-20 version 2.6.1:
Feng Xiao57b86722014-10-09 11:20:08 -0700459
460 C++
461 * Added atomicops support for Solaris.
462 * Released memory allocated by InitializeDefaultRepeatedFields() and
463 GetEmptyString(). Some memory sanitizers reported them as memory leaks.
464
465 Java
466 * Updated DynamicMessage.setField() to handle repeated enum values
467 correctly.
468 * Fixed a bug that caused NullPointerException to be thrown when
469 converting manually constructed FileDescriptorProto to
470 FileDescriptor.
471
472 Python
Feng Xiao419c94b2014-10-09 11:40:02 -0700473 * Fixed WhichOneof() to work with de-serialized protobuf messages.
Feng Xiao57b86722014-10-09 11:20:08 -0700474 * Fixed a missing file problem of Python C++ implementation.
475
jieluo@google.com1eba9d92014-08-25 20:17:53 +00004762014-08-15 version 2.6.0:
477
478 General
479 * Added oneofs(unions) feature. Fields in the same oneof will share
480 memory and at most one field can be set at the same time. Use the
481 oneof keyword to define a oneof like:
482 message SampleMessage {
483 oneof test_oneof {
484 string name = 4;
485 YourMessage sub_message = 9;
486 }
487 }
488 * Files, services, enums, messages, methods and enum values can be marked
489 as deprecated now.
Dongjoon Hyun7b08d492016-01-11 14:52:01 -0800490 * Added Support for list values, including lists of messages, when
jieluo@google.com1eba9d92014-08-25 20:17:53 +0000491 parsing text-formatted protos in C++ and Java.
492 For example: foo: [1, 2, 3]
493
494 C++
495 * Enhanced customization on TestFormat printing.
496 * Added SwapFields() in reflection API to swap a subset of fields.
497 Added SetAllocatedMessage() in reflection API.
498 * Repeated primitive extensions are now packable. The
499 [packed=true] option only affects serializers. Therefore, it is
500 possible to switch a repeated extension field to packed format
501 without breaking backwards-compatibility.
502 * Various speed optimizations.
503
504 Java
505 * writeTo() method in ByteString can now write a substring to an
506 output stream. Added endWith() method for ByteString.
507 * ByteString and ByteBuffer are now supported in CodedInputStream
508 and CodedOutputStream.
509 * java_generate_equals_and_hash can now be used with the LITE_RUNTIME.
510
511 Python
512 * A new C++-backed extension module (aka "cpp api v2") that replaces the
513 old ("cpp api v1") one. Much faster than the pure Python code. This one
514 resolves many bugs and is recommended for general use over the
515 pure Python when possible.
516 * Descriptors now have enum_types_by_name and extension_types_by_name dict
517 attributes.
518 * Support for Python 3.
519
xiaofeng@google.com2c9392f2013-02-28 06:12:28 +00005202013-02-27 version 2.5.0:
xiaofeng@google.comb55a20f2012-09-22 02:40:50 +0000521
522 General
523 * New notion "import public" that allows a proto file to forward the content
524 it imports to its importers. For example,
525 // foo.proto
526 import public "bar.proto";
527 import "baz.proto";
528
529 // qux.proto
530 import "foo.proto";
531 // Stuff defined in bar.proto may be used in this file, but stuff from
532 // baz.proto may NOT be used without importing it explicitly.
533 This is useful for moving proto files. To move a proto file, just leave
534 a single "import public" in the old proto file.
535 * New enum option "allow_alias" that specifies whether different symbols can
536 be assigned the same numeric value. Default value is "true". Setting it to
537 false causes the compiler to reject enum definitions where multiple symbols
538 have the same numeric value.
xiaofeng@google.com7f4c9e82013-03-05 01:51:21 +0000539 Note: We plan to flip the default value to "false" in a future release.
540 Projects using enum aliases should set the option to "true" in their .proto
541 files.
xiaofeng@google.comb55a20f2012-09-22 02:40:50 +0000542
543 C++
544 * New generated method set_allocated_foo(Type* foo) for message and string
545 fields. This method allows you to set the field to a pre-allocated object
546 and the containing message takes the ownership of that object.
547 * Added SetAllocatedExtension() and ReleaseExtension() to extensions API.
548 * Custom options are now formatted correctly when descriptors are printed in
549 text format.
550 * Various speed optimizations.
551
552 Java
553 * Comments in proto files are now collected and put into generated code as
554 comments for corresponding classes and data members.
555 * Added Parser to parse directly into messages without a Builder. For
556 example,
xiaofeng@google.com2c9392f2013-02-28 06:12:28 +0000557 Foo foo = Foo.PARSER.ParseFrom(input);
xiaofeng@google.comb55a20f2012-09-22 02:40:50 +0000558 Using Parser is ~25% faster than using Builder to parse messages.
559 * Added getters/setters to access the underlying ByteString of a string field
560 directly.
561 * ByteString now supports more operations: substring(), prepend(), and
562 append(). The implementation of ByteString uses a binary tree structure
563 to support these operations efficiently.
564 * New method findInitializationErrors() that lists all missing required
565 fields.
566 * Various code size and speed optimizations.
567
568 Python
569 * Added support for dynamic message creation. DescriptorDatabase,
Dongjoon Hyun7b08d492016-01-11 14:52:01 -0800570 DescriptorPool, and MessageFactory work like their C++ counterparts to
xiaofeng@google.comb55a20f2012-09-22 02:40:50 +0000571 simplify Descriptor construction from *DescriptorProtos, and MessageFactory
572 provides a message instance from a Descriptor.
573 * Added pickle support for protobuf messages.
574 * Unknown fields are now preserved after parsing.
575 * Fixed bug where custom options were not correctly populated. Custom
576 options can be accessed now.
577 * Added EnumTypeWrapper that provides better accessibility to enum types.
578 * Added ParseMessage(descriptor, bytes) to generate a new Message instance
579 from a descriptor and a byte string.
580
liujisi@google.com5d996322011-04-30 15:29:09 +00005812011-05-01 version 2.4.1:
582
583 C++
Dongjoon Hyun7b08d492016-01-11 14:52:01 -0800584 * Fixed the friendship problem for old compilers to make the library now gcc 3
liujisi@google.com5d996322011-04-30 15:29:09 +0000585 compatible again.
586 * Fixed vcprojects/extract_includes.bat to extract compiler/plugin.h.
587
588 Java
589 * Removed usages of JDK 1.6 only features to make the library now JDK 1.5
590 compatible again.
591 * Fixed a bug about negative enum values.
592 * serialVersionUID is now defined in generated messages for java serializing.
593 * Fixed protoc to use java.lang.Object, which makes "Object" now a valid
594 message name again.
595
596 Python
597 * Experimental C++ implementation now requires C++ protobuf library installed.
598 See the README.txt in the python directory for details.
599
liujisi@google.com7a261472011-02-02 14:04:22 +00006002011-02-02 version 2.4.0:
liujisi@google.com33165fe2010-11-02 13:14:58 +0000601
602 General
603 * The RPC (cc|java|py)_generic_services default value is now false instead of
604 true.
605 * Custom options can have aggregate types. For example,
606 message MyOption {
607 optional string comment = 1;
608 optional string author = 2;
609 }
610 extend google.protobuf.FieldOptions {
611 optional MyOption myoption = 12345;
612 }
613 This option can now be set as follows:
614 message SomeType {
615 optional int32 field = 1 [(myoption) = { comment:'x' author:'y' }];
616 }
617
618 C++
619 * Various speed and code size optimizations.
620 * Added a release_foo() method on string and message fields.
621 * Fixed gzip_output_stream sub-stream handling.
622
623 Java
624 * Builders now maintain sub-builders for sub-messages. Use getFooBuilder() to
625 get the builder for the sub-message "foo". This allows you to repeatedly
626 modify deeply-nested sub-messages without rebuilding them.
627 * Builder.build() no longer invalidates the Builder for generated messages
628 (You may continue to modify it and then build another message).
629 * Code generator will generate efficient equals() and hashCode()
630 implementations if new option java_generate_equals_and_hash is enabled.
631 (Otherwise, reflection-based implementations are used.)
632 * Generated messages now implement Serializable.
633 * Fields with [deprecated=true] will be marked with @Deprecated in Java.
634 * Added lazy conversion of UTF-8 encoded strings to String objects to improve
635 performance.
636 * Various optimizations.
637 * Enum value can be accessed directly, instead of calling getNumber() on the
638 enum member.
639 * For each enum value, an integer constant is also generated with the suffix
640 _VALUE.
641
642 Python
643 * Added an experimental C++ implementation for Python messages via a Python
644 extension. Implementation type is controlled by an environment variable
645 PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION (valid values: "cpp" and "python")
646 The default value is currently "python" but will be changed to "cpp" in
647 future release.
648 * Improved performance on message instantiation significantly.
649 Most of the work on message instantiation is done just once per message
650 class, instead of once per message instance.
651 * Improved performance on text message parsing.
652 * Allow add() to forward keyword arguments to the concrete class.
653 E.g. instead of
654 item = repeated_field.add()
655 item.foo = bar
656 item.baz = quux
657 You can do:
658 repeated_field.add(foo=bar, baz=quux)
659 * Added a sort() interface to the BaseContainer.
660 * Added an extend() method to repeated composite fields.
661 * Added UTF8 debug string support.
662
temporald4e38c72010-01-09 07:35:50 +00006632010-01-08 version 2.3.0:
kenton@google.comfccb1462009-12-18 02:11:36 +0000664
665 General
666 * Parsers for repeated numeric fields now always accept both packed and
667 unpacked input. The [packed=true] option only affects serializers.
668 Therefore, it is possible to switch a field to packed format without
669 breaking backwards-compatibility -- as long as all parties are using
670 protobuf 2.3.0 or above, at least.
671 * The generic RPC service code generated by the C++, Java, and Python
672 generators can be disabled via file options:
673 option cc_generic_services = false;
674 option java_generic_services = false;
675 option py_generic_services = false;
676 This allows plugins to generate alternative code, possibly specific to some
677 particular RPC implementation.
678
679 protoc
680 * Now supports a plugin system for code generators. Plugins can generate
681 code for new languages or inject additional code into the output of other
682 code generators. Plugins are just binaries which accept a protocol buffer
683 on stdin and write a protocol buffer to stdout, so they may be written in
684 any language. See src/google/protobuf/compiler/plugin.proto.
kenton@google.com7f4938b2009-12-22 22:57:39 +0000685 **WARNING**: Plugins are experimental. The interface may change in a
686 future version.
kenton@google.com0225b352010-01-04 22:07:09 +0000687 * If the output location ends in .zip or .jar, protoc will write its output
688 to a zip/jar archive instead of a directory. For example:
689 protoc --java_out=myproto_srcs.jar --python_out=myproto.zip myproto.proto
690 Currently the archive contents are not compressed, though this could change
691 in the future.
kenton@google.comfccb1462009-12-18 02:11:36 +0000692 * inf, -inf, and nan can now be used as default values for float and double
693 fields.
694
695 C++
696 * Various speed and code size optimizations.
697 * DynamicMessageFactory is now fully thread-safe.
698 * Message::Utf8DebugString() method is like DebugString() but avoids escaping
699 UTF-8 bytes.
700 * Compiled-in message types can now contain dynamic extensions, through use
701 of CodedInputStream::SetExtensionRegistry().
kenton@google.comc0ee4d22009-12-22 02:05:33 +0000702 * Now compiles shared libraries (DLLs) by default on Cygwin and MinGW, to
703 match other platforms. Use --disable-shared to avoid this.
kenton@google.comfccb1462009-12-18 02:11:36 +0000704
705 Java
706 * parseDelimitedFrom() and mergeDelimitedFrom() now detect EOF and return
707 false/null instead of throwing an exception.
708 * Fixed some initialization ordering bugs.
709 * Fixes for OpenJDK 7.
710
711 Python
712 * 10-25 times faster than 2.2.0, still pure-Python.
713 * Calling a mutating method on a sub-message always instantiates the message
714 in its parent even if the mutating method doesn't actually mutate anything
715 (e.g. parsing from an empty string).
716 * Expanded descriptors a bit.
717
kenton@google.com201b9be2009-08-12 00:23:05 +00007182009-08-11 version 2.2.0:
kenton@google.comceb561d2009-06-25 19:05:36 +0000719
720 C++
kenton@google.com80b1d622009-07-29 01:13:20 +0000721 * Lite mode: The "optimize_for = LITE_RUNTIME" option causes the compiler
722 to generate code which only depends libprotobuf-lite, which is much smaller
723 than libprotobuf but lacks descriptors, reflection, and some other features.
kenton@google.comceb561d2009-06-25 19:05:36 +0000724 * Fixed bug where Message.Swap(Message) was only implemented for
725 optimize_for_speed. Swap now properly implemented in both modes
726 (Issue 91).
727 * Added RemoveLast and SwapElements(index1, index2) to Reflection
728 interface for repeated elements.
729 * Added Swap(Message) to Reflection interface.
kenton@google.comd2fd0632009-07-24 01:00:35 +0000730 * Floating-point literals in generated code that are intended to be
731 single-precision now explicitly have 'f' suffix to avoid pedantic warnings
732 produced by some compilers.
kenton@google.com80b1d622009-07-29 01:13:20 +0000733 * The [deprecated=true] option now causes the C++ code generator to generate
734 a GCC-style deprecation annotation (no-op on other compilers).
735 * google::protobuf::GetEnumDescriptor<SomeGeneratedEnumType>() returns the
736 EnumDescriptor for that type -- useful for templates which cannot call
737 SomeGeneratedEnumType_descriptor().
738 * Various optimizations and obscure bug fixes.
739
740 Java
741 * Lite mode: The "optimize_for = LITE_RUNTIME" option causes the compiler
742 to generate code which only depends libprotobuf-lite, which is much smaller
743 than libprotobuf but lacks descriptors, reflection, and some other features.
kenton@google.com80b1d622009-07-29 01:13:20 +0000744 * Lots of style cleanups.
745
746 Python
747 * Fixed endianness bug with floats and doubles.
748 * Text format parsing support.
749 * Fix bug with parsing packed repeated fields in embedded messages.
750 * Ability to initialize fields by passing keyword args to constructor.
751 * Support iterators in extend and __setslice__ for containers.
kenton@google.comceb561d2009-06-25 19:05:36 +0000752
kenton@google.com1fb3d392009-05-13 23:20:03 +00007532009-05-13 version 2.1.0:
kenton@google.com2d6daa72009-01-22 01:27:00 +0000754
755 General
756 * Repeated fields of primitive types (types other that string, group, and
757 nested messages) may now use the option [packed = true] to get a more
758 efficient encoding. In the new encoding, the entire list is written
759 as a single byte blob using the "length-delimited" wire type. Within
760 this blob, the individual values are encoded the same way they would
761 be normally except without a tag before each value (thus, they are
762 tightly "packed").
kenton@google.comcfa2d8a2009-04-18 00:02:12 +0000763 * For each field, the generated code contains an integer constant assigned
764 to the field number. For example, the .proto file:
765 message Foo { optional int bar_baz = 123; }
766 would generate the following constants, all with the integer value 123:
767 C++: Foo::kBarBazFieldNumber
768 Java: Foo.BAR_BAZ_FIELD_NUMBER
769 Python: Foo.BAR_BAZ_FIELD_NUMBER
770 Constants are also generated for extensions, with the same naming scheme.
771 These constants may be used as switch cases.
kenton@google.com37ad00d2009-04-21 21:00:39 +0000772 * Updated bundled Google Test to version 1.3.0. Google Test is now bundled
773 in its verbatim form as a nested autoconf package, so you can drop in any
774 other version of Google Test if needed.
kenton@google.comd37d46d2009-04-25 02:53:47 +0000775 * optimize_for = SPEED is now the default, by popular demand. Use
776 optimize_for = CODE_SIZE if code size is more important in your app.
777 * It is now an error to define a default value for a repeated field.
778 Previously, this was silently ignored (it had no effect on the generated
779 code).
780 * Fields can now be marked deprecated like:
781 optional int32 foo = 1 [deprecated = true];
782 Currently this does not have any actual effect, but in the future the code
783 generators may generate deprecation annotations in each language.
kenton@google.com9824eda2009-05-06 17:49:37 +0000784 * Cross-compiling should now be possible using the --with-protoc option to
785 configure. See README.txt for more info.
kenton@google.com2d6daa72009-01-22 01:27:00 +0000786
kenton@google.comf663b162009-04-15 19:50:54 +0000787 protoc
788 * --error_format=msvs option causes errors to be printed in Visual Studio
789 format, which should allow them to be clicked on in the build log to go
kenton@google.comd37d46d2009-04-25 02:53:47 +0000790 directly to the error location.
791 * The type name resolver will no longer resolve type names to fields. For
792 example, this now works:
793 message Foo {}
794 message Bar {
795 optional int32 Foo = 1;
796 optional Foo baz = 2;
797 }
798 Previously, the type of "baz" would resolve to "Bar.Foo", and you'd get
799 an error because Bar.Foo is a field, not a type. Now the type of "baz"
800 resolves to the message type Foo. This change is unlikely to make a
801 difference to anyone who follows the Protocol Buffers style guide.
kenton@google.comf663b162009-04-15 19:50:54 +0000802
kenton@google.com2d6daa72009-01-22 01:27:00 +0000803 C++
kenton@google.comd37d46d2009-04-25 02:53:47 +0000804 * Several optimizations, including but not limited to:
805 - Serialization, especially to flat arrays, is 10%-50% faster, possibly
806 more for small objects.
807 - Several descriptor operations which previously required locking no longer
808 do.
809 - Descriptors are now constructed lazily on first use, rather than at
810 process startup time. This should save memory in programs which do not
811 use descriptors or reflection.
812 - UnknownFieldSet completely redesigned to be more efficient (especially in
813 terms of memory usage).
814 - Various optimizations to reduce code size (though the serialization speed
815 optimizations increased code size).
kenton@google.com2d6daa72009-01-22 01:27:00 +0000816 * Message interface has method ParseFromBoundedZeroCopyStream() which parses
817 a limited number of bytes from an input stream rather than parsing until
818 EOF.
kenton@google.come59427a2009-04-16 22:30:56 +0000819 * GzipInputStream and GzipOutputStream support reading/writing gzip- or
820 zlib-compressed streams if zlib is available.
821 (google/protobuf/io/gzip_stream.h)
kenton@google.comd37d46d2009-04-25 02:53:47 +0000822 * DescriptorPool::FindAllExtensions() and corresponding
823 DescriptorDatabase::FindAllExtensions() can be used to enumerate all
824 extensions of a given type.
825 * For each enum type Foo, protoc will generate functions:
826 const string& Foo_Name(Foo value);
827 bool Foo_Parse(const string& name, Foo* result);
828 The former returns the name of the enum constant corresponding to the given
829 value while the latter finds the value corresponding to a name.
830 * RepeatedField and RepeatedPtrField now have back-insertion iterators.
831 * String fields now have setters that take a char* and a size, in addition
832 to the existing ones that took char* or const string&.
833 * DescriptorPool::AllowUnknownDependencies() may be used to tell
834 DescriptorPool to create placeholder descriptors for unknown entities
835 referenced in a FileDescriptorProto. This can allow you to parse a .proto
836 file without having access to other .proto files that it imports, for
837 example.
838 * Updated gtest to latest version. The gtest package is now included as a
839 nested autoconf package, so it should be able to drop new versions into the
840 "gtest" subdirectory without modification.
kenton@google.com2d6daa72009-01-22 01:27:00 +0000841
842 Java
843 * Fixed bug where Message.mergeFrom(Message) failed to merge extensions.
844 * Message interface has new method toBuilder() which is equivalent to
845 newBuilderForType().mergeFrom(this).
846 * All enums now implement the ProtocolMessageEnum interface.
847 * Setting a field to null now throws NullPointerException.
848 * Fixed tendency for TextFormat's parsing to overflow the stack when
849 parsing large string values. The underlying problem is with Java's
850 regex implementation (which unfortunately uses recursive backtracking
Dongjoon Hyun7b08d492016-01-11 14:52:01 -0800851 rather than building an NFA). Worked around by making use of possessive
kenton@google.com2d6daa72009-01-22 01:27:00 +0000852 quantifiers.
kenton@google.comd37d46d2009-04-25 02:53:47 +0000853 * Generated service classes now also generate pure interfaces. For a service
854 Foo, Foo.Interface is a pure interface containing all of the service's
855 defined methods. Foo.newReflectiveService() can be called to wrap an
856 instance of this interface in a class that implements the generic
857 RpcService interface, which provides reflection support that is usually
858 needed by RPC server implementations.
859 * RPC interfaces now support blocking operation in addition to non-blocking.
860 The protocol compiler generates separate blocking and non-blocking stubs
861 which operate against separate blocking and non-blocking RPC interfaces.
862 RPC implementations will have to implement the new interfaces in order to
863 support blocking mode.
864 * New I/O methods parseDelimitedFrom(), mergeDelimitedFrom(), and
Dongjoon Hyun7b08d492016-01-11 14:52:01 -0800865 writeDelimitedTo() read and write "delimited" messages from/to a stream,
kenton@google.comd37d46d2009-04-25 02:53:47 +0000866 meaning that the message size precedes the data. This way, you can write
867 multiple messages to a stream without having to worry about delimiting
868 them yourself.
869 * Throw a more descriptive exception when build() is double-called.
870 * Add a method to query whether CodedInputStream is at the end of the input
871 stream.
872 * Add a method to reset a CodedInputStream's size counter; useful when
873 reading many messages with the same stream.
874 * equals() and hashCode() now account for unknown fields.
pesho.petrov87e64e12008-12-24 01:07:22 +0000875
876 Python
877 * Added slicing support for repeated scalar fields. Added slice retrieval and
878 removal of repeated composite fields.
kenton@google.com2d6daa72009-01-22 01:27:00 +0000879 * Updated RPC interfaces to allow for blocking operation. A client may
880 now pass None for a callback when making an RPC, in which case the
881 call will block until the response is received, and the response
882 object will be returned directly to the caller. This interface change
883 cannot be used in practice until RPC implementations are updated to
884 implement it.
kenton@google.comd37d46d2009-04-25 02:53:47 +0000885 * Changes to input_stream.py should make protobuf compatible with appengine.
pesho.petrov87e64e12008-12-24 01:07:22 +0000886
kenton@google.com9f175282008-11-25 19:37:10 +00008872008-11-25 version 2.0.3:
888
889 protoc
890 * Enum values may now have custom options, using syntax similar to field
891 options.
892 * Fixed bug where .proto files which use custom options but don't actually
893 define them (i.e. they import another .proto file defining the options)
894 had to explicitly import descriptor.proto.
895 * Adjacent string literals in .proto files will now be concatenated, like in
896 C.
kenton@google.com2f669cb2008-12-02 05:59:15 +0000897 * If an input file is a Windows absolute path (e.g. "C:\foo\bar.proto") and
898 the import path only contains "." (or contains "." but does not contain
899 the file), protoc incorrectly thought that the file was under ".", because
900 it thought that the path was relative (since it didn't start with a slash).
901 This has been fixed.
kenton@google.com9f175282008-11-25 19:37:10 +0000902
903 C++
904 * Generated message classes now have a Swap() method which efficiently swaps
905 the contents of two objects.
906 * All message classes now have a SpaceUsed() method which returns an estimate
907 of the number of bytes of allocated memory currently owned by the object.
908 This is particularly useful when you are reusing a single message object
909 to improve performance but want to make sure it doesn't bloat up too large.
910 * New method Message::SerializeAsString() returns a string containing the
911 serialized data. May be more convenient than calling
912 SerializeToString(string*).
913 * In debug mode, log error messages when string-type fields are found to
914 contain bytes that are not valid UTF-8.
915 * Fixed bug where a message with multiple extension ranges couldn't parse
916 extensions.
917 * Fixed bug where MergeFrom(const Message&) didn't do anything if invoked on
918 a message that contained no fields (but possibly contained extensions).
919 * Fixed ShortDebugString() to not be O(n^2). Durr.
920 * Fixed crash in TextFormat parsing if the first token in the input caused a
921 tokenization error.
922 * Fixed obscure bugs in zero_copy_stream_impl.cc.
923 * Added support for HP C++ on Tru64.
924 * Only build tests on "make check", not "make".
925 * Fixed alignment issue that caused crashes when using DynamicMessage on
926 64-bit Sparc machines.
927 * Simplify template usage to work with MSVC 2003.
928 * Work around GCC 4.3.x x86_64 compiler bug that caused crashes on startup.
929 (This affected Fedora 9 in particular.)
kenton@google.com25bc5cd2008-12-04 20:34:50 +0000930 * Now works on "Solaris 10 using recent Sun Studio".
kenton@google.com9f175282008-11-25 19:37:10 +0000931
932 Java
933 * New overload of mergeFrom() which parses a slice of a byte array instead
934 of the whole thing.
935 * New method ByteString.asReadOnlyByteBuffer() does what it sounds like.
936 * Improved performance of isInitialized() when optimizing for code size.
937
938 Python
939 * Corrected ListFields() signature in Message base class to match what
940 subclasses actually implement.
941 * Some minor refactoring.
kenton@google.com2f669cb2008-12-02 05:59:15 +0000942 * Don't pass self as first argument to superclass constructor (no longer
943 allowed in Python 2.6).
kenton@google.com9f175282008-11-25 19:37:10 +0000944
kenton@google.com9b10f582008-09-30 00:09:40 +00009452008-09-29 version 2.0.2:
946
kenton@google.com24bf56f2008-09-24 20:31:01 +0000947 General
948 * License changed from Apache 2.0 to New BSD.
949 * It is now possible to define custom "options", which are basically
950 annotations which may be placed on definitions in a .proto file.
951 For example, you might define a field option called "foo" like so:
952 import "google/protobuf/descriptor.proto"
953 extend google.protobuf.FieldOptions {
954 optional string foo = 12345;
955 }
956 Then you annotate a field using the "foo" option:
957 message MyMessage {
958 optional int32 some_field = 1 [(foo) = "bar"]
959 }
960 The value of this option is then visible via the message's
961 Descriptor:
962 const FieldDescriptor* field =
963 MyMessage::descriptor()->FindFieldByName("some_field");
964 assert(field->options().GetExtension(foo) == "bar");
965 This feature has been implemented and tested in C++ and Java.
966 Other languages may or may not need to do extra work to support
967 custom options, depending on how they construct descriptors.
968
969 C++
970 * Fixed some GCC warnings that only occur when using -pedantic.
971 * Improved static initialization code, making ordering more
972 predictable among other things.
973 * TextFormat will no longer accept messages which contain multiple
974 instances of a singular field. Previously, the latter instance
kenton@google.com9b10f582008-09-30 00:09:40 +0000975 would overwrite the former.
kenton@google.com24bf56f2008-09-24 20:31:01 +0000976 * Now works on systems that don't have hash_map.
977
kenton@google.com9b10f582008-09-30 00:09:40 +0000978 Java
979 * Print @Override annotation in generated code where appropriate.
980
kenton@google.com24bf56f2008-09-24 20:31:01 +0000981 Python
982 * Strings now use the "unicode" type rather than the "str" type.
983 String fields may still be assigned ASCII "str" values; they will
984 automatically be converted.
985 * Adding a property to an object representing a repeated field now
986 raises an exception. For example:
987 # No longer works (and never should have).
988 message.some_repeated_field.foo = 1
kenton@google.com9b10f582008-09-30 00:09:40 +0000989
990 Windows
991 * We now build static libraries rather than DLLs by default on MSVC.
992 See vsprojects/readme.txt for more information.
993
temporala44f3c32008-08-15 18:32:02 +00009942008-08-15 version 2.0.1:
kenton@google.com9b10f582008-09-30 00:09:40 +0000995
996 protoc
997 * New flags --encode and --decode can be used to convert between protobuf text
998 format and binary format from the command-line.
999 * New flag --descriptor_set_out can be used to write FileDescriptorProtos for
1000 all parsed files directly into a single output file. This is particularly
1001 useful if you wish to parse .proto files from programs written in languages
1002 other than C++: just run protoc as a background process and have it output
1003 a FileDescriptorList, then parse that natively.
1004 * Improved error message when an enum value's name conflicts with another
1005 symbol defined in the enum type's scope, e.g. if two enum types declared
1006 in the same scope have values with the same name. This is disallowed for
temporala44f3c32008-08-15 18:32:02 +00001007 compatibility with C++, but this wasn't clear from the error.
kenton@google.com9b10f582008-09-30 00:09:40 +00001008 * Fixed absolute output paths on Windows.
temporala44f3c32008-08-15 18:32:02 +00001009 * Allow trailing slashes in --proto_path mappings.
kenton@google.com9b10f582008-09-30 00:09:40 +00001010
1011 C++
1012 * Reflection objects are now per-class rather than per-instance. To make this
1013 possible, the Reflection interface had to be changed such that all methods
1014 take the Message instance as a parameter. This change improves performance
1015 significantly in memory-bandwidth-limited use cases, since it makes the
1016 message objects smaller. Note that source-incompatible interface changes
1017 like this will not be made again after the library leaves beta.
temporala44f3c32008-08-15 18:32:02 +00001018 * Heuristically detect sub-messages when printing unknown fields.
kenton@google.com9b10f582008-09-30 00:09:40 +00001019 * Fix static initialization ordering bug that caused crashes at startup when
temporala44f3c32008-08-15 18:32:02 +00001020 compiling on Mac with static linking.
kenton@google.com9b10f582008-09-30 00:09:40 +00001021 * Fixed TokenizerTest when compiling with -DNDEBUG on Linux.
1022 * Fixed incorrect definition of kint32min.
temporala44f3c32008-08-15 18:32:02 +00001023 * Fix bytes type setter to work with byte sequences with embedded NULLs.
1024 * Other irrelevant tweaks.
1025
kenton@google.com9b10f582008-09-30 00:09:40 +00001026 Java
1027 * Fixed UnknownFieldSet's parsing of varints larger than 32 bits.
1028 * Fixed TextFormat's parsing of "inf" and "nan".
1029 * Fixed TextFormat's parsing of comments.
1030 * Added info to Java POM that will be required when we upload the
temporala44f3c32008-08-15 18:32:02 +00001031 package to a Maven repo.
1032
kenton@google.com9b10f582008-09-30 00:09:40 +00001033 Python
1034 * MergeFrom(message) and CopyFrom(message) are now implemented.
1035 * SerializeToString() raises an exception if the message is missing required
1036 fields.
1037 * Code organization improvements.
1038 * Fixed doc comments for RpcController and RpcChannel, which had somehow been
temporala44f3c32008-08-15 18:32:02 +00001039 swapped.
kenton@google.com9b10f582008-09-30 00:09:40 +00001040 * Fixed text_format_test on Windows where floating-point exponents sometimes
1041 contain extra zeros.
temporala44f3c32008-08-15 18:32:02 +00001042 * Fix Python service CallMethod() implementation.
1043
1044 Other
1045 * Improved readmes.
1046 * VIM syntax highlighting improvements.
1047
temporal40ee5512008-07-10 02:12:20 +000010482008-07-07 version 2.0.0:
1049
1050 * First public release.