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.
gbc
& compiler library: TBD- IDL core version: TBD
- IDL comm version: TBD
- C++ version: TBD
- C# NuGet version: TBD (minor bump needed)
- C# Comm NuGet version: TBD (minor bump needed)
- Fixed a bug in the MSBuild targets that caused codegen to always be run if all of the BondCodegen items has Options metadata.
- Fixed a bug in the MSBuild targets that caused compilation to fail if the $BondOutputDirectory did not end with a trailing slash.
- A new assembly, Bond.Reflection.dll, has been added, due to some internal refactoring to make way for full .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.
- The NuGet packages now include initial support for
.NET Standard 1.0,
which makes it easier to use Bond in .NET Core applications. This initial
support is based on the .NET 4.5 build, not on an explicit .NET Standard
1.0 build. Pull request #243
- Not all assemblies and not all packages work with .NET Standard. If package restore fails, then the package likely doesn't support .NET Standard 1.0.
- Bond.JSON now depends on Newsoft.JSON 9.0.1, the earliest version that support .NET Standard 1.0
- 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.