summaryrefslogtreecommitdiff
path: root/CHANGES.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CHANGES.txt')
-rw-r--r--CHANGES.txt1182
1 files changed, 0 insertions, 1182 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
deleted file mode 100644
index 3459cccf..00000000
--- a/CHANGES.txt
+++ /dev/null
@@ -1,1182 +0,0 @@
-2016-05-16 version 3.0.0-beta-3 (C++/Java/Python/Ruby/Nano/Objective-C/C#/JavaScript)
- General
- * Supported Proto3 lite-runtime in C++/Java for mobile platforms.
- * Any type now supports APIs to specify prefixes other than
- type.googleapis.com
- * Removed javanano_use_deprecated_package option; Nano will always has its own
- ".nano" package.
-
- C++ (Beta)
- * Improved hash maps.
- - Improved hash maps comments. In particular, please note that equal hash
- maps will not necessarily have the same iteration order and
- serialization.
- - Added a new hash maps implementation that will become the default in a
- later release.
- * Arenas
- - Several inlined methods in Arena were moved to out-of-line to improve
- build performance and code size.
- - Added SpaceAllocatedAndUsed() to report both space used and allocated
- - Added convenient class UnsafeArenaAllocatedRepeatedPtrFieldBackInserter
- * Any
- - Allow custom type URL prefixes in Any packing.
- - TextFormat now expand the Any type rather than printing bytes.
- * Performance optimizations and various bug fixes.
-
- Java (Beta)
- * Introduced an ExperimentalApi annotation. Annotated APIs are experimental
- and are subject to change in a backward incompatible way in future releases.
- * Introduced zero-copy serialization as an ExperimentalApi
- - Introduction of the `ByteOutput` interface. This is similar to
- `OutputStream` but provides semantics for lazy writing (i.e. no
- immediate copy required) of fields that are considered to be immutable.
- - `ByteString` now supports writing to a `ByteOutput`, which will directly
- expose the internals of the `ByteString` (i.e. `byte[]` or `ByteBuffer`)
- to the `ByteOutput` without copying.
- - `CodedOutputStream` now supports writing to a `ByteOutput`. `ByteString`
- instances that are too large to fit in the internal buffer will be
- (lazily) written to the `ByteOutput` directly.
- - This allows applications using large `ByteString` fields to avoid
- duplication of these fields entirely. Such an application can supply a
- `ByteOutput` that chains together the chunks received from
- `CodedOutputStream` before forwarding them onto the IO system.
- * Other related changes to `CodedOutputStream`
- - Additional use of `sun.misc.Unsafe` where possible to perform fast
- access to `byte[]` and `ByteBuffer` values and avoiding unnecessary
- range checking.
- - `ByteBuffer`-backed `CodedOutputStream` now writes directly to the
- `ByteBuffer` rather than to an intermediate array.
- * Improved lite-runtime.
- - Lite protos now implement deep equals/hashCode/toString
- - Significantly improved the performance of Builder#mergeFrom() and
- Builder#mergeDelimitedFrom()
- * Various bug fixes and small feature enhancement.
- - Fixed stack overflow when in hashCode() for infinite recursive oneofs.
- - Fixed the lazy field parsing in lite to merge rather than overwrite.
- - TextFormat now supports reporting line/column numbers on errors.
- - Updated to add appropriate @Override for better compiler errors.
-
- Python (Beta)
- * Added JSON format for Any, Struct, Value and ListValue
- * [ ] is now accepted for both repeated scalar fields and repeated message
- fields in text format parser.
- * Numerical field name is now supported in text format.
- * Added DiscardUnknownFields API for python protobuf message.
-
- Objective-C (Beta)
- * Proto comments now come over as HeaderDoc comments in the generated sources
- so Xcode can pick them up and display them.
- * The library headers have been updated to use HeaderDoc comments so Xcode can
- pick them up and display them.
- * The per message and per field overhead in both generated code and runtime
- object sizes was reduced.
- * Generated code now include deprecated annotations when the proto file
- included them.
-
- C# (Beta)
- In general: some changes are breaking, which require regenerating messages.
- Most user-written code will not be impacted *except* for the renaming of enum
- values.
-
- * Allow custom type URL prefixes in `Any` packing, and ignore them when
- unpacking
- * `protoc` is now in a separate NuGet package (Google.Protobuf.Tools)
- * New option: `internal_access` to generate internal classes
- * Enum values are now PascalCased, and if there's a prefix which matches the
- name of the enum, that is removed (so an enum `COLOR` with a value
- `COLOR_BLUE` would generate a value of just `Blue`). An option
- (`legacy_enum_values`) is temporarily available to disable this, but the
- option will be removed for GA.
- * `json_name` option is now honored
- * If group tags are encountered when parsing, they are validated more
- thoroughly (although we don't support actual groups)
- * NuGet dependencies are better specified
- * Breaking: `Preconditions` is renamed to `ProtoPreconditions`
- * Breaking: `GeneratedCodeInfo` is renamed to `GeneratedClrTypeInfo`
- * `JsonFormatter` now allows writing to a `TextWriter`
- * New interface, `ICustomDiagnosticMessage` to allow more compact
- representations from `ToString`
- * `CodedInputStream` and `CodedOutputStream` now implement `IDisposable`,
- which simply disposes of the streams they were constructed with
- * Map fields no longer support null values (in line with other languages)
- * Improvements in JSON formatting and parsing
-
- Javascript (Alpha)
- * Better support for "bytes" fields: bytes fields can be read as either a
- base64 string or UInt8Array (in environments where TypedArray is supported).
- * New support for CommonJS imports. This should make it easier to use the
- JavaScript support in Node.js and tools like WebPack. See js/README.md for
- more information.
- * Some significant internal refactoring to simplify and modularize the code.
-
- Ruby (Alpha)
- * JSON serialization now properly uses camelCased names, with a runtime option
- that will preserve original names from .proto files instead.
- * Well-known types are now included in the distribution.
- * Release now includes binary gems for Windows, Mac, and Linux instead of just
- source gems.
- * Bugfix for serializing oneofs.
-
- C++/Java Lite (Alpha)
- A new "lite" generator parameter was introduced in the protoc for C++ and
- Java for Proto3 syntax messages. Example usage:
-
- ./protoc --cpp_out=lite:$OUTPUT_PATH foo.proto
-
- The protoc will treat the current input and all the transitive dependencies
- as LITE. The same generator parameter must be used to generate the
- dependencies.
-
- In Proto3 syntax files, "optimized_for=LITE_RUNTIME" is no longer supported.
-
-
-2015-12-30 version 3.0.0-beta-2 (C++/Java/Python/Ruby/Nano/Objective-C/C#/JavaScript)
- General
- * Introduced a new language implementation: JavaScript.
- * Added a new field option "json_name". By default proto field names are
- converted to "lowerCamelCase" in proto3 JSON format. This option can be
- used to override this behavior and specify a different JSON name for the
- field.
- * Added conformance tests to ensure implementations are following proto3 JSON
- specification.
-
- C++ (Beta)
- * Various bug fixes and improvements to the JSON support utility:
- - Duplicate map keys in JSON are now rejected (i.e., translation will
- fail).
- - Fixed wire-format for google.protobuf.Value/ListValue.
- - Fixed precision loss when converting google.protobuf.Timestamp.
- - Fixed a bug when parsing invalid UTF-8 code points.
- - Fixed a memory leak.
- - Reduced call stack usage.
-
- Java (Beta)
- * Cleaned up some unused methods on CodedOutputStream.
- * Presized lists for packed fields during parsing in the lite runtime to
- reduce allocations and improve performance.
- * Improved the performance of unknown fields in the lite runtime.
- * Introduced UnsafeByteStrings to support zero-copy ByteString creation.
- * Various bug fixes and improvements to the JSON support utility:
- - Fixed a thread-safety bug.
- - Added a new option “preservingProtoFieldNames” to JsonFormat.
- - Added a new option “includingDefaultValueFields” to JsonFormat.
- - Updated the JSON utility to comply with proto3 JSON specification.
-
- Python (Beta)
- * Added proto3 JSON format utility. It includes support for all field types
- and a few well-known types except for Any and Struct.
- * Added runtime support for Any, Timestamp, Duration and FieldMask.
- * [ ] is now accepted for repeated scalar fields in text format parser.
- * Map fields now have proper O(1) performance for lookup/insert/delete
- when using the Python/C++ implementation. They were previously using O(n)
- search-based algorithms because the C++ reflection interface didn't
- support true map operations.
-
- Objective-C (Beta)
- * Various bug-fixes and code tweaks to pass more strict compiler warnings.
- * Now has conformance test coverage and is passing all tests.
-
- C# (Beta)
- * Various bug-fixes.
- * Code generation: Files generated in directories based on namespace.
- * Code generation: Include comments from .proto files in XML doc
- comments (naively)
- * Code generation: Change organization/naming of "reflection class" (access
- to file descriptor)
- * Code generation and library: Add Parser property to MessageDescriptor,
- and introduce a non-generic parser type.
- * Library: Added TypeRegistry to support JSON parsing/formatting of Any.
- * Library: Added Any.Pack/Unpack support.
- * Library: Implemented JSON parsing.
-
- Javascript (Alpha)
- * Added proto3 support for JavaScript. The runtime is written in pure
- JavaScript and works in browsers and in Node.js. To generate JavaScript
- code for your proto, invoke protoc with "--js_out". See js/README.md
- for more build instructions.
-
-2015-08-26 version 3.0.0-beta-1 (C++/Java/Python/Ruby/Nano/Objective-C/C#)
- About Beta
- * This is the first beta release of protobuf v3.0.0. Not all languages
- have reached beta stage. Languages not marked as beta are still in
- alpha (i.e., be prepared for API breaking changes).
-
- General
- * Proto3 JSON is supported in several languages (fully supported in C++
- and Java, partially supported in Ruby/C#). The JSON spec is defined in
- the proto3 language guide:
-
- https://developers.google.com/protocol-buffers/docs/proto3#json
-
- We will publish a more detailed spec to define the exact behavior of
- proto3-conformant JSON serializers and parsers. Until then, do not rely
- on specific behaviors of the implementation if it’s not documented in
- the above spec. More specifically, the behavior is not yet finalized for
- the following:
- - Parsing invalid JSON input (e.g., input with trailing commas).
- - Non-camelCase names in JSON input.
- - The same field appears multiple times in JSON input.
- - JSON arrays contain “null” values.
- - The message has unknown fields.
-
- * Proto3 now enforces strict UTF-8 checking. Parsing will fail if a string
- field contains non UTF-8 data.
-
- C++ (Beta)
- * Introduced new utility functions/classes in the google/protobuf/util
- directory:
- - MessageDifferencer: compare two proto messages and report their
- differences.
- - JsonUtil: support converting protobuf binary format to/from JSON.
- - TimeUtil: utility functions to work with well-known types Timestamp
- and Duration.
- - FieldMaskUtil: utility functions to work with FieldMask.
-
- * Performance optimization of arena construction and destruction.
- * Bug fixes for arena and maps support.
- * Changed to use cmake for Windows Visual Studio builds.
- * Added Bazel support.
-
- Java (Beta)
- * Introduced a new util package that will be distributed as a separate
- artifact in maven. It contains:
- - JsonFormat: convert proto messages to/from JSON.
- - TimeUtil: utility functions to work with Timestamp and Duration.
- - FieldMaskUtil: utility functions to work with FieldMask.
-
- * The static PARSER in each generated message is deprecated, and it will
- be removed in a future release. A static parser() getter is generated
- for each message type instead.
- * Performance optimizations for String fields serialization.
- * Performance optimizations for Lite runtime on Android:
- - Reduced allocations
- - Reduced method overhead after ProGuarding
- - Reduced code size after ProGuarding
-
- Python (Alpha)
- * Removed legacy Python 2.5 support.
- * Moved to a single Python 2.x/3.x-compatible codebase, instead of using 2to3.
- * Fixed build/tests on Python 2.6, 2.7, 3.3, and 3.4.
- - Pure-Python works on all four.
- - Python/C++ implementation works on all but 3.4, due to changes in the
- Python/C++ API in 3.4.
- * Some preliminary work has been done to allow for multiple DescriptorPools
- with Python/C++.
-
- Ruby (Alpha)
- * Many bugfixes:
- - fixed parsing/serialization of bytes, sint, sfixed types
- - other parser bugfixes
- - fixed memory leak affecting Ruby 2.2
-
- JavaNano (Alpha)
- * JavaNano generated code now will be put in a nano package by default to
- avoid conflicts with Java generated code.
-
- Objective-C (Alpha)
- * Added non-null markup to ObjC library. Requires SDK 8.4+ to build.
- * Many bugfixes:
- - Removed the class/enum filter.
- - Renamed some internal types to avoid conflicts with the well-known types
- protos.
- - Added missing support for parsing repeated primitive fields in packed or
- unpacked forms.
- - Added *Count for repeated and map<> fields to avoid auto-create when
- checking for them being set.
-
- C# (Alpha)
- * Namespace changed to Google.Protobuf (and NuGet package will be named
- correspondingly).
- * Target platforms now .NET 4.5 and selected portable subsets only.
- * Removed lite runtime.
- * Reimplementation to use mutable message types.
- * Null references used to represent "no value" for message type fields.
- * Proto3 semantics supported; proto2 files are prohibited for C# codegen.
- Most proto3 features supported:
- - JSON formatting (a.k.a. serialization to JSON), including well-known
- types (except for Any).
- - Wrapper types mapped to nullable value types (or string/ByteString
- allowing nullability). JSON parsing is not supported yet.
- - maps
- - oneof
- - enum unknown value preservation
-
-2015-05-25 version 3.0.0-alpha-3 (Objective-C/C#):
- General
- * Introduced two new language implementations (Objective-C, C#) to proto3.
- * Explicit "optional" keyword are disallowed in proto3 syntax, as fields are
- optional by default.
- * Group fields are no longer supported in proto3 syntax.
- * Changed repeated primitive fields to use packed serialization by default in
- proto3 (implemented for C++, Java, Python in this release). The user can
- still disable packed serialization by setting packed to false for now.
- * Added well-known type protos (any.proto, empty.proto, timestamp.proto,
- duration.proto, etc.). Users can import and use these protos just like
- regular proto files. Additional runtime support will be added for them in
- future releases (in the form of utility helper functions, or having them
- replaced by language specific types in generated code).
- * Added a "reserved" keyword in both proto2 and proto3 syntax. User can use
- this keyword to declare reserved field numbers and names to prevent them
- from being reused by other fields in the same message.
-
- To reserve field numbers, add a reserved declaration in your message:
-
- message TestMessage {
- reserved 2, 15, 9 to 11, 3;
- }
-
- This reserves field numbers 2, 3, 9, 10, 11 and 15. If a user uses any of
- these as field numbers, the protocol buffer compiler will report an error.
-
- Field names can also be reserved:
-
- message TestMessage {
- reserved "foo", "bar";
- }
-
- * Various bug fixes since 3.0.0-alpha-2
-
- Objective-C
- Objective-C includes a code generator and a native objective-c runtime
- library. By adding “--objc_out” to protoc, the code generator will generate
- a header(*.pbobjc.h) and an implementation file(*.pbobjc.m) for each proto
- file.
-
- In this first release, the generated interface provides: enums, messages,
- field support(single, repeated, map, oneof), proto2 and proto3 syntax
- support, parsing and serialization. It’s compatible with ARC and non-ARC
- usage. Besides, user can also access it via the swift bridging header.
-
- See objectivec/README.md for details.
-
- C#
- * C# protobufs are based on project
- https://github.com/jskeet/protobuf-csharp-port. The original project was
- frozen and all the new development will happen here.
- * Codegen plugin for C# was completely rewritten to C++ and is now an
- integral part of protoc.
- * Some refactorings and cleanup has been applied to the C# runtime library.
- * Only proto2 is supported in C# at the moment, proto3 support is in
- progress and will likely bring significant breaking changes to the API.
-
- See csharp/README.md for details.
-
- C++
- * Added runtime support for Any type. To use Any in your proto file, first
- import the definition of Any:
-
- // foo.proto
- import "google/protobuf/any.proto";
- message Foo {
- google.protobuf.Any any_field = 1;
- }
- message Bar {
- int32 value = 1;
- }
-
- Then in C++ you can access the Any field using PackFrom()/UnpackTo()
- methods:
-
- Foo foo;
- Bar bar = ...;
- foo.mutable_any_field()->PackFrom(bar);
- ...
- if (foo.any_field().IsType<Bar>()) {
- foo.any_field().UnpackTo(&bar);
- ...
- }
- * In text format, entries of a map field will be sorted by key.
-
- Java
- * Continued optimizations on the lite runtime to improve performance for
- Android.
-
- Python
- * Added map support.
- - maps now have a dict-like interface (msg.map_field[key] = value)
- - existing code that modifies maps via the repeated field interface
- will need to be updated.
-
- Ruby
- * Improvements to RepeatedField's emulation of the Ruby Array API.
- * Various speedups and internal cleanups.
-
-2015-02-26 version 3.0.0-alpha-2 (Python/Ruby/JavaNano):
- General
- * Introduced three new language implementations (Ruby, JavaNano, and
- Python) to proto3.
- * Various bug fixes since 3.0.0-alpha-1
-
- Python:
- Python has received several updates, most notably support for proto3
- semantics in any .proto file that declares syntax="proto3".
- Messages declared in proto3 files no longer represent field presence
- for scalar fields (number, enums, booleans, or strings). You can
- no longer call HasField() for such fields, and they are serialized
- based on whether they have a non-zero/empty/false value.
-
- One other notable change is in the C++-accelerated implementation.
- Descriptor objects (which describe the protobuf schema and allow
- reflection over it) are no longer duplicated between the Python
- and C++ layers. The Python descriptors are now simple wrappers
- around the C++ descriptors. This change should significantly
- reduce the memory usage of programs that use a lot of message
- types.
-
- Ruby:
- We have added proto3 support for Ruby via a native C extension.
-
- The Ruby extension itself is included in the ruby/ directory, and details on
- building and installing the extension are in ruby/README.md. The extension
- will also be published as a Ruby gem. Code generator support is included as
- part of `protoc` with the `--ruby_out` flag.
-
- The Ruby extension implements a user-friendly DSL to define message types
- (also generated by the code generator from `.proto` files). Once a message
- type is defined, the user may create instances of the message that behave in
- ways idiomatic to Ruby. For example:
-
- - Message fields are present as ordinary Ruby properties (getter method
- `foo` and setter method `foo=`).
- - Repeated field elements are stored in a container that acts like a native
- Ruby array, and map elements are stored in a container that acts like a
- native Ruby hashmap.
- - The usual well-known methods, such as `#to_s`, `#dup`, and the like, are
- present.
-
- Unlike several existing third-party Ruby extensions for protobuf, this
- extension is built on a "strongly-typed" philosophy: message fields and
- array/map containers will throw exceptions eagerly when values of the
- incorrect type are inserted.
-
- See ruby/README.md for details.
-
- JavaNano:
- JavaNano is a special code generator and runtime library designed especially
- for resource-restricted systems, like Android. It is very resource-friendly
- in both the amount of code and the runtime overhead. Here is an an overview
- of JavaNano features compared with the official Java protobuf:
-
- - No descriptors or message builders.
- - All messages are mutable; fields are public Java fields.
- - For optional fields only, encapsulation behind setter/getter/hazzer/
- clearer functions is opt-in, which provide proper 'has' state support.
- - For proto2, if not opted in, has state (field presence) is not available.
- Serialization outputs all fields not equal to their defaults.
- The behavior is consistent with proto3 semantics.
- - Required fields (proto2 only) are always serialized.
- - Enum constants are integers; protection against invalid values only
- when parsing from the wire.
- - Enum constants can be generated into container interfaces bearing
- the enum's name (so the referencing code is in Java style).
- - CodedInputByteBufferNano can only take byte[] (not InputStream).
- - Similarly CodedOutputByteBufferNano can only write to byte[].
- - Repeated fields are in arrays, not ArrayList or Vector. Null array
- elements are allowed and silently ignored.
- - Full support for serializing/deserializing repeated packed fields.
- - Support extensions (in proto2).
- - Unset messages/groups are null, not an immutable empty default
- instance.
- - toByteArray(...) and mergeFrom(...) are now static functions of
- MessageNano.
- - The 'bytes' type translates to the Java type byte[].
-
- See javanano/README.txt for details.
-
-2014-12-01 version 3.0.0-alpha-1 (C++/Java):
-
- General
- * Introduced Protocol Buffers language version 3 (aka proto3).
-
- When protobuf was initially opensourced it implemented Protocol Buffers
- language version 2 (aka proto2), which is why the version number
- started from v2.0.0. From v3.0.0, a new language version (proto3) is
- introduced while the old version (proto2) will continue to be supported.
-
- The main intent of introducing proto3 is to clean up protobuf before
- pushing the language as the foundation of Google's new API platform.
- In proto3, the language is simplified, both for ease of use and to
- make it available in a wider range of programming languages. At the
- same time a few features are added to better support common idioms
- found in APIs.
-
- The following are the main new features in language version 3:
-
- 1. Removal of field presence logic for primitive value fields, removal
- of required fields, and removal of default values. This makes proto3
- significantly easier to implement with open struct representations,
- as in languages like Android Java, Objective C, or Go.
- 2. Removal of unknown fields.
- 3. Removal of extensions, which are instead replaced by a new standard
- type called Any.
- 4. Fix semantics for unknown enum values.
- 5. Addition of maps.
- 6. Addition of a small set of standard types for representation of time,
- dynamic data, etc.
- 7. A well-defined encoding in JSON as an alternative to binary proto
- encoding.
-
- This release (v3.0.0-alpha-1) includes partial proto3 support for C++ and
- Java. Items 6 (well-known types) and 7 (JSON format) in the above feature
- list are not implemented.
-
- A new notion "syntax" is introduced to specify whether a .proto file
- uses proto2 or proto3:
-
- // foo.proto
- syntax = "proto3";
- message Bar {...}
-
- If omitted, the protocol compiler will generate a warning and "proto2" will
- be used as the default. This warning will be turned into an error in a
- future release.
-
- We recommend that new Protocol Buffers users use proto3. However, we do not
- generally recommend that existing users migrate from proto2 from proto3 due
- to API incompatibility, and we will continue to support proto2 for a long
- time.
-
- * Added support for map fields (implemented in C++/Java for both proto2 and
- proto3).
-
- Map fields can be declared using the following syntax:
-
- message Foo {
- map<string, string> values = 1;
- }
-
- Data of a map field will be stored in memory as an unordered map and it
- can be accessed through generated accessors.
-
- C++
- * Added arena allocation support (for both proto2 and proto3).
-
- Profiling shows memory allocation and deallocation constitutes a significant
- fraction of CPU-time spent in protobuf code and arena allocation is a
- technique introduced to reduce this cost. With arena allocation, new
- objects will be allocated from a large piece of preallocated memory and
- deallocation of these objects is almost free. Early adoption shows 20% to
- 50% improvement in some Google binaries.
-
- To enable arena support, add the following option to your .proto file:
-
- option cc_enable_arenas = true;
-
- Protocol compiler will generate additional code to make the generated
- message classes work with arenas. This does not change the existing API
- of protobuf messages and does not affect wire format. Your existing code
- should continue to work after adding this option. In the future we will
- make this option enabled by default.
-
- To actually take advantage of arena allocation, you need to use the arena
- APIs when creating messages. A quick example of using the arena API:
-
- {
- google::protobuf::Arena arena;
- // Allocate a protobuf message in the arena.
- MyMessage* message = Arena::CreateMessage<MyMessage>(&arena);
- // All submessages will be allocated in the same arena.
- if (!message->ParseFromString(data)) {
- // Deal with malformed input data.
- }
- // Must not delete the message here. It will be deleted automatically
- // when the arena is destroyed.
- }
-
- Currently arena does not work with map fields. Enabling arena in a .proto
- file containing map fields will result in compile errors in the generated
- code. This will be addressed in a future release.
-
-2014-10-20 version 2.6.1:
-
- C++
- * Added atomicops support for Solaris.
- * Released memory allocated by InitializeDefaultRepeatedFields() and
- GetEmptyString(). Some memory sanitizers reported them as memory leaks.
-
- Java
- * Updated DynamicMessage.setField() to handle repeated enum values
- correctly.
- * Fixed a bug that caused NullPointerException to be thrown when
- converting manually constructed FileDescriptorProto to
- FileDescriptor.
-
- Python
- * Fixed WhichOneof() to work with de-serialized protobuf messages.
- * Fixed a missing file problem of Python C++ implementation.
-
-2014-08-15 version 2.6.0:
-
- General
- * Added oneofs(unions) feature. Fields in the same oneof will share
- memory and at most one field can be set at the same time. Use the
- oneof keyword to define a oneof like:
- message SampleMessage {
- oneof test_oneof {
- string name = 4;
- YourMessage sub_message = 9;
- }
- }
- * Files, services, enums, messages, methods and enum values can be marked
- as deprecated now.
- * Added Support for list values, including lists of messages, when
- parsing text-formatted protos in C++ and Java.
- For example: foo: [1, 2, 3]
-
- C++
- * Enhanced customization on TestFormat printing.
- * Added SwapFields() in reflection API to swap a subset of fields.
- Added SetAllocatedMessage() in reflection API.
- * Repeated primitive extensions are now packable. The
- [packed=true] option only affects serializers. Therefore, it is
- possible to switch a repeated extension field to packed format
- without breaking backwards-compatibility.
- * Various speed optimizations.
-
- Java
- * writeTo() method in ByteString can now write a substring to an
- output stream. Added endWith() method for ByteString.
- * ByteString and ByteBuffer are now supported in CodedInputStream
- and CodedOutputStream.
- * java_generate_equals_and_hash can now be used with the LITE_RUNTIME.
-
- Python
- * A new C++-backed extension module (aka "cpp api v2") that replaces the
- old ("cpp api v1") one. Much faster than the pure Python code. This one
- resolves many bugs and is recommended for general use over the
- pure Python when possible.
- * Descriptors now have enum_types_by_name and extension_types_by_name dict
- attributes.
- * Support for Python 3.
-
-2013-02-27 version 2.5.0:
-
- General
- * New notion "import public" that allows a proto file to forward the content
- it imports to its importers. For example,
- // foo.proto
- import public "bar.proto";
- import "baz.proto";
-
- // qux.proto
- import "foo.proto";
- // Stuff defined in bar.proto may be used in this file, but stuff from
- // baz.proto may NOT be used without importing it explicitly.
- This is useful for moving proto files. To move a proto file, just leave
- a single "import public" in the old proto file.
- * New enum option "allow_alias" that specifies whether different symbols can
- be assigned the same numeric value. Default value is "true". Setting it to
- false causes the compiler to reject enum definitions where multiple symbols
- have the same numeric value.
- Note: We plan to flip the default value to "false" in a future release.
- Projects using enum aliases should set the option to "true" in their .proto
- files.
-
- C++
- * New generated method set_allocated_foo(Type* foo) for message and string
- fields. This method allows you to set the field to a pre-allocated object
- and the containing message takes the ownership of that object.
- * Added SetAllocatedExtension() and ReleaseExtension() to extensions API.
- * Custom options are now formatted correctly when descriptors are printed in
- text format.
- * Various speed optimizations.
-
- Java
- * Comments in proto files are now collected and put into generated code as
- comments for corresponding classes and data members.
- * Added Parser to parse directly into messages without a Builder. For
- example,
- Foo foo = Foo.PARSER.ParseFrom(input);
- Using Parser is ~25% faster than using Builder to parse messages.
- * Added getters/setters to access the underlying ByteString of a string field
- directly.
- * ByteString now supports more operations: substring(), prepend(), and
- append(). The implementation of ByteString uses a binary tree structure
- to support these operations efficiently.
- * New method findInitializationErrors() that lists all missing required
- fields.
- * Various code size and speed optimizations.
-
- Python
- * Added support for dynamic message creation. DescriptorDatabase,
- DescriptorPool, and MessageFactory work like their C++ counterparts to
- simplify Descriptor construction from *DescriptorProtos, and MessageFactory
- provides a message instance from a Descriptor.
- * Added pickle support for protobuf messages.
- * Unknown fields are now preserved after parsing.
- * Fixed bug where custom options were not correctly populated. Custom
- options can be accessed now.
- * Added EnumTypeWrapper that provides better accessibility to enum types.
- * Added ParseMessage(descriptor, bytes) to generate a new Message instance
- from a descriptor and a byte string.
-
-2011-05-01 version 2.4.1:
-
- C++
- * Fixed the friendship problem for old compilers to make the library now gcc 3
- compatible again.
- * Fixed vcprojects/extract_includes.bat to extract compiler/plugin.h.
-
- Java
- * Removed usages of JDK 1.6 only features to make the library now JDK 1.5
- compatible again.
- * Fixed a bug about negative enum values.
- * serialVersionUID is now defined in generated messages for java serializing.
- * Fixed protoc to use java.lang.Object, which makes "Object" now a valid
- message name again.
-
- Python
- * Experimental C++ implementation now requires C++ protobuf library installed.
- See the README.txt in the python directory for details.
-
-2011-02-02 version 2.4.0:
-
- General
- * The RPC (cc|java|py)_generic_services default value is now false instead of
- true.
- * Custom options can have aggregate types. For example,
- message MyOption {
- optional string comment = 1;
- optional string author = 2;
- }
- extend google.protobuf.FieldOptions {
- optional MyOption myoption = 12345;
- }
- This option can now be set as follows:
- message SomeType {
- optional int32 field = 1 [(myoption) = { comment:'x' author:'y' }];
- }
-
- C++
- * Various speed and code size optimizations.
- * Added a release_foo() method on string and message fields.
- * Fixed gzip_output_stream sub-stream handling.
-
- Java
- * Builders now maintain sub-builders for sub-messages. Use getFooBuilder() to
- get the builder for the sub-message "foo". This allows you to repeatedly
- modify deeply-nested sub-messages without rebuilding them.
- * Builder.build() no longer invalidates the Builder for generated messages
- (You may continue to modify it and then build another message).
- * Code generator will generate efficient equals() and hashCode()
- implementations if new option java_generate_equals_and_hash is enabled.
- (Otherwise, reflection-based implementations are used.)
- * Generated messages now implement Serializable.
- * Fields with [deprecated=true] will be marked with @Deprecated in Java.
- * Added lazy conversion of UTF-8 encoded strings to String objects to improve
- performance.
- * Various optimizations.
- * Enum value can be accessed directly, instead of calling getNumber() on the
- enum member.
- * For each enum value, an integer constant is also generated with the suffix
- _VALUE.
-
- Python
- * Added an experimental C++ implementation for Python messages via a Python
- extension. Implementation type is controlled by an environment variable
- PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION (valid values: "cpp" and "python")
- The default value is currently "python" but will be changed to "cpp" in
- future release.
- * Improved performance on message instantiation significantly.
- Most of the work on message instantiation is done just once per message
- class, instead of once per message instance.
- * Improved performance on text message parsing.
- * Allow add() to forward keyword arguments to the concrete class.
- E.g. instead of
- item = repeated_field.add()
- item.foo = bar
- item.baz = quux
- You can do:
- repeated_field.add(foo=bar, baz=quux)
- * Added a sort() interface to the BaseContainer.
- * Added an extend() method to repeated composite fields.
- * Added UTF8 debug string support.
-
-2010-01-08 version 2.3.0:
-
- General
- * Parsers for repeated numeric fields now always accept both packed and
- unpacked input. The [packed=true] option only affects serializers.
- Therefore, it is possible to switch a field to packed format without
- breaking backwards-compatibility -- as long as all parties are using
- protobuf 2.3.0 or above, at least.
- * The generic RPC service code generated by the C++, Java, and Python
- generators can be disabled via file options:
- option cc_generic_services = false;
- option java_generic_services = false;
- option py_generic_services = false;
- This allows plugins to generate alternative code, possibly specific to some
- particular RPC implementation.
-
- protoc
- * Now supports a plugin system for code generators. Plugins can generate
- code for new languages or inject additional code into the output of other
- code generators. Plugins are just binaries which accept a protocol buffer
- on stdin and write a protocol buffer to stdout, so they may be written in
- any language. See src/google/protobuf/compiler/plugin.proto.
- **WARNING**: Plugins are experimental. The interface may change in a
- future version.
- * If the output location ends in .zip or .jar, protoc will write its output
- to a zip/jar archive instead of a directory. For example:
- protoc --java_out=myproto_srcs.jar --python_out=myproto.zip myproto.proto
- Currently the archive contents are not compressed, though this could change
- in the future.
- * inf, -inf, and nan can now be used as default values for float and double
- fields.
-
- C++
- * Various speed and code size optimizations.
- * DynamicMessageFactory is now fully thread-safe.
- * Message::Utf8DebugString() method is like DebugString() but avoids escaping
- UTF-8 bytes.
- * Compiled-in message types can now contain dynamic extensions, through use
- of CodedInputStream::SetExtensionRegistry().
- * Now compiles shared libraries (DLLs) by default on Cygwin and MinGW, to
- match other platforms. Use --disable-shared to avoid this.
-
- Java
- * parseDelimitedFrom() and mergeDelimitedFrom() now detect EOF and return
- false/null instead of throwing an exception.
- * Fixed some initialization ordering bugs.
- * Fixes for OpenJDK 7.
-
- Python
- * 10-25 times faster than 2.2.0, still pure-Python.
- * Calling a mutating method on a sub-message always instantiates the message
- in its parent even if the mutating method doesn't actually mutate anything
- (e.g. parsing from an empty string).
- * Expanded descriptors a bit.
-
-2009-08-11 version 2.2.0:
-
- C++
- * Lite mode: The "optimize_for = LITE_RUNTIME" option causes the compiler
- to generate code which only depends libprotobuf-lite, which is much smaller
- than libprotobuf but lacks descriptors, reflection, and some other features.
- * Fixed bug where Message.Swap(Message) was only implemented for
- optimize_for_speed. Swap now properly implemented in both modes
- (Issue 91).
- * Added RemoveLast and SwapElements(index1, index2) to Reflection
- interface for repeated elements.
- * Added Swap(Message) to Reflection interface.
- * Floating-point literals in generated code that are intended to be
- single-precision now explicitly have 'f' suffix to avoid pedantic warnings
- produced by some compilers.
- * The [deprecated=true] option now causes the C++ code generator to generate
- a GCC-style deprecation annotation (no-op on other compilers).
- * google::protobuf::GetEnumDescriptor<SomeGeneratedEnumType>() returns the
- EnumDescriptor for that type -- useful for templates which cannot call
- SomeGeneratedEnumType_descriptor().
- * Various optimizations and obscure bug fixes.
-
- Java
- * Lite mode: The "optimize_for = LITE_RUNTIME" option causes the compiler
- to generate code which only depends libprotobuf-lite, which is much smaller
- than libprotobuf but lacks descriptors, reflection, and some other features.
- * Lots of style cleanups.
-
- Python
- * Fixed endianness bug with floats and doubles.
- * Text format parsing support.
- * Fix bug with parsing packed repeated fields in embedded messages.
- * Ability to initialize fields by passing keyword args to constructor.
- * Support iterators in extend and __setslice__ for containers.
-
-2009-05-13 version 2.1.0:
-
- General
- * Repeated fields of primitive types (types other that string, group, and
- nested messages) may now use the option [packed = true] to get a more
- efficient encoding. In the new encoding, the entire list is written
- as a single byte blob using the "length-delimited" wire type. Within
- this blob, the individual values are encoded the same way they would
- be normally except without a tag before each value (thus, they are
- tightly "packed").
- * For each field, the generated code contains an integer constant assigned
- to the field number. For example, the .proto file:
- message Foo { optional int bar_baz = 123; }
- would generate the following constants, all with the integer value 123:
- C++: Foo::kBarBazFieldNumber
- Java: Foo.BAR_BAZ_FIELD_NUMBER
- Python: Foo.BAR_BAZ_FIELD_NUMBER
- Constants are also generated for extensions, with the same naming scheme.
- These constants may be used as switch cases.
- * Updated bundled Google Test to version 1.3.0. Google Test is now bundled
- in its verbatim form as a nested autoconf package, so you can drop in any
- other version of Google Test if needed.
- * optimize_for = SPEED is now the default, by popular demand. Use
- optimize_for = CODE_SIZE if code size is more important in your app.
- * It is now an error to define a default value for a repeated field.
- Previously, this was silently ignored (it had no effect on the generated
- code).
- * Fields can now be marked deprecated like:
- optional int32 foo = 1 [deprecated = true];
- Currently this does not have any actual effect, but in the future the code
- generators may generate deprecation annotations in each language.
- * Cross-compiling should now be possible using the --with-protoc option to
- configure. See README.txt for more info.
-
- protoc
- * --error_format=msvs option causes errors to be printed in Visual Studio
- format, which should allow them to be clicked on in the build log to go
- directly to the error location.
- * The type name resolver will no longer resolve type names to fields. For
- example, this now works:
- message Foo {}
- message Bar {
- optional int32 Foo = 1;
- optional Foo baz = 2;
- }
- Previously, the type of "baz" would resolve to "Bar.Foo", and you'd get
- an error because Bar.Foo is a field, not a type. Now the type of "baz"
- resolves to the message type Foo. This change is unlikely to make a
- difference to anyone who follows the Protocol Buffers style guide.
-
- C++
- * Several optimizations, including but not limited to:
- - Serialization, especially to flat arrays, is 10%-50% faster, possibly
- more for small objects.
- - Several descriptor operations which previously required locking no longer
- do.
- - Descriptors are now constructed lazily on first use, rather than at
- process startup time. This should save memory in programs which do not
- use descriptors or reflection.
- - UnknownFieldSet completely redesigned to be more efficient (especially in
- terms of memory usage).
- - Various optimizations to reduce code size (though the serialization speed
- optimizations increased code size).
- * Message interface has method ParseFromBoundedZeroCopyStream() which parses
- a limited number of bytes from an input stream rather than parsing until
- EOF.
- * GzipInputStream and GzipOutputStream support reading/writing gzip- or
- zlib-compressed streams if zlib is available.
- (google/protobuf/io/gzip_stream.h)
- * DescriptorPool::FindAllExtensions() and corresponding
- DescriptorDatabase::FindAllExtensions() can be used to enumerate all
- extensions of a given type.
- * For each enum type Foo, protoc will generate functions:
- const string& Foo_Name(Foo value);
- bool Foo_Parse(const string& name, Foo* result);
- The former returns the name of the enum constant corresponding to the given
- value while the latter finds the value corresponding to a name.
- * RepeatedField and RepeatedPtrField now have back-insertion iterators.
- * String fields now have setters that take a char* and a size, in addition
- to the existing ones that took char* or const string&.
- * DescriptorPool::AllowUnknownDependencies() may be used to tell
- DescriptorPool to create placeholder descriptors for unknown entities
- referenced in a FileDescriptorProto. This can allow you to parse a .proto
- file without having access to other .proto files that it imports, for
- example.
- * Updated gtest to latest version. The gtest package is now included as a
- nested autoconf package, so it should be able to drop new versions into the
- "gtest" subdirectory without modification.
-
- Java
- * Fixed bug where Message.mergeFrom(Message) failed to merge extensions.
- * Message interface has new method toBuilder() which is equivalent to
- newBuilderForType().mergeFrom(this).
- * All enums now implement the ProtocolMessageEnum interface.
- * Setting a field to null now throws NullPointerException.
- * Fixed tendency for TextFormat's parsing to overflow the stack when
- parsing large string values. The underlying problem is with Java's
- regex implementation (which unfortunately uses recursive backtracking
- rather than building an NFA). Worked around by making use of possessive
- quantifiers.
- * Generated service classes now also generate pure interfaces. For a service
- Foo, Foo.Interface is a pure interface containing all of the service's
- defined methods. Foo.newReflectiveService() can be called to wrap an
- instance of this interface in a class that implements the generic
- RpcService interface, which provides reflection support that is usually
- needed by RPC server implementations.
- * RPC interfaces now support blocking operation in addition to non-blocking.
- The protocol compiler generates separate blocking and non-blocking stubs
- which operate against separate blocking and non-blocking RPC interfaces.
- RPC implementations will have to implement the new interfaces in order to
- support blocking mode.
- * New I/O methods parseDelimitedFrom(), mergeDelimitedFrom(), and
- writeDelimitedTo() read and write "delimited" messages from/to a stream,
- meaning that the message size precedes the data. This way, you can write
- multiple messages to a stream without having to worry about delimiting
- them yourself.
- * Throw a more descriptive exception when build() is double-called.
- * Add a method to query whether CodedInputStream is at the end of the input
- stream.
- * Add a method to reset a CodedInputStream's size counter; useful when
- reading many messages with the same stream.
- * equals() and hashCode() now account for unknown fields.
-
- Python
- * Added slicing support for repeated scalar fields. Added slice retrieval and
- removal of repeated composite fields.
- * Updated RPC interfaces to allow for blocking operation. A client may
- now pass None for a callback when making an RPC, in which case the
- call will block until the response is received, and the response
- object will be returned directly to the caller. This interface change
- cannot be used in practice until RPC implementations are updated to
- implement it.
- * Changes to input_stream.py should make protobuf compatible with appengine.
-
-2008-11-25 version 2.0.3:
-
- protoc
- * Enum values may now have custom options, using syntax similar to field
- options.
- * Fixed bug where .proto files which use custom options but don't actually
- define them (i.e. they import another .proto file defining the options)
- had to explicitly import descriptor.proto.
- * Adjacent string literals in .proto files will now be concatenated, like in
- C.
- * If an input file is a Windows absolute path (e.g. "C:\foo\bar.proto") and
- the import path only contains "." (or contains "." but does not contain
- the file), protoc incorrectly thought that the file was under ".", because
- it thought that the path was relative (since it didn't start with a slash).
- This has been fixed.
-
- C++
- * Generated message classes now have a Swap() method which efficiently swaps
- the contents of two objects.
- * All message classes now have a SpaceUsed() method which returns an estimate
- of the number of bytes of allocated memory currently owned by the object.
- This is particularly useful when you are reusing a single message object
- to improve performance but want to make sure it doesn't bloat up too large.
- * New method Message::SerializeAsString() returns a string containing the
- serialized data. May be more convenient than calling
- SerializeToString(string*).
- * In debug mode, log error messages when string-type fields are found to
- contain bytes that are not valid UTF-8.
- * Fixed bug where a message with multiple extension ranges couldn't parse
- extensions.
- * Fixed bug where MergeFrom(const Message&) didn't do anything if invoked on
- a message that contained no fields (but possibly contained extensions).
- * Fixed ShortDebugString() to not be O(n^2). Durr.
- * Fixed crash in TextFormat parsing if the first token in the input caused a
- tokenization error.
- * Fixed obscure bugs in zero_copy_stream_impl.cc.
- * Added support for HP C++ on Tru64.
- * Only build tests on "make check", not "make".
- * Fixed alignment issue that caused crashes when using DynamicMessage on
- 64-bit Sparc machines.
- * Simplify template usage to work with MSVC 2003.
- * Work around GCC 4.3.x x86_64 compiler bug that caused crashes on startup.
- (This affected Fedora 9 in particular.)
- * Now works on "Solaris 10 using recent Sun Studio".
-
- Java
- * New overload of mergeFrom() which parses a slice of a byte array instead
- of the whole thing.
- * New method ByteString.asReadOnlyByteBuffer() does what it sounds like.
- * Improved performance of isInitialized() when optimizing for code size.
-
- Python
- * Corrected ListFields() signature in Message base class to match what
- subclasses actually implement.
- * Some minor refactoring.
- * Don't pass self as first argument to superclass constructor (no longer
- allowed in Python 2.6).
-
-2008-09-29 version 2.0.2:
-
- General
- * License changed from Apache 2.0 to New BSD.
- * It is now possible to define custom "options", which are basically
- annotations which may be placed on definitions in a .proto file.
- For example, you might define a field option called "foo" like so:
- import "google/protobuf/descriptor.proto"
- extend google.protobuf.FieldOptions {
- optional string foo = 12345;
- }
- Then you annotate a field using the "foo" option:
- message MyMessage {
- optional int32 some_field = 1 [(foo) = "bar"]
- }
- The value of this option is then visible via the message's
- Descriptor:
- const FieldDescriptor* field =
- MyMessage::descriptor()->FindFieldByName("some_field");
- assert(field->options().GetExtension(foo) == "bar");
- This feature has been implemented and tested in C++ and Java.
- Other languages may or may not need to do extra work to support
- custom options, depending on how they construct descriptors.
-
- C++
- * Fixed some GCC warnings that only occur when using -pedantic.
- * Improved static initialization code, making ordering more
- predictable among other things.
- * TextFormat will no longer accept messages which contain multiple
- instances of a singular field. Previously, the latter instance
- would overwrite the former.
- * Now works on systems that don't have hash_map.
-
- Java
- * Print @Override annotation in generated code where appropriate.
-
- Python
- * Strings now use the "unicode" type rather than the "str" type.
- String fields may still be assigned ASCII "str" values; they will
- automatically be converted.
- * Adding a property to an object representing a repeated field now
- raises an exception. For example:
- # No longer works (and never should have).
- message.some_repeated_field.foo = 1
-
- Windows
- * We now build static libraries rather than DLLs by default on MSVC.
- See vsprojects/readme.txt for more information.
-
-2008-08-15 version 2.0.1:
-
- protoc
- * New flags --encode and --decode can be used to convert between protobuf text
- format and binary format from the command-line.
- * New flag --descriptor_set_out can be used to write FileDescriptorProtos for
- all parsed files directly into a single output file. This is particularly
- useful if you wish to parse .proto files from programs written in languages
- other than C++: just run protoc as a background process and have it output
- a FileDescriptorList, then parse that natively.
- * Improved error message when an enum value's name conflicts with another
- symbol defined in the enum type's scope, e.g. if two enum types declared
- in the same scope have values with the same name. This is disallowed for
- compatibility with C++, but this wasn't clear from the error.
- * Fixed absolute output paths on Windows.
- * Allow trailing slashes in --proto_path mappings.
-
- C++
- * Reflection objects are now per-class rather than per-instance. To make this
- possible, the Reflection interface had to be changed such that all methods
- take the Message instance as a parameter. This change improves performance
- significantly in memory-bandwidth-limited use cases, since it makes the
- message objects smaller. Note that source-incompatible interface changes
- like this will not be made again after the library leaves beta.
- * Heuristically detect sub-messages when printing unknown fields.
- * Fix static initialization ordering bug that caused crashes at startup when
- compiling on Mac with static linking.
- * Fixed TokenizerTest when compiling with -DNDEBUG on Linux.
- * Fixed incorrect definition of kint32min.
- * Fix bytes type setter to work with byte sequences with embedded NULLs.
- * Other irrelevant tweaks.
-
- Java
- * Fixed UnknownFieldSet's parsing of varints larger than 32 bits.
- * Fixed TextFormat's parsing of "inf" and "nan".
- * Fixed TextFormat's parsing of comments.
- * Added info to Java POM that will be required when we upload the
- package to a Maven repo.
-
- Python
- * MergeFrom(message) and CopyFrom(message) are now implemented.
- * SerializeToString() raises an exception if the message is missing required
- fields.
- * Code organization improvements.
- * Fixed doc comments for RpcController and RpcChannel, which had somehow been
- swapped.
- * Fixed text_format_test on Windows where floating-point exponents sometimes
- contain extra zeros.
- * Fix Python service CallMethod() implementation.
-
- Other
- * Improved readmes.
- * VIM syntax highlighting improvements.
-
-2008-07-07 version 2.0.0:
-
- * First public release.