As of March 2025, the Bond open-source project has ended. There will be no further activity in this project: no new features, no bug fixes, and, importantly, no security fixes. See the README for more details.
The project's original changelog is below.
Notable changes--especially new features and breaking changes--are recorded here.
Bond's version numbers follow Semantic Versioning.
Each release is tagged with a Git tag. The
NuGet packages follow the Git
tag versions. The Bond compiler (gbc) and
compiler library have a slightly
different versioning scheme, following the Haskell community's
package versioning policy.
- IDL core version: 3.0
- C++ version: 13.0.1
- C# NuGet version: 13.0.2
- Java version: 13.0.1
gbc& compiler library: 0.13.0.0
- There were no Java changes in this release.
- There were no Java changes in this release.
- Fixed assembly versions in NuGet packages.
- IDL core version: 3.0
- C++ version: 13.0.1
- C# NuGet version: 13.0.1
- Java version: 13.0.1
gbc& compiler library: 0.13.0.0
- There were no Java changes in this release.
InputBufferthrows aStreamExceptionwhen trying to skip beyond the end of the stream. This mitigates a CPU DoS vulnerability.- Deserialization from JSON payloads will no longer process very deeply
nested structures. Instead, a
bond::CoreExceptionwill be thrown in order to protect against stack overflows. The depth limit may be changed by calling the functionbond::SetDeserializeMaxDepth(uint32_t). - Breaking change: Protocols must now implement
CanReadArraymethod and Buffers must implementCanReadmethod. These are used to perform checks that mitigate memory allocation vulnerabilities. - Breaking change: Custom containers must implement
reset_listandlist_insert. Standard implementations are provided. This API is used to incrementally fill containers of complex types when preallocation may be unsafe. Expected container size is provided inreset_list, where client code can perform sanity checks before any memory is allocated by Bond. bond::CoreExceptionis thrown when the payload has a greater declared size than the backing buffer.- Known issue: Debug builds with MSVC 14.0 (Visual Studio 2015) may fail at runtime if custom allocators for containers are used. Newer MSVC versions and other compilers are not affected, neither are Release builds with MSVC 14.0. This can be worked around by using newer MSVC version or building in Release configuration.
- Added support for Boost 1.83.
- Fixed compatibility with .NET 9.
This version was allocated but never released.
This version was allocated but never released.
- IDL core version: 3.0
- C++ version: 11.0.1
- C# NuGet version: 11.0.1
- Java version: 11.0.1
gbc& compiler library: 0.13.0.0
- Breaking change: Codegen for Bond-over-gRPC has been removed: the
--grpcswitch is no longer supported. Service definitions are still parsed, but codegen can no longer be done for C++ or C#. See issue #1131, Bond-over-gRPC will be deprecated February 2022, for the full announcement.
- Breaking change: All Bond-over-gRPC code has been removed. This is
everything under the
bond::ext:grpcnamespace. Service definitions can still appear in .bond files, but no C++ code will be generated for them. See issue #1131, Bond-over-gRPC will be deprecated February 2022, for the full announcement. - By default, deserialization will no longer process very deeply nested
structures. Instead, an
bond::CoreExceptionwill be thrown in order to protect against stack overflows. The depth limit may be changed by calling the functionbond::SetDeserializeMaxDepth(uint32_t). - Fixed handling of large containers of invalid types that could cause excessive CPU use when deserializing some payloads.
-
Breaking change: Update of Newtonsoft.Json library to version 13.3.0. (Issue #1156)
This update fixes depth check in input JSON string (by default: 64). Depth check is necessary to prevent stack overflow issue with long payloads.
-
Breaking change: The minimum supported version of .NET Framework is 4.6.2. Support for .NET Framework 4.5 has been dropped.
-
Breaking change: All Bond-over-gRPC code has been removed. This is everything under the
Bond.Grpcnamespace and the Bond.Grpc.CSharp NuGet package. Service definitions can still appear in .bond files, but no C# code will be generated for them. See issue #1131, Bond-over-gRPC will be deprecated February 2022, for the full announcement. -
Added codegen and deserialization support for container type aliases to use System.Collections.Immutable collections. (Pull request #1161)
-
By default, deserialization will no longer process very deeply nested structures. Instead, an
InvalidOperationExceptionwill be thrown in order to protect against stack overflows. The depth limit may be changed by setting the propertyBond.DeserializerControls.Active.MaxDepth.
- By default, deserialization will no longer process very deeply nested
structures. Instead, a
org.bondlib.InvalidBondDataExceptionexception will be thrown in order to protect against stack overflows. The depth limit may be changed by calling the methodorg.bondlib.bond.DeserializerControls.setMaxDepth.
This version was allocated but never released.
- IDL core version: 3.0
- C++ version: 10.0
- C# NuGet version: 10.0
gbc& compiler library: 0.12.1.0
- Breaking change: Bond-over-gRPC has been marked deprecated.
Bond-over-gRPC will be removed in the next major version of Bond. See
issue #1131, Bond-over-gRPC will be deprecated February
2022, for the full
announcement.
- The
[[deprecated]]attribute has been added to thebond::ext::grpcnamespace in every top-level Bond-over-gRPC++ header. This will cause compiler warnings/errors for uses of Bond-over-gRPC++ that you may need to handle.
- The
- Fixed multiple symbol definition for Win32Exception in
grpc/win_thread_pool.h. (Issue #1129) - Add forward declaration for
GenericWriteVariableUnsignedto fix "C3861: 'GenericWriteVariableUnsigned': identifier not found" when using custom streams that do not have their own implementation ofWriteVariableUnsigned. (Issue #1115) - Fixed
bond::DynamicParserthat may not emit transform'sOmittedFieldfor compile-time schema and an omitted optional field in the payload. (Issue #1120) - Fixed missing include directives.
- Removed
bond::blob's unnecessary_contentmember, reducing its size by 1 pointer. - Added an ability to apply transform to a schema.
- Added
noexcepttobond::blob's non-throwing functions.
- Breaking change: Bond-over-gRPC code has been marked deprecated.
Bond-over-gRPC will be removed in the next major version of Bond. See
issue #1131, Bond-over-gRPC will be deprecated February
2022, for the full
announcement.
- The
[Obsolete]attribute has been added to every public type in theBond.Grpcassembly. This will cause compiler warnings/errors for uses of Bond-over-gRPC# that you may need to handle.
- The
- Added virtual method
OutputBuffer.ResizeBufferthat can be overridden to use buffer allocators other thannew byte[](e.g.ArrayPool<byte>.Rent()). (Pull request #1128) - The error message emitted when duplicate .bond items are detected by the
MSBuild codegen now correctly refers to
$(EnableDefaultItems)as the switch that controls this behavior. (Issue #1110)
- IDL core version: 3.0
- C++ version: 9.0.5
- C# NuGet version: 9.0.5
gbc& compiler library: 0.12.1.0
- Added CMake variable
BOND_FIND_GRPCto allow for external gRPC installations. The search for external GRPC installations is only done whenBOND_ENABLE_GRPCisTRUE. - Removed use of deprecated
std::ptr_funin the Python library. (Issue #1080)
- Implicit codegen now excludes any .bond files in the project's output
directories (e.g.,
bin/,obj/debug/netstandard1.0). This behavior matches the implicit compilation behavior for .cs files.
- IDL core version: 3.0
- C++ version: 9.0.4
- C# NuGet version: 9.0.3
gbc& compiler library: 0.12.1.0
- Bond now uses the
[[noreturn]]attribute to annotate functions that do not return. Previously, it used compiler-specific annotations.
- There were no C# changes in this release.
- IDL core version: 3.0
- C++ version: 9.0.2
- C# NuGet version: 9.0.3
gbc& compiler library: 0.12.1.0
- There were no C++ changes in this release.
- Fixed a performance regression in
OutputBuffer.Grow: it was incorrectly growing the buffer by one byte at a time instead of geometrically. (Issue #1065, Pull request #1066)
- IDL core version: 3.0
- C++ version: 9.0.2
- C# NuGet version: 9.0.2
gbc& compiler library: 0.12.1.0
- gbc is now installed with 555 (r-xr-xr-x) permissions. (Issue #1062)
- Fixed a regression writing to non-seekable streams using
CompactBinaryWriter. The fix in commit b0fd4a1 inadvertently added a call toStream.Positionin the Release configuration. This call is only intended to be made when Bond is built in the Debug configuration.
- IDL core version: 3.0
- C++ version: 9.0.1
- C# NuGet version: 9.0.1
gbc& compiler library: 0.12.1.0
- The RapidJSON submodule now points to commit
8f4c021.
This addresses some aliasing warnings in recent versions of Clang and GCC.
- The RapidJSON submodule now uses its new home under the Tencent organization.
- Fixed MSB3105/CS2002 error about duplicate Compile items when a directory
contains multiple .bond files and
--gprcis in$BondOptions. (Issue #1050) - Fix handling of large container lengths that could cause an infinite loop when deserializing some payloads. This fix addresses CVE-2020-1469.
- IDL core version: 3.0
- C++ version: 9.0.0
- C# NuGet version: 9.0.0
gbc& compiler library: 0.12.1.0
- Breaking change MSVC 2013 support has been removed. (Issue #851)
- Breaking change
bond/core/warning.hhas been deleted. Since the 5.3.0 release, Bond hasn't needed global warning suppressions for any compiler except MSVC 2013. This file was only used for MSVC 2013, which is no longer a supported compiler. - Fixed MSVC warning for deprecation of
std::result_of_tin/std:c++17. (Issue #1007) - Fixed MSVC warning C5208: unnamed class used in typedef name cannot declare members other than non-static data members, member enumerations, or member classes. (Issue #1027)
- Fixed Boost 1.73 warning "The practice of declaring the Bind placeholders (_1, _2, ...) in the global namespace is deprecated." (Pull request #1036)
- Fixed creation of duplicate default constructor when defining an empty struct
and using
--preview-constructor-parameters. (Issue #963) - The .NET assemblies are now only Authenticode signed with SHA-2. Legacy Windows OS versions may need updates to work with SHA-2 signatures.
- C++ codegen no longer supports MSVC 2013.
- gbc is now only Authenticode signed with SHA-2. Legacy Windows OS versions may need updates to work with SHA-2 signatures.
- IDL core version: 3.0
- C++ version: 8.2.0
- C# NuGet version: 8.2.0
gbc& compiler library: 0.12.0.1
There are no changes to code generation or the language projections.
- Fixed Cabal packaging issues that prevented the publication of 0.12.0.0.
- IDL core version: 3.0
- C++ version: 8.2.0
- C# NuGet version: 8.2.0
gbc& compiler library: 0.12.0.0
- gRPC v1.17.1 is now required to use Bond-over-gRPC.
- Fixed an ambiguous
HexDigitoverload compilation error when compiling with some versions of GCC. (Pull request #954) - Fixed ambiguous call to
maybe::operator==that breaks GCC 9 build. (Pull request #975) - Fixed MSVC warning C4296: "'<': expression is always false" in protocol.h. (Issue #981)
- Added .NET 4.6 target framework to Bond.IO.dll so that it can use
MemoryStream.TryGetBuffer()when cloning streams like is done when targeting .NET Standard 1.3+.
- Breaking change The bond compiler library (the Haskell library) and
gbchave been switched to build with stackage snapshot lts-14.4. This snapshot uses megaparsec 7 and aeson 1.4.4, both of which had breaking changes that are reflected in the library, e.g., theparseBondsignature has changed. There is no impact to users of the gbc command line tool or changes to C++ and C# code generation.
- There were no C++ changes in this release.
- Updated to gRPC v1.17.1.
- Add a constructor that accepts a
CallInvokerinstance to the generated gRPC clients to support client-side interceptors. For more details about C# interceptors, see the proposal in the gRPC project. Issue #950
gbc& compiler library: 0.11.0.3- IDL core version: 3.0
- C++ version: 8.0.1
- C# NuGet version: 8.0
- Fixed a crash in
bond::ext::grpc::server's destructor when invoked on a moved-from object instance. - Added move-assignment operator to
bond::blob. - Added cmake variable
BOND_FIND_RAPIDJSONto allow for external RapidJSON installations.
- There were no C# changes in this release.
- Fixed alias conversion issue for generic fields Issue #928.
gbc& compiler library: 0.11.0.0- IDL core version: 3.0
- C++ version: 8.0
- C# NuGet version: 8.0
- Breaking change The deprecated Bond Comm functionality has been removed. This includes all gbc options related to Comm and the Comm codegen templates in the Haskell library. Issue #824
- C++ codegen now properly generates move assignment operators. Previously, this was broken for some cases.
- C++ codegen no longer generates checks for C++11, except for MSVC 2013 workarounds.
- C++ codegen no longer generates data member initialization that invokes a
constructor accepting
Comparerfor associative containers. - C++ codegen can now generate copy and move constructors with an allocator
argument when a custom allocator is used and
--alloc-ctorsis passed togbc. - C++ codegen can now generate type
aliases that
correspond to ones in IDL when the
--type-aliasesflag is passed togbc. - C++ codegen can now use
std::scoped_allocator_adaptorfor strings and containers when a custom allocator is used and the--scoped-allocflag is passed togbc. - C++ codegen now generates lazily constructed enum name-to-value and
value-to-name maps. Additionally, a user-defined map type can now be
provided to
GetNameToValueMapandGetValueToNameMap. - C++ codegen now applies the
--export-attributeto theToString,FromString,ToEnumandFromEnumfunctions. - Fixed a bug in C++ codegen that incorrectly applied the export attribute to generic gRPC services.
- C++ codegen now generates an
allocator_typetypedef for a struct when the--allocatoroption is passed togbc, instead of specializingstd::uses_allocator. importstatements can now end with an optional semicolon.- File and directory paths on the command line, in response files, or in
importstatements can now use a mix of forward and backslashes. Issue #869 - gbc is now Authenticode dual-signed with both SHA-1 and SHA-2.
- Breaking change The deprecated Bond Comm functionality has been removed. This includes all gbc options related to Comm and all Comm APIs and header files. Issue #824
- Breaking change Only versions of Boost released in the past two years (1.61 and newer) are supported. Bond will likely continue to work with older versions, but it is no longer tested with anything older than 1.61. Test coverage for Boost versions 1.61–1.66 has been improved. Issue #771
- Breaking change Constructors accepting a
Comparerhave been removed from thebond::maybeandbond::nullabletypes. - Breaking change The
bond::is_blobandbond::is_nullabletraits have been removed. Theblobandnullabletypes are not customizable, so these where never needed or used. The related functionality provided bybond::get_list_sub_type_idremains. - Breaking change Removed a dangerous implicit conversion operator from
bond::maybe<T>toconst T&. To access abond::maybe<T>value, use one of thebond::maybe<T>::valuefunctions. - Breaking change The nested
pointer,const_pointer,referenceandconst_referencetypedefs have been removed frombond::nullable<T>. - Breaking change The
Allocator(second) type parameter has be removed frombond::nullable<T>and now it is always deduced fromT. - Breaking change The
bond::capped_allocatorand related types have been moved to thebond::extnamespace and the "bond/ext" include directory. - Breaking changes in Bond-over-gRPC (based on real-world use and
feedback). Check the updated
examples
to see how to use the changed APIs.
- The generated
ClientCoreandServiceCoreclass templates and theClientandServiceconvenience typedefs have all been replaced with normal classes namedClientandService. TheThreadPooltype parameter has been removed in favor of a simplified runtime representation of aScheduler. - The
Schedulerconcept and thebond::ext::gRPC::thread_poolimplementation now useoperator()instead of aschedule()member function. - The
bond::ext::gRPC::server_coreclass template and thebond::ext::gRPC::serverconvenience typedef have been replaced with the normal classbond::ext::gRPC::server. - The generated
Client::Async*functions now accept thestd::shared_ptr<grpc::ClientContext>argument as the last parameter instead of as the first. This makes is easier to omit this parameter when no context customization is needed. - The client callback now directly accepts
bond::ext::gRPC::unary_call_result<Response>(drops thestd::shared_ptr). Also theunary_call_resultnow exposes read-only getters rather than fields. This simplified the type that clients need to deal with. - The
bond::ext::gRPC::wait_callback::arg_typehas been removed. - The
client_callback.hheader file has been renamed tounary_call_result.hto align with its contents. - The
bond::ext::gRPC::server_builderhas been replaced by thebond::ext::gRPC::server::Startfactory function which now returns a plainbond::ext::gRPC::serverobject and accepts service instances managed bystd::unique_ptr. This properly models the lifetime requirements. Service implementations must now pass aSchedulerto the generatedServicebase class which is no longer default constructible. - The generated method reflection information no longer uses a redundant
bonded<T>wrapper forinput_typeandresult_typetypedefs. - The
bond::ext::gRPC::unary_callno longer requiresbonded<T>wrapper for request type. - The
bond::ext::gRPC::unary_call::FinishWithErrorhas been renamed toFinish. Overloads that take a status can be used to signal an error. - The
grpc::Statussecond argument has been removed frombond::ext::gRPC::unary_call::Finish. gRPC does not support sending a response with a non-OK status, so the payload was being droped anyway. - Fixed
bond::ext::gRPC::unary_call,bond::ext::gRPC::shared_unary_callandbond::ext::gRPC::unary_call_resulttypes to properly usevoidandbond::reflection::nothinginstead of thebond::Voidempty struct. Also removed unnecessary functions fromunary_callandshared_unary_callfor those cases when they are not applicable (e.g.Finishis not available when return type isnothing).
- The generated
- gRPC v1.12.0 is now required to use Bond-over-gRPC.
- This version include a number of memory leak fixes that users of Bond-over-gRPC were encountering. Issue #810
- This version include some Windows-specific performance improvements for loopback connections.
- The
bond::ext::gRPC::wait_callbackhas been deprecated in favor of additionally generated client functions that returnstd::future. - Fixed includes for gRPC services with events or parameterless methods. Issue #735
- Fixed a bug which would read an unrelated struct's field(s) when deserializing a base struct. Issue #742
- Fixed a bug in
bond::MapTo<T>::Fieldthat failed to pass theProtocolstype parameter tobond::Apply. - Fixed a race condition when
bond::ext::gRPC::io_manager::shutdownandbond::ext::gRPC::io_manager::waitare called concurrently. - Fixed a race condition during
bond::ext::gRPC::unary_calldestruction. - Fixed the broken move constructor of
bond::bonded<T, Reader&>. - Fixed the move constructor of
bond::valueto actually move the underlying reader. - Added the
bond::blob_prolonghelper function that will return abond::blobwith a copied data if the original one does not own the memory. - The
bond::OutputBuffer::GetBuffersnow can accept arbitrary STL-like containers. bond::maybe<T>has been overhauled.- Fixed a bug that default initialized an instance of
Teven when a maybe held nothing. - Added
noexceptvariants ofbond::maybe<T>::value. - Added
bond::maybe<T>::emplaceto construct a maybe's value in place. - Added various rvalue-reference and allocator-aware constructors and assignment operators.
- Added
operator==(const bond::maybe<T>&, const T&)andoperator==(const T&, const bond::maybe<T>&)to compare directly to instances ofT.
- Fixed a bug that default initialized an instance of
- Fixed an issue with the
ToString,FromString,ToEnumandFromEnumfunctions that were previously not exported from a DLL when the--export-attributeoption was passed togbc. Issue #861 - Fixed a bug in
bond::nullable<T, Alloc>where it was not propagating an allocator toTwhenallocator_typewas not explicitly defined. - Fixed a bug in
bond::make_boxwhereconst T&was not handled correctly. - The use of
bond::check_methodhas been replaced with less restricting expression SFINAE checks on supported compilers. Issue #896 - Fixed a bug where
bond::ext::gRPC::io_managercould cause a thread to join itself. - The preferred namespace for Bond-over-gRPC is now
bond::ext::grpc. The previous namespace,bond::ext::gRPC, continues to work. - Added a Windows-specific implementation of a thread pool.
- Breaking change The deprecated Bond Comm functionality has been removed. This includes all gbc options related to Comm and all Comm APIs, assemblies, and NuGet packages. Issue #824
- Breaking change The Bond.CSharp and Bond.Compiler.CSharp NuGet packages
perform implicit codegen when the simplified .NET Core
.csprojformat is used. This breaking change does not affect projects using the classic.csprojformat. Any .NET Core projects that encounter the build error "Duplicate BondCodegen items were included." and were explicitly listingBondCodegenitems will either need to rely on implicit codegen or disable all implicit inclusion. To set per-item metadata, use the item update syntax. Issue #636 - The C# attribute
Bond.Attributecan now be applied to methods. This fixes broken codegen when attributes are used on service methods. Issue #617 - Bond Attributes on service methods are now present on all the client overloads for the methods. Previously, just the "friendly" method had the attributes.
- Grpc.Core v1.12.0 is now required to use Bond-over-gRPC.
- This version include a number of memory leak fixes that users of Bond-over-gRPC were encountering. Issue #810
- This version include some Windows-specific performance improvements for loopback connections.
BondCodegenitems will now appear in the Visual Studio 2017+ UI in .NET Core projects.- The .NET Standard assemblies are fully strong-name signed. Previously, they were inadvertently only public strong-name signed.
- The .NET assemblies are now Authenticode dual-signed with both SHA-1 and SHA-2.
- Fixed a bug in the codegen targets when using
gbcfrom $PATH on macOS and Linux that prevented the C# compiler from finding the generated C# files. - Preview: Added preliminary support for generating types with constructors with parameters for each field. This functionality will change in the future and may be removed. Pull request #857
gbc& compiler library: 0.10.1.0- IDL core version: 2.0
- IDL comm version: 1.2
- C++ version: 7.0.2
- C# NuGet version: 7.0.1
- C# Comm NuGet version: 0.14.0
- Fixed a memory leak when deserializing Bond-over-gRPC messages that were stored as multiple slices.
- There were no C# changes in this release.
gbc& compiler library: 0.10.1.0- IDL core version: 2.0
- IDL comm version: 1.2
- C++ version: 7.0.0
- C# NuGet version: 7.0.1
- C# Comm NuGet version: 0.14.0
- Fixes a regression introduced in 7.0.0 that resulted in an exception during
generation of Serializer instances if the type contained an aliased
requiredblob field.
gbc& compiler library: 0.10.1.0- IDL core version: 2.0
- IDL comm version: 1.2
- C++ version: 7.0.0
- C# NuGet version: 7.0.0
- C# Comm NuGet version: 0.13.0
- Add service/method annotations in C# for Comm and gRPC.
- Add service/method metadata support in C++ for gRPC.
- C++ codegen now uses
std::allocator_traitsfor rebinding allocator types.
- Added
bond::make_boxhelper function to createbond::Box<T>instances. - When Unicode conversion fails during JSON deserialization to wstring, a bond::CoreException is now thrown instead of a Boost exception.
- When SimpleJSON deserializes a map key with no matching value, a bond::CoreException is now thrown.
- When SimpleJSON deserializes a map key of non-primitive type, a bond::CoreException is now thrown.
- Errors from some versions of G++ like "non-template type
Deserializeused as a template" have been fixed. Issue #538 - Guard against overflows in OutputMemoryStream, blob, and SimpleArray.
- Use RapidJSON's iterative parser to handle deeply nested JSON data without causing a stack overflow.
- Guard against min/max being function-style macros in more places.
- Allow Bond-generated C++ types to use non-default-constructable allocators. (This works even on MSVC 2013 by only compiling the generated-type's default constructor if it is used. The default constructor is now a templated constructor that is invokable with zero arguments.)
- Fixed some macro uses that did not have sufficient parenthesis around parameters and resulted in compiler errors.
- Added the
bond::ext::gRPC::shared_unary_calltype. This type can be used when shared ownership semantics are needed forunary_callinstances. - Provide compile-time access to metadata about gRPC services and methods.
- Using
bond::ext::gRPC::wait_callbackno longer causes a shared_ptr cycle and the resulting resource leak. - Ensure that
bond_grpc.handbond_const_grpc.hare generated when the CMake variableBOND_ENABLE_GRPCis set to that importingbond.bondandbond_const.bondwhen defining a service works. - Added
bond::capped_allocatoradapter that will allow to limit the max number of bytes to allocate during deserialization.
- Breaking change The code generation MSBuild targets no longer support Mono's xbuild: only MSBuild is supported. Mono has deprecated xbuild in favor of MSBuild now that MSBuild is open source and cross-platform.
- Breaking change The code generation MSBuild targets now automatically
compile the generated
_grpc.csfiles if--grpcis passed togbc. Explicit<Compile Include="$(IntermediateOutputPath)foo_grpc.cs" />lines in MSBuild projects will need to be removed to fix error MSB3105 about duplicate items. See commit a120cd99 for an example of how to fix this. Issue #448 - Breaking change The low-level API
IParser.ContainerHandlernow has anarraySegmentparameter for the converted blob. - The code generation MSBuild targets will now skip compiling the
_types.csfiles when--structs=falseis passed togbc. - Added
Bond.Box.Createhelper method to createBond.Box<T>instances. - Reflection.IsBonded now recognizes custom IBonded implementations.
- Use Newtonsoft's JSON.NET BigInteger support -- when available -- to handle the full range of uint64 values in the SimpleJson protocol (.NET 4.5 or greater, .NET Standard 1.6 or greater).
Bond.IO.Unsafe.InputStreamcan now be used with streams that do not implementStream.Seek, likeSystem.IO.Compression.GzipStream. Issue #498- Such streams are detected by inspecting
Stream.CanSeek.
- Such streams are detected by inspecting
- Fix a bug in CompactBinaryWriter when using v2 that repeated first pass when a bonded field was serailized, resulting in extra work and extra state left in the CompactBinaryWriter.
- Apply IDL annotations to services and methods for gRPC. Issue #617
- Fixed a bug that produced C# code that couldn't be compiled when using Bond-over-gRPC with a generic type instantiated with a collection. Issue #623
- When targeting .NET 4.5, avoid resolving external entities when using
SimpleXmlReader. - Remove redundant conversions during serialization of aliased blobs.
- Apply IDL annotations to services and methods for Comm.
This version was allocated but never released.
gbc& compiler library: 0.10.0.0- IDL core version: 2.0
- IDL comm version: 1.2
- C++ version: 6.0.0
- C# NuGet version: 6.0.0
- C# Comm NuGet version: 0.12.0
- IDL support for service inheritance syntax
- Breaking change In the Bond Haskell library, the
Servicetype has a new fieldserviceBase.
- Breaking change In the Bond Haskell library, the
- C++ codegen now generates
extern templates
of
bond::Applyinstead of overloads. - C++ codegen hides FieldTemplate details, shortening symbol names.
- Breaking change A C++11 compiler is now required. The minimum
supported C++ compiler versions are now:
- Clang 3.4 or newer
- GNU C++ 4.7 or newer
- Microsoft Visual C++ 2013 or newer
- Breaking change The generated apply.h/.cpp files now contain
extern templates
of
bond::Applyinstead of overload implementations. Calls to bareApplyorTypeNamespace::Applymust be changed tobond::Apply. - Breaking change Users who are implementing custom streams are now
required to provide the free functions
CreateInputBuffer,CreateOutputBufferandGetBufferRange, depending on which scenarios are used (there will be a corresponding compilation error for each case).- Users who were mistakenly calling
bond::Merge<T>with explicit an template argument will get a compilation error. To fix, remove the<T>part. - In addition, users of MSVC12 are required to define a
range_typetypedef as a return type of correspondingGetBufferRangeinside their custom input buffer implementation. - Please see InputBuffer, OutputBuffer, and the bf example for more details.
- Users who were mistakenly calling
- Breaking change The
bond::customize<protocols>has been removed. All the public APIs that require a protocol list (e.g.bond::Marshal) now accept an extra template argumentProtocolswhich defaults tobond::BuiltInProtocols. Custom input streams now requirebond::type_id<>to be specialized with a unique magic number. For more details please see the bf example. - Initial support for sending Bond objects over gRPC has been added.
- The
bond::Applyfunction now has a uniform signature. Call sites for theMarshaler<Writer>transform overload that were mistakenly passingWriterexplicitly (e.g.bond::Apply<Writer>(marshaler, value)) will now get a compiler error. To fix, remove the<Writer>part:bond::Apply(marshaler, value). - Fixed a bug that caused serialization using
CompactBinaryWriter<OutputCounter>(to get the expected length of serializing with compact binary) to produced bogus results. - Fixed custom streams support which was broken for some scenarios.
- For Visual C++ 2017 compability, RapidJSON v1.0.0 or newer is now required. The RapidJSON submodule that Bond uses by default has been updated to v1.1.0 due to a warning from clang in earlier versions.
- C++ codegen hides FieldTemplate details, shortening symbol names.
- Breaking change Support for .NET 4.0 has been dropped from the supported frameworks.
- Breaking change The deprecated type
Bond.BondReflectionhas been removed. The typeBond.Reflectionshould be used instead. - Breaking change Bond assemblies are now
strong-name signed
with the
bond.snk
key in the repository instead of with a Microsoft key. This allows anyone
to produce compatible assemblies, not just Microsoft. Official
distribution of Bond will continue to be
Authenticode signed
with a Microsoft certificate.
Issue #414
- The new public key for assemblies is now
00240000048000009400000006020000002400005253413100040000010001000d504ac18b4b149d2f7b0059b482f9b6d44d39059e6a96ff0a2a52678b5cfd8567cc67254132cd2debb5b95f6a1206a15c6f8ddac137c6c3ef4995f28c359acaa683a90995c8f08df7ce0aaa8836d331a344a514c443f112f80bf2ebed40ccb32d7df63c09b0d7bef80aecdc23ec200a458d4f8bafbcdeb9bf5ba111fbbd4787
- The new public key for assemblies is now
- Breaking change Bond assemblies now have assembly and file versions that correspond to their NuGet package version. Strong name identities will now change release-over-release in line with the NuGet package versions. Issue #325
- The codegen MSBuild targets will now re-run codegen if gbc itself has been changed.
- Fixed a bug where JSON and XML protocols would permit the serialization of non-nullable string fields that were set to null instead of throwing a NullReferenceException. Issue #417
gbc& compiler library: 0.9.0.0- IDL core version: 2.0
- IDL comm version: 1.2
- C++ version: 5.3.0
- C# NuGet version: 5.3.1
- C# Comm NuGet version: 0.11.1
- Cleaned up documentation comments.
gbc& compiler library: 0.9.0.0- IDL core version: 2.0
- IDL comm version: 1.2
- C++ version: 5.3.0
- C# NuGet version: 5.3.0
- C# Comm NuGet version: 0.11.0
- C++ codegen ensures that parameter names do not shadow field names.
- When generating C++ apply files, there are now explicit
bond::Apply<>instantiations forCompactBinaryWriter<OutputCounter>andSimpleBinaryWriter<Null>writers. Pull request #373- Breaking change (Haskell library only):
Language.Bond.Codegen.Cpp.ApplyOverloads.Protocolis now a union ofProtocolReaderandProtocolWriterto permit mixing and matching of reader/writer protocols without having to explicitly compute the full cross product.
- Breaking change (Haskell library only):
- Add gbc flags to pick which C# files to generate (structs, gRPC, and comm). Only structs are generated by default.
- gbc ensures that method names are unique within a service. Issue #381
- Fix Python shared_ptr converter build break with Boost 1.63.
- Improve compliance with
Microsoft's SDL.
- Bond now builds on MSVC with
_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMESinstead of_CTR_SECURE_NO_WARNINGS. - Bond builds on MSVC with SDL recommended warnings enabled.
- Bond now builds on MSVC with
- Eliminate need for warning suppression on MSVC14 via warning.h in Bond itself. warning.h is still in place on MSVC12; furthermore, we don't alter warning.h for now as it may be depended upon by application code.
- Avoid unaligned memory access on non-x86/x64 platforms. Issue #305
- Improve compliance with strict-aliasing rules.
- Bond now builds on Clang/GCC with
-fstrict-aliasing.
- Bond now builds on Clang/GCC with
- When generating C++ apply files, there are now explicit
bond::Apply<>instantiations forCompactBinaryWriter<OutputCounter>andSimpleBinaryWriter<Null>writers. Pull request #373 - Improve C++ allocator support
Issue #379
Pull request #380
- Support C++11 and above allocator model for rebind
- Simplify detection of the default allocator
- Remove per-field instantiation of DynamicParser<>::UnknownFieldOrTypeMismatch method.
- Added gRPC integration. See the Bond-over-gRPC manual.
- Added controls to cap incremental allocation between reads in
Bond.IO.Unsafe.InputStream. - Extended fix for bug parsing JSON when a string value is a date. Pull request #358
- Bond C# 5.1.0 accidentally broke backward compability by renaming
Bond.ReflectiontoBond.BondReflection. This has been fixed:Bond.BondReflectionwas unrenamed back toBond.Reflection, and a shimBond.BondReflectiontype now redirects all calls to their original names to minimize further breakage. Issue #369- Code that started using
Bond.BondReflectionby name will encounter warning CS0618 indicating use of an obselete method/type. To fix this, use the original nameBond.Reflection. This warning can be suppressed if needed. However... - ...the shim type
Bond.BondReflectionwill be removed during or after the next major release of C# Bond.
- Code that started using
- Breaking change To generate C# Comm files, be sure to pass the
--commflag to gbc. See how the pingpong example was updated. - C# Comm is now deprecated. We recommend that you use Bond-over-gRPC. See the Bond-over-gRPC manual.
- EpoxyListener's StopAsync() now stops all the outstanding connections that it accepted.
- EpoxyTransport's StopAsync() now stops all the connections and listeners that it created.
gbc& compiler library: 0.8.0.0- IDL core version: 2.0
- IDL comm version: 1.2
- C++ version: 5.2.0
- C# NuGet version: 5.2.0
- C# Comm NuGet version: 0.10.0
- Breaking change: The C++ Comm .cpp template has been renamed to
comm_cppfromtypes_comm_cppto match the file it generates. - Add export-attribute option for C++ and make apply-attribute a deprecated synonym for export-attribute
- Fix C++ Comm build problems when services are shared via DLL. Issue #314
- Fixed compatibility with RapidJSON v1.1.0. Issue #271
- The minimum supported version of Boost is now 1.58
- The
bfutility now supports multiple payloads. Pull request #288 - Fixed an issue with aliased enums. Pull request #288
- Fixed an issue with template parameter deduction in
bond::is_nullablethat occurs with Microsoft Visual C++ 2015 Update 3. Issue #306
- Fixed a multiply-defined symbol linker error for
bond::comm::epoxy::detail::MakeConfigFrame.
- Added controls to cap pre-allocation during deserialization of containers and blobs.
- Fixed computation of default value for aliased bool and wstring fields. Issue #300
- Resources are now properly cleaned up if failures are encountered when establishing client-side Epoxy connections.
- The generated interfaces for services are now public. They were inadvertently internal before.
gbc& compiler library: 0.7.0.0- IDL core version: 2.0
- IDL comm version: 1.2
- C++ version: 5.1.0
- C# NuGet version: 5.1.0
- C# Comm NuGet version: 0.9.0
- Breaking change: The Haskell utility functions
structNameandstructParamswere renamed toclassNameandclassParams(in theLanguage.Bond.Codegen.Cpp.Utilmodule). - Added initial support for generating C++ Comm services and proxies.
- The initial C++ Comm code has been merged in, but there is still work left to be done before the first preview release. Use at your own risk.
- Bond C# now supports
.NET Standard 1.0, 1.3, and 1.6,
so you can use Bond in .NET Core applications.
Pull request #243
- Not all assemblies work with all versions of the .NET Standard or on all platforms. The manual lists which assemblies target which frameworks.
- Bond C# Comm is not yet building with .NET Core toolchain, so its .NET Core support is preliminary.
- Bond.JSON now depends on Newsoft.JSON 9.0.1, the earliest version that supports .NET Standard 1.0.
- A new assembly, Bond.Reflection.dll, has been added, due to some internal refactoring needed for .NET Core support. Many of the Bond assemblies now have a dependency on this assembly, so you'll need to deploy it. If you use NuGet to consume Bond, this is should be handled automatically.
- Fixed a bug in the MSBuild targets that caused codegen to always be run if all of the BondCodegen items have Options metadata.
- Fixed a bug in the MSBuild targets that caused compilation to fail if the $BondOutputDirectory did not end with a trailing slash.
- The constructor for
LayerStackProviderno longer requires a logger; instead, the transport's logger is passed toOnSend/OnReceive. Before, using the same logger with a transport andLayerStackProviderrequired a duplicate implementation. - Fixed a bug that prevented
EpoxyListenerfrom accepting multiple connections in parallel.
- C# Comm NuGet version: 0.8.0
EpoxyTransportcan be configured to enable TCP keep-alive to help detect dead connections. SeeEpoxyTransportBuilder.SetKeepAliveTimesfor details.
gbc& compiler library: 0.6.0.0- IDL core version: 2.0
- IDL comm version: 1.1
- C++ version: 5.0.0
- C# NuGet version: 5.0.0
- C# Comm NuGet version: 0.7.0
- Breaking change:
bond.TypeDef.list_sub_typefield removed, as it was breaking some consumers of serialized SchemaDef. We plan to restore this field in the future. Issue #161 re-opened
- Update IDL to conform to naming conventions.
- Adjust IDL for changes made to Epoxy internals
- Breaking change: Runtime SchemaDef
list_sub_typefield removed, as it was breaking some consumers of serialized SchemaDef. We plan to restore this field in the future. Issue #161 re-opened - Generated enum types now have a
FromEnummethod that can be used to convert from an enum value to a string. Now generated enum types have all four ofToEnum,FromEnum,ToString, andFromString. (The...Enumvariants return false on failure, while the...Stringvariants throw.)
- Breaking change: Runtime SchemaDef
list_sub_typefield removed, as it was breaking some consumers of serialized SchemaDef. We plan to restore this field in the future. Issue #161 re-opened - The Bond.Runtime NuGet package no longer artificially limits Newtonsoft.Json to versions before 10. Issue #212
EpoxyListenerscan now be configured to require clients to authenticate themselves with a certificate. This is configured via theclientCertificateRequiredparameter when creating anEpoxyServerTlsConfig.- Internals of the Epoxy protocol cleaned up. See the updated wire format specification.
gbc& compiler library: 0.5.0.0- IDL core version: 1.0 (first release)
- IDL comm version: 1.0 (first release)
- C++ version: 4.3.0
- C# NuGet version: 4.3.0
- C# Comm NuGet version: 0.6.0
- Breaking change: Runtime SchemaDef now includes information about whether BT_LIST fields are nullable or blobs. Issue #161
- User-defined
TypeMappings can now be created. This makes is easier to implement code generation for new languages. Pull request #172 - Validate default value type mistmatches. Issue #72 Issue #128
- Validate default value out-of-range values. Issue #73
- Fail when struct field has default value of
nothing. Issue #164 - Fail when enum field doesn't have default value. Issue #177
- Validate default value of type aliases
- Generated types will used
= defaultmove constructors if possible. This results in many generated types havingnoexceptmove constructors. - Fix a bug where, if a Bond namespace contained a struct and an enum value with the same name, generated C++ would contain ambiguous references. Issue #202
- Set up a separate IDL directory so that IDL is independent of language bindings. Pull request #219
- Set up a separate IDL directory so that IDL is independent of language bindings. Convert comm IDL files to use C++-style naming convention. Pull request #219
- Improvements in the
nullableimplementation. Pull request #174- Correctly use allocator model.
- Reduce size of
nullablein the normal case. - And others
- Runtime SchemaDef now includes information about whether BT_LIST fields are nullable or blobs. Issue #161
- The following Bond types have (possibly conditional)
noexceptmove constructors:blob,bonded,maybe,nullable,RuntimeSchema,value.
- Bond can now be used with Newtonsoft.Json >= 7.0.1 and < 10
- Runtime SchemaDef now includes information about whether BT_LIST fields are nullable or blobs. Issue #161
- Logging interface revamped to make it non-static, eliminate boilerplate code, and to handle
logging-related exceptions gracefully.
LogHandlerrenamed toILogSink.TransportBuilder.SetLogSinkadded to associate a logger with a transport.TransportBuilder.EnableDebugLoggingadded to control whether debug logs are emitted or not.- The
ILogSink.Logmethod is now provided a pre-formatted string instead of a format string and its arguments.
- Transport is now parameterized with Connection and Listener
implementations. This eliminates the need to cast the results of
transport.ConnectToAsync()andtransport.MakeListener()to transport-specific subtypes. - Epoxy has a hook for performing custom host to IP address resolution. This
is configured with
EpoxyTransportBuilder.SetResolver. - Bond-generated Errors now give clients opaque GUIDs. These GUIDs can be matched against emitted metrics for debugging.
- Epoxy can now be configured to use TLS to secure the connection.
- TLS configuration is set via
EpoxyTransportBuilder.SetClientTlsConfig/EpoxyTransportBuilder.SetServerTlsConfig. - See the TLS example for even more details.
- TLS configuration is set via
gbc& compiler library: 0.4.1.0- C# NuGet version: 4.2.1
- C# Comm NuGet version: 0.5.0
- Support for parsing service definitions and generating C# service bases, interfaces, and proxies.
- MSBuild-compatible error messages. Issue #136
- Added
Deserializer.TryDeserialize(). - Added two new
NuGet packages
to make it easier to consume Bond piecemeal.
- Bond.Compiler: contains
gbc,bond.bond, andbond_const.bondin a tools-only package - Bond.Compiler.CSharp: contains
gbcand C# MSBuild targets. No longer do you have to consume Bond.CSharp (which pulls in all of the rest of Bond) just to get codegen.
- Bond.Compiler: contains
- Initial preview release of the Bond Communications framework.
gbc& compiler library: 0.4.0.2- C# NuGet version: 4.2.0
- Add support for Compact Binary v2 writing. Issue #70
gbc& compiler library: 0.4.0.2- C# NuGet version: 4.1.0
- Field ordinals larger than 65535 are now rejected. Issue #111
- Fields that duplicate the name of an existing field are now rejected. Issue #123
- The generated C# code now compiles with no errors or warnings at
/warn:4. Issue #82 - Added
Visual Studio Code highlighting rules for
.bondfiles.
- Enums are now cast to 32-bit integers to avoid some compiler warnings.
- Bond can be used in code bases where there is a function-style macro named
U.
- The generated C# code now compiles with no errors or warnings at
/warn:4. Issue #82 - Bond-generated enums constants are now cast to 32-bit integers to avoid some compiler warnings.
- Implicit conversion between
bond.GUIDandSystem.Guidhas been added. Pull request #145 - The ability to
customize the implementation of
IBonded<T>used has been added. Pull request #153
gbc& compiler library: 0.4.0.1- C# NuGet version: 4.0.2
- Added a custom codegen example.
- Added support to
not inline nested structs in
Serializers. This can be used to speed up the time to create the serializer for very complex schemas. - Fix for rare buffer corruption in InputStream. Issue #114.
- Fix for SimpleXmlParser not handling XML declarations. Issue #112
Bond C# had the following breaking changes introduced in 4.x compared to the 3.x versions:
- The Bond.Core.CSharp NuGet package was introduced so that not all uses of Bond depend on Json.NET. The Bond.Runtime.CSharp package still depends on Json.NET and also depends on Bond.Core.CSharp. The primary package remains Bond.CSharp.
CompactBinaryReader<InputStream>now explicitly implementsICloneable<CompactBinaryReader<InputStream>>instead of implicitly.FastBinaryReaderandSimpleBinaryReaderwere likewise changed.
These sections need to be written. In the meantime, consult the repository's history.