Bond v8.0.0 Release Notes
Release Date: 2018-05-30 // almost 6 years ago-
gbc
& compiler library: 0.11.0.0- IDL core version: 3.0
- C++ version: 8.0
- C# NuGet version: 8.0
gbc
and Bond compiler library- ๐ฅ 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
Comparer
for associative containers. - ๐ C++ codegen can now generate copy and move constructors with an allocator
argument when a custom allocator is used and
--alloc-ctors
is passed togbc
. - C++ codegen can now generate type
aliases that
correspond to ones in IDL when the
--type-aliases
flag is passed togbc
. - C++ codegen can now use
std::scoped_allocator_adaptor
for strings and containers when a custom allocator is used and the--scoped-alloc
flag 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
GetNameToValueMap
andGetValueToNameMap
. - C++ codegen now applies the
--export-attribute
to theToString
,FromString
,ToEnum
andFromEnum
functions. - ๐ Fixed a bug in C++ codegen that incorrectly applied the export attribute to generic gRPC services.
- C++ codegen now generates an
allocator_type
typedef for a struct when the--allocator
option is passed togbc
, instead of specializingstd::uses_allocator
. import
statements can now end with an optional semicolon.- ๐ป File and directory paths on the command line, in response files, or in
import
statements can now use a mix of forward and backslashes. Issue #869 - gbc is now Authenticode dual-signed with both SHA-1 and SHA-2.
C++
- ๐ฅ 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
Comparer
have been removed from thebond::maybe
andbond::nullable
types. - ๐ฅ Breaking change The
bond::is_blob
andbond::is_nullable
traits have been removed. Theblob
andnullable
types are not customizable, so these where never needed or used. The related functionality provided bybond::get_list_sub_type_id
remains. - ๐ฅ 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>::value
functions. - ๐ฅ Breaking change The nested
pointer
,const_pointer
,reference
andconst_reference
typedefs 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_allocator
and related types have been moved to thebond::ext
namespace 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
ClientCore
andServiceCore
class templates and theClient
andService
convenience typedefs have all been replaced with normal classes namedClient
andService
. TheThreadPool
type parameter has been removed in favor of a simplified runtime representation of aScheduler
. - The
Scheduler
concept and thebond::ext::gRPC::thread_pool
implementation now useoperator()
instead of aschedule()
member function. - The
bond::ext::gRPC::server_core
class template and thebond::ext::gRPC::server
convenience 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_result
now exposes read-only getters rather than fields. This simplified the type that clients need to deal with. - The
bond::ext::gRPC::wait_callback::arg_type
has been removed. - The
client_callback.h
header file has been renamed tounary_call_result.h
to align with its contents. - The
bond::ext::gRPC::server_builder
has been replaced by thebond::ext::gRPC::server::Start
factory function which now returns a plainbond::ext::gRPC::server
object and accepts service instances managed bystd::unique_ptr
. This properly models the lifetime requirements. Service implementations must now pass aScheduler
to the generatedService
base class which is no longer default constructible. - The generated method reflection information no longer uses a redundant
bonded<T>
wrapper forinput_type
andresult_type
typedefs. - The
bond::ext::gRPC::unary_call
no longer requiresbonded<T>
wrapper for request type. - The
bond::ext::gRPC::unary_call::FinishWithError
has been renamed toFinish
. Overloads that take a status can be used to signal an error. - The
grpc::Status
second 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_call
andbond::ext::gRPC::unary_call_result
types to properly usevoid
andbond::reflection::nothing
instead of thebond::Void
empty struct. Also removed unnecessary functions fromunary_call
andshared_unary_call
for those cases when they are not applicable (e.g.Finish
is 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_callback
has 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>::Field
that failed to pass theProtocols
type parameter tobond::Apply
. - ๐ Fixed a race condition when
bond::ext::gRPC::io_manager::shutdown
andbond::ext::gRPC::io_manager::wait
are called concurrently. - ๐ Fixed a race condition during
bond::ext::gRPC::unary_call
destruction. - ๐ Fixed the broken move constructor of
bond::bonded<T, Reader&>
. - ๐ Fixed the move constructor of
bond::value
to actually move the underlying reader. - โ Added the
bond::blob_prolong
helper function that will return abond::blob
with a copied data if the original one does not own the memory. - The
bond::OutputBuffer::GetBuffers
now can accept arbitrary STL-like containers. bond::maybe<T>
has been overhauled.- Fixed a bug that default initialized an instance of
T
even when a maybe held nothing. - Added
noexcept
variants ofbond::maybe<T>::value
. - Added
bond::maybe<T>::emplace
to 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
,ToEnum
andFromEnum
functions that were previously not exported from a DLL when the--export-attribute
option was passed togbc
. Issue #861 - ๐ Fixed a bug in
bond::nullable<T, Alloc>
where it was not propagating an allocator toT
whenallocator_type
was not explicitly defined. - ๐ Fixed a bug in
bond::make_box
whereconst T&
was not handled correctly. - The use of
bond::check_method
has been replaced with less restricting expression SFINAE checks on supported compilers. Issue #896 - ๐ Fixed a bug where
bond::ext::gRPC::io_manager
could 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.
C#
- ๐ฅ 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
.csproj
format is used. This breaking change does not affect projects using the classic.csproj
format. Any .NET Core projects that encounter the build error "Duplicate BondCodegen items were included." and were explicitly listingBondCodegen
items 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.Attribute
can 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.
- ๐ป
BondCodegen
items 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
gbc
from $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