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.
- Fixed compatibility with RapidJSON v1.1.0. Issue #271
- The minimum supported version of Boost is now 1.58
- The
bf
utility now supports multiple payloads. Pull request #288 - Fixed an issue with aliased enums. Pull request #288
- Added controls to cap pre-allocation during deserialization of containers and blobs.
- Resources are now properly cleaned up if failures are encountered when establishing client-side Epoxy connections.
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
- Added initial support for generating C++ Comm services and proxies.
- The Haskell utility functions
structName
andstructParams
were renamed toclassName
andclassParams
(in theLanguage.Bond.Codegen.Cpp.Util
module).
- 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
LayerStackProvider
no longer requires a logger; instead, the transport's logger is passed toOnSend
/OnReceive
. Before, using the same logger with a transport andLayerStackProvider
required a duplicate implementation. - Fixed a bug that prevented
EpoxyListener
from accepting multiple connections in parallel.
- C# Comm NuGet version: 0.8.0
EpoxyTransport
can be configured to enable TCP keep-alive to help detect dead connections. SeeEpoxyTransportBuilder.SetKeepAliveTimes
for 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
- Update IDL to conform to naming conventions.
- Adjust IDL for changes made to Epoxy internals
- Generated enum types now have a
FromEnum
method 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...Enum
variants return false on failure, while the...String
variants throw.) - Runtime SchemaDef
list_sub_type
field removed, as it was breaking some consumers of serialized SchemaDef. We plan to restore this field in the future. Issue #161 re-opened
- Runtime SchemaDef
list_sub_type
field 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
EpoxyListeners
can now be configured to require clients to authenticate themselves with a certificate. This is configured via theclientCertificateRequired
parameter 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
- User-defined
TypeMapping
s can now be created. This makes is easier to implement code generation for new languages. Pull request #172 - Runtime SchemaDef now includes information about whether BT_LIST fields are nullable or blobs. Issue #161
- 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
= default
move constructors if possible. This results in many generated types havingnoexcept
move 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
nullable
implementation. Pull request #174- Correctly use allocator model.
- Reduce size of
nullable
in 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)
noexcept
move 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.
LogHandler
renamed toILogSink
.TransportBuilder.SetLogSink
added to associate a logger with a transport.TransportBuilder.EnableDebugLogging
added to control whether debug logs are emitted or not.- The
ILogSink.Log
method 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.bond
in a tools-only package - Bond.Compiler.CSharp: contains
gbc
and 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
.bond
files.
- 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.GUID
andSystem.Guid
has 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
These sections need to be written. In the meantime, consult the repository's history.