36 KiB
36 KiB
Changelog
All notable changes to this project will be documented in this file. The format is based on Keep a Changelog.
Unreleased
Fixed
- Passing a response promise to a run-delayed continuation could result in a heap-use-after-free if the actor terminates before the action runs. The destructor of the promise now checks for this case.
- Accessing URI fields now always returns the normalized string.
Changed
- Since support of Qt 5 expired, we have ported the Qt examples to version 6. Hence, building the Qt examples now requires Qt in version 6.
0.18.5 - 2021-07-16
Fixed
- 0.18.4 introduced a potential crash when using the OpenSSL module and
encountering
SSL_ERROR_WANT_READ. The crash manifested if CAF resumed a write operation but failed to fully reset its state. The state management (and consequently the crash) has been fixed. - CAF now clears the actor registry before calling the destructors of loaded modules. This fixes undefined behavior that could occur in rare cases where actor cleanup code could run after loaded modules had been destroyed.
0.18.4 - 2021-07-07
Added
- The new class
caf::telemetry::importer::processallows users to get access to process metrics even when not configuring CAF to export metrics to Prometheus via HTTP.
Changed
- Message views now perform the type-check in their constructor. With this
change, the
make_*utility functions are no longer mandatory and users may instead simply construct the view directly.
Fixed
- Printing a
config_valuethat contains a zero durationtimespannow properly prints0sinstead of1s(#1262). This bug most notably showed up when setting atimespanparameter such ascaf.middleman.heartbeat-intervalvia config file or CLI to0sand then printing the config parameter, e.g., via--dump-config. - Blocking actors now release their private thread before decrementing the running-actors count to resolve a race condition during system shutdown that could result in the system hanging (#1266).
- When using the OpenSSL module, CAF could run into a state where the SSL layer
wants to read data while CAF is trying to send data. In this case, CAF did not
properly back off, causing high CPU load due to spinning and in some scenarios
never recovering. This issue has been resolved by properly handling
SSL_ERROR_WANT_READon the transport (#1060). - Scheduled actors now accept default handlers for down messages etc. with
non-const apply operator such as lambda expressions declared as
mutable.
Removed
- Dropped three obsolete (and broken) macros in the
unit_test.hppheader:CAF_CHECK_FAILED,CAF_CHECK_FAILandCAF_CHECK_PASSED.
0.18.3 - 2021-05-21
Added
- The
actor_system_confignow has an additional member calledconfig_file_path_alternatives. With this, users can configure fallback paths for locating a configuration file. For example, an applicationmy-appon a UNIX-like system could setconfig_file_pathtomy-app.confand then add/etc/my-app.conftoconfig_file_path_alternativesin order to follow the common practice of looking into the current directory first before looking for a system-wide configuration file.
Changed
- Counters in histogram buckets are now always integers, independently on the value type of the histogram. Buckets can never increase by fractional values.
Deprecated
- All
parsefunction overloads inactor_system_configthat took a custom configuration file path as argument were deprecated in favor of consistently asking users to use theconfig_file_pathandconfig_file_path_alternativesmember variables instead
Fixed
- For types that offer implicit type conversion, trying to construct a
result<T>could result in ambiguity since compilers could construct eitherTitself orexpected<T>for calling a constructor ofresult<T>. To fix the ambiguity,result<T>now accepts any type that allows constructing aTinternally without requiring a type conversion toTas an argument (#1245). - Fix configuration parameter lookup for the
work-stealingscheduler policy. - Applications that expose metrics to Prometheus properly terminate now.
0.18.2 - 2021-03-26
Added
- CAF includes two new inspector types for consuming and generating
JSON-formatted text:
json_writerandjson_reader.
Changed
- Setter functions for fields may now return either
bool,caf::errororvoid. Previously, CAF only allowedbool.
Fixed
- Passing a getter and setter pair to an inspector via
applyproduced a compiler error for non-builtin types. The inspection API now recursively inspects user-defined types instead, as was the original intend (#1216). - The handle type
typed_actornow can construct from atyped_actor_pointer. This resolves a compiler error when trying to initialize a handle formy_handlefrom a self pointer of typemy_handle::pointer_view(#1218). - Passing a function reference to the constructor of an actor caused a compiler
error when building with logging enabled. CAF now properly handles this edge
case and logs such constructor arguments as
<unprintable>(#1229). - The CLI parser did not recognize metrics filters. Hence, passing
--caf.metrics-filters.actors.includes=...to a CAF application resulted in an error. Theincludesandexcludesfilters are now consistently handled and accepted in config files as well as on the command line (#1238). - Silence a deprecated-enum-conversion warning for
std::byte(#1230). - Fix heap-use-after-free when accessing the meta objects table in applications
that leave the
mainfunction while the actor system and its worker threads are still running (#1241). - The testing DSL now properly accounts for the message prioritization of actors
(suspending regular behavior until receiving the response) when using
request.await(#1232).
0.18.1 - 2021-03-19
Fixed
- Version 0.18.0 introduced a regression on the system parameter
caf.middleman.heartbeat-interval(#1235). We have addressed the issue by porting the original fix for CAF 0.17.5 (#1095) to the 0.18 series.
0.18.0 - 2021-01-25
Added
- The enum
caf::secreceived an additional error code:connection_closed. - The new
byte_spanandconst_byte_spanaliases provide convenient definitions when working with sequences of bytes. - The base metrics now include four new histograms for illuminating the I/O
module:
caf.middleman.inbound-messages-size,caf.middleman.outbound-messages-size,caf.middleman.deserialization-timeandcaf.middleman.serialization-time. - The macro
CAF_ADD_TYPE_IDnow accepts an optional third parameter for allowing users to override the default type name. - The new function pair
get_asandget_ormodel type conversions on aconfig_value. For example,get_as<int>(x)would convert the content ofxto anintby either casting numeric values toint(with bound checks) or trying to parse the input ofxif it contains a string. The functionget_oralready existed forsettings, but we have added new overloads for generalizing the function toconfig_valueas well. - The
typed_response_promisereceived additional member functions to mirror the interface of the untypedresponse_promise. - Configuration files now allow dot-separated notation for keys. For example,
users may write
caf.scheduler.max-threads = 4instead of the nested formcaf { scheduler { max-threads = 4 } }.
Deprecated
- The new
get_asandget_orfunction pair makes type conversions on aconfig_valueviaget,get_if, etc. obsolete. We will retain the STL-style interface for treating aconfig_valueas avariant-like type.
Changed
- When using
CAF_MAIN, CAF now looks for the correct default config file name, i.e.,caf-application.conf. - Simplify the type inspection API by removing the distinction between
apply_objectandapply_value. Instead, inspectors only offerapplyand users may now also callmap,list, andtuplefor unboxing simple wrapper types. Furthermore, CAF no longer automatically serializes enumeration types using their underlying value because this is fundamentally unsafe. - CAF no longer parses the input to string options on the command line. For
example,
my_app '--msg="hello"'results in CAF storing"hello"(including the quotes) for the config optionmsg. Previously, CAF tried to parse any string input on the command-line that starts with quotes in the same way it would parse strings from a config file, leading to very unintuitive results in some cases (#1113). - Response promises now implicitly share their state when copied. Once the
reference count for the state reaches zero, CAF now produces a
broken_promiseerror if the actor failed to fulfill the promise by calling eitherdispatchordelegate.
Fixed
- Setting an invalid credit policy no longer results in a segfault (#1140).
- Version 0.18.0-rc.1 introduced a regression that prevented CAF from writing parameters parsed from configuration files back to variables. The original behavior has been restored, i.e., variables synchronize with user input from configuration files and CLI arguments (#1145).
- Restore correct functionality of
middleman::remote_lookup(#1146). This fixes a regression introduced in version 0.18.0-rc.1 - Fixed an endless recursion when using the
default_inspectorfrominspectoverloads (#1147). - CAF 0.18 added support for
make_behaviorin state classes. However, CAF erroneously picked this member function over running the function body when spawning function-based actors (#1149). - When passing
nullptror custom types with implicit conversions toconst char*todeep_to_string, CAF could run into a segfault in the former case or do unexpected things in the latter case. The stringification inspector now matches precisely on pointer types to stop the compiler from doing implicit conversions in the first place. - Building executables that link to CAF on 32-bit Linux versions using GCC
failed due to undefined references to
__atomic_fetchsymbols. Adding a CMake dependency forcaf_coreto libatomic gets executables to compile and link as expected (#1153). - Fixed a regression for remote groups introduced in 0.18.0-rc.1 (#1157).
- CAF 0.18 introduced the option to set different
excluded-componentsfilters for file and console log output. However, CAF rejected all events that matched either filter. The new implementation uses the intersection of both filters to reject log messages immediately (before enqueueing it to the logger's queue) and then applies the filters individually when generating file or console output. - Fix memory leaks when deserializing URIs and when detaching the content of messages (#1160).
- Fix undefined behavior in
string_view::compare(#1164). - Fix undefined behavior when passing
--config-file=(i.e., without actual argument) to CAF applications (#1167). - Protect against self-assignment in a couple of CAF classes (#1169).
- Skipping high-priority messages resulted in CAF lowering the priority to normal. This unintentional demotion has been fixed (#1171).
- Fix undefined behavior in the experimental datagram brokers (#1174).
- Response promises no longer send empty messages in response to asynchronous messages.
CAF_ADD_TYPE_IDnow works with types that live in namespaces that also exist as nested namespace in CAF such asdetailorio(#1195).- Solved a race condition on detached actors that blocked ordinary shutdown of actor systems in some cases (#1196).
0.18.0-rc.1 - 2020-09-09
Added
- The new
fan_out_requestfunction streamlines fan-out/fan-in work flows (see the new example inexamples/message_passing/fan_out_request.cppas well as the new manual entry). The policy-based design further allows us to support more use cases in the future (#932, #964). - We introduced the lightweight template class
error_codeas an alternative to the generic but more heavyweight classerror. The new error code abstraction simply wraps an enumeration type without allowing users to add additional context such as error messages. However, whenever such information is unneeded, the new class is much more efficient than usingerror. - Tracing messages in distributed systems is a common practice for monitoring
and debugging message-based systems. The new
tracing_dataabstraction in CAF enables users to augment messages between actors with arbitrary meta data. This is an experimental API that requires building CAF with the CMake optionCAF_ENABLE_ACTOR_PROFILER(#981). - Add compact
from..to..steplist notation in configuration files. For example,[1..3]expands to[1, 2, 3]and[4..-4..-2]expands to[4, 2, 0, -2, -4](#999). - Allow config keys to start with numbers (#1014).
- The
fan_out_requestfunction got an additional policy for picking just the fist result:select_any(#1012). - Run-time type information in CAF now uses 16-bit type IDs. Users can assign
this ID by specializing
type_idmanually (not recommended) or use the new API for automatically assigning ascending IDs insideCAF_BEGIN_TYPE_ID_BLOCKandCAF_END_TYPE_ID_BLOCKcode blocks. - The new typed view types
typed_message_viewandconst_typed_message_viewmake working withmessageeasier by providing astd::tuple-like interface (#1034). - The class
exit_msgfinally got its missingoperator==(#1039). - The class
node_idreceived an overload forparseto allow users to convert the output ofto_stringback to the original ID (#1058). - Actors can now
monitoranddemonitorCAF nodes (#1042). Monitoring a CAF node causes the actor system to send anode_down_msgto the observer when losing connection to the monitored node. - In preparation of potential future API additions/changes, CAF now includes an
RFC4122-compliant
uuidclass. - The new trait class
is_error_code_enumallows users to enable conversion of custom error code enums toerroranderror_code. - CAF now enables users to tap into internal CAF metrics as well as adding their own instrumentation! Since this addition is too large to cover in a changelog entry, please have a look at the new Metrics Section of the manual to learn more.
Deprecated
- The
to_stringoutput forerrornow renders the error code enum by default. This renders the member functionsactor_system::renderandactor_system_config::renderobsolete. - Actors that die due to an unhandled exception now use
sec::runtime_errorconsistently. This makesexit_reason::unhandled_exceptionobsolete.
Changed
- CAF now requires C++17 to build.
- On UNIX, CAF now uses visibility hidden by default. All API functions and types that form the ABI are explicitly exported using module-specific macros. On Windows, this change finally enables building native DLL files.
- We switched our coding style to the C++17 nested namespace syntax.
- CAF used to generate the same node ID when running on the same machine and only differentiates actors systems by their process ID. When running CAF instances in a container, this process ID is most likely the same for each run. This means two containers can produce the same node ID and thus equivalent actor IDs. In order to make it easier to use CAF in a containerized environment, we now generate unique (random) node IDs (#970).
- We did a complete redesign of all things serialization. The central class
data_processorgot removed. The two classes for binary serialization no longer extend the generic interfacesserializeranddeserializerin order to avoid the overhead of dynamic dispatching as well as the runtime cost oferrorreturn values. This set of changes leads so some code duplication, because many CAF types now accept a generic(de)serializeras well as abinary_(de)serializerbut significantly boosts performance in the hot code paths of CAF (#975). - With C++17, we no longer support compilers without support for
thread_local. Consequently, we removed all workarounds and switched to the C++ keyword (#996). - Our manual now uses
reStructuredTextinstead ofLaTeX. We hope this makes extending the manual easier and lowers the barrier to entry for new contributors. - A
stateful_actornow forwards excess arguments to theStaterather than to theBase. This enables states with non-default constructors. When usingstateful_actor<State>as pointer type in function-based actors, nothing changes (i.e. the new API is backwards compatible for this case). However, callingspawn<stateful_actor<State>>(xs...)now initializes theStatewith the argument packxs...(plus optionally aselfpointer as first argument). Furthermore, the state class can now provide amake_behaviormember function to initialize the actor (this has no effect for function-based actors). - In order to stay more consistent with naming conventions of the standard
library, we have renamed some values of the
pecenumeration:illegal_escape_sequence=>invalid_escape_sequenceillegal_argument=>invalid_argumentillegal_category=>invalid_category
- CAF no longer automagically flattens
tuple,optional, orexpectedwhen returning these types from message handlers. Users can simply replacestd::tuple<A, B, C>withcaf::result<A, B, C>for returning more than one value from a message handler. - A
caf::resultcan no longer representskip. Whether a message gets skipped or not is now only for the default handler to decide. Consequently, default handlers now returnskippable_resultinstead ofresult<message>. A skippable result is a variant overdelegated<message>,message,error, orskip_t. The only good use case for message handlers that skip a message in their body was in typed actors for getting around the limitation that a typed behavior always must provide all message handlers (typed behavior assume a complete implementation of the interface). This use case received direct support: constructing a typed behavior withpartial_behavior_initas first argument suppresses the check for completeness. - In order to reduce complexity of typed actors, CAF defines interfaces as a set
of function signatures rather than using custom metaprogramming facilities.
Function signatures must always wrap the return type in a
result<T>. For example:typed_actor<result<double>(double)>. We have reimplemented the metaprogramming facilitiesracts_to<...>andreplies_to<...>::with<...>as an alternative way of writing the function signature. - All parsing functions in
actor_system_configthat take an input stream exclusively use the new configuration syntax (please consult the manual for details and examples for the configuration syntax). - The returned string of
name()must not change during the lifetime of an actor. Hence,stateful_actornow only considers staticnamemembers in itsStatefor overriding this function. CAF always assumed names belonging to types, but did not enforce it because the name was only used for logging. Since the new metrics use this name for filtering now, we enforce static names in order to help avoid hard-to-find issues with the filtering mechanism. - The type inspection API received a complete overhaul. The new DSL for writing
inspectfunctions exposes the entire structure of an object to CAF. This enables inspectors to read and write a wider range of data formats. In particular human-readable, structured data such as configuration files, JSON, XML, etc. The inspection API received too many changes to list them here. Please refer to the manual section on type inspection instead.
Removed
- A vendor-neutral API for GPGPU programming sure sounds great. Unfortunately,
OpenCL did not catch on in the way we had hoped. At this point, we can call
OpenCL dead and gone. There is only legacy support available and recent
versions of the standard were never implemented in the first place.
Consequently, we've dropped the
openclmodule. - The old
durationtype is now superseded bytimespan(#994). - The enum
match_resultbecame obsolete. Individual message handlers can no longer skip messages. Hence, message handlers can only succeed (match) or not. Consequently, invoking a message handler or behavior now returns a boolean. - All member functions of
scheduled_actorfor adding stream managers (such asmake_source) were removed in favor their free-function equivalent, e.g.,attach_stream_source - The configuration format of CAF has come a long way since first starting to
allow user-defined configuration via
.inifiles. Rather than sticking with the weird hybrid that evolved over the years, we finally get rid of the last pieces of INI syntax and go with the much cleaner, scoped syntax. The new default file name for configuration files iscaf-application.conf.
Fixed
- Fix uninstall target when building CAF as CMake subdirectory.
- Using
inline_all_enqueuesin deterministic unit tests could result in deadlocks when calling blocking functions in message handlers. This function now behaves as expected (#1016). - Exceptions while handling requests now trigger error messages (#1055).
- The member function
demonitorfalsely refused typed actor handles. Actors could monitor typed actors but not demonitoring it again. This member function is now a template that accepts any actor handle in the same waymonitoralready did. - The
typed_actor_viewdecorator lacked several member functions such aslink_to,send_exit, etc. These are now available. - Constructing a
typed_actorhandle from a pointer view failed du to a missing constructor overload. This (explicit) overload now exists and the conversion should work as expected. - Sending floating points to remote actors changed
infinityandNaNto garbage values (#1107). The fixed packing / unpacking routines for IEEE 754 values keep these non-numeric values intact now. It is worth mentioning that the new algorithm downgrades signaling NaN values to silent NaN values, because the standard API does not provide predicates to distinguish between the two. This should have no implications for real-world applications, because actors that produce a signaling NaN trigger trap handlers before sending the result to another actor. - The URI parser stored IPv4 addresses as strings (#1123). Users can now safely
assume that the parsed URI for
tcp://127.0.0.1:8080returns an IP address when callingauthority().host.
0.17.7 - Unreleased
Fixed
- Datagram servants of UDP socket managers were not added as children to their parent broker on creation, which prevented proper system shutdown in some cases. Adding all servants consistently to the broker should make sure UDP brokers terminate correctly (#1133).
- Backport stream manager fix from CAF 0.18 for fused downstream managers that prevent loss of messages during regular actor shutdown.
0.17.6 - 2020-07-24
Fixed
- Trying to connect to an actor published via the OpenSSL module with the I/O module no longer hangs indefinitely (#1119). Instead, the OpenSSL module immediately closes the socket if initializing the SSL session fails.
0.17.5 - 2020-05-13
Added
- In order to allow users to start migrating towards upcoming API changes, CAF
0.17.5 includes a subset of the CAF 0.18
type_idAPI. Listing all user-defined types betweenCAF_BEGIN_TYPE_ID_BLOCKandCAF_END_TYPE_ID_BLOCKassigns ascending type IDs. Only one syntax forCAF_ADD_ATOMexists, since the atom text is still mandatory. Assigning type IDs has no immediate effect by default. However, the new functionactor_system_config::add_message_typesaccepts an ID block and adds runtime-type information for all types in the block. - In order to opt into the compile-time checks for all message types, users can
set the
CAF_ENABLE_TYPE_ID_CHECKSCMake flag toON(pass--enable-type-id-checkswhen using theconfigurescript). Building CAF with this option causes compiler errors when sending a type without a type ID. This option in conjunction with the newadd_message_typesfunction removes a common source of bugs: forgetting to calladd_message_type<T>for all types that can cross the wire.
Changed
- Our manual now uses
reStructuredTextinstead ofLaTeX(backport from 0.18.0).
Fixed
- Fix handling of OS-specific threading dependency in CMake.
- Fix uninstall target when building CAF as CMake subdirectory (backport from 0.18.0).
- Fix potential deadlock with
inline_all_enqueues(backport from 0.18.0). - Exceptions while handling requests now trigger error messages (backport from 0.18.0).
- Fix build on GCC 7.2
- Fix build error in the OpenSSL module under some MSVC configurations
- Serializer and deserializer now accept
std::chrono::time_pointfor all clock types instead of hard-wiringstd::system_clock. - In some edge cases, actors failed to shut down properly when hosting a stream source (#1076). The handshake process for a graceful shutdown has been fixed.
- Fixed a compiler error on Clang 10 (#1077).
- Setting lists and dictionaries on the command line now properly overrides default values and values from configuration files instead of appending to them (#942).
- Using unquoted strings in command-line arguments inside lists now works as
expected. For example,
--foo=abc,defis now equivalent to--foo=["abc", "def"]. - Fixed a type mismatch in the parameter
middleman.heartbeat-interval(#1095). CAF consistently usestimespanfor this parameter now.
0.17.4 - 2019-02-08
Added
- The class
exit_msgfinally got its missingoperator==(#1039, backport from 0.18.0).
Changed
- Make sure actors that receive stream input shut down properly (#1019).
- Improve
to_stringoutput forcaf::error(#1021). - Properly report errors to users while connecting two CAF nodes (#1023).
- Simplify crosscompilation: remove build dependency on code generators (#1026).
- Leave CXX settings to the (CMake) parent when building as subdirectory (#1032).
- Build without documentation in subdirectory mode (#1037).
- Allow parents to set
OPENSSL_INCLUDE_DIRin subdirectory mode (#1037). - Add
-pthreadflag on UNIX when looking forlibc++support (#1038). - Avoid producing unexpected log files (#1024).
Fixed
- Accept numbers as keys in the config syntax (#1014).
- Fix undesired function hiding in
fused_downstream_manager(#1020). - Fix behavior of
inline_all_enqueuesin the testing DSL (#1016). - Fix path recognition in the URI parser, e.g.,
file:///is now valid (#1013).
0.17.3 - 2019-11-11
Added
- Add support for OpenBSD (#955).
- Provide uniform access to actor properties (#958).
- Add missing
to_string(pec)(#940).
Fixed
- Fix bug in stream managers that caused finalizers to get called twice (#937).
- Fix verbosity level with disabled console output (#953).
- Fix excessive buffering in stream stages (#952).
0.17.2 - 2019-10-20
Added
- Add
scheduled_sendfor delayed sends with absolute timeout (#901). - Allow actors based on composable behaviors to use the streaming API (#902).
- Support arbitrary list and map types in
config_value(#925). - Allow users to extend the
config_valueAPI (#929, #938).
Changed
- Reduce stack usage of serializers (#912).
- Use default installation directories on GNU/Linux (#917).
Fixed
- Fix memory leak when deserializing
node_id(#905). - Fix composition of statically typed actors using streams (#908).
- Fix several warnings on GCC and Clang (#915).
- Fix
holds_alternativeandget_ifforsettings(#920). - Fix silent dropping of errors in response handlers (#935).
- Fix stall in
remote_groupon error (#933).
0.17.1 - 2019-08-31
Added
- Support nesting of group names in .ini files (#870).
- Support all alphanumeric characters in config group names (#869).
Changed
- Improve CMake setup when building CAF as subfolder (#866).
- Properly set CLI remainder (#871).
Fixed
- Fix endless loop in config parser (#894).
- Fix debug build with Clang 7 on Linux (#861).
- Fix type-specific parsing of config options (#814).
- Fix potential deadlock in proxy registry (#880).
- Fix output of --dump-config (#876).
- Fix potential segfault when using streams with trace logging enabled (#878).
- Fix handling of containers with user-defined types (#867).
- Fix
defaulted_function_deletedwarning on Clang (#859).
0.17.0 - 2019-07-27
Added
- Add marker to make categories optional on the CLI. Categories are great at
organizing program options. However, on the CLI they get in the way quickly.
This change allows developers to prefix category names with
?to make it optional on the CLI. - Add conversion from
nullptrto intrusive and COW pointer types. - Support move-only behavior functions.
- Allow users to omit
globalin config files. - Allow IPO on GCC/Clang.
Changed
- Parallelize deserialization of messages received over the network (#821). Moving the deserialization out of the I/O loop significantly increases performance. In our benchmark, CAF now handles up to twice as many messages per second.
- Relax ini syntax for maps by making
=for defining maps and,for separating key-value pairs optional. For example, this change allows to rewrite an entry like this:
to a slightly less noisy version such as this:logger = { console-verbosity='trace', console='colored' }logger { console-verbosity='trace' console='colored' } - Allow apps to always use the
logger, whether or not CAF was compiled with logging enabled. - Streamline direct node-to-node communication and support multiple app identifiers.
- Reimplement
binary_serializerandbinary_deserializerwithout STL-style stream buffers for better performance.
Fixed
- Fix performance of the thread-safe actor clock (#849). This clock type is used whenever sending requests, delayed messages, receive timeouts etc. With this change, CAF can handle about 10x more timeouts per second.
- Fix multicast address detection in
caf::ipv4_address.cpp(#853). - Fix disconnect issue / WSAGetLastError usage on Windows (#846).
- Fix
--config-fileoption (#841). - Fix parsing of CLI arguments for strings and atom values.
0.16.5 - 2019-11-11
Added
- Support for OpenBSD.
0.16.4 - 2019-11-11
Fixed
- Backport parser fixes from the CAF 0.17 series.
- Silence several compiler warnings on GCC and Clang.
0.16.3 - 2018-12-27
Added
- The new class
cow_tupleprovides anstd::tuple-like interface for a heap-allocated, copy-on-write tuple. - Missing overloads for
dictionary. - The new
to_lowercasefunction for atoms allows convenient conversion without having to convert between strings and atoms.
Changed
- Printing timestamps now consistently uses ISO 8601 format.
- The logger now uses a bounded queue. This change in behavior will cause the application to slow down when logging faster than the logger can do I/O, but the queue can no longer grow indefinitely.
- Actors now always try to dequeue from the high-priority queue first.
Fixed
- Solved linker errors related to
socket_guardin some builds. - Fix the logger output for class names.
- Deserializing into non-empty containers appended to the content instead of overriding it. The new implementation properly clears the container before filling it.
- The
splitfunction from the string algorithms header now works as the documentation states. - Silence several compiler warnings on GCC and Clang.
0.16.2 - 2018-11-03
Fixed
- The copy-on-write pointer used by
messagefailed to release memory in some cases. The resulting memory leak is now fixed.
0.16.1 - 2018-10-31
Added
- Adding additional flags for the compiler when using the
configurescript is now easier thanks to the--extra-flags=option. - The actor clock now supports non-overriding timeouts.
- The new
intrusive_cow_ptris a smart pointer for copy-on-write access.
Changed
- Improve
noexcept-correctness ofvariant. - CAF threads now have recognizable names in a debugger.
- The middleman now passes
CLOEXEConsocket/accept/pipecalls. - Users can now set the log verbosity for file and console output separately.
Fixed
- A
dictionarynow properly treats C-strings as strings when usingemplace. - Eliminate a potential deadlock in the thread-safe actor clock.
- Added various missing includes and forward declarations.
0.16.0 - 2018-09-03
Added
- As part of CE-0002,
config_valuereceived support for lists, durations and dictionaries. CAF now exposes the content of an actor system config as a dictionary ofconfig_value. The free functionget_oroffers convenient access to configuration parameters with hard-coded defaults as fallback. - The C++17-compatible
string_viewclass enables us to make use of recent standard addition without having to wait until it becomes widely available. - In preparation of plans for future convenience API, we've added
uriaccording to RFC 3986 as well asipv6_addressandipv4_address. - A new, experimental streaming API. Please have a look at the new manual section for more details.
Deprecated
- Going forward, the preferred way to access configuration parameters is using
the new
get_orAPI. Hence, these member variables are now deprecated inactor_system_config:scheduler_policyscheduler_max_threadsscheduler_max_throughputscheduler_enable_profilingscheduler_profiling_ms_resolutionscheduler_profiling_output_filework_stealing_aggressive_poll_attemptswork_stealing_aggressive_steal_intervalwork_stealing_moderate_poll_attemptswork_stealing_moderate_steal_intervalwork_stealing_moderate_sleep_duration_uswork_stealing_relaxed_steal_intervalwork_stealing_relaxed_sleep_duration_uslogger_file_namelogger_file_formatlogger_consolelogger_console_formatlogger_verbositylogger_inline_outputmiddleman_network_backendmiddleman_app_identifiermiddleman_enable_automatic_connectionsmiddleman_max_consecutive_readsmiddleman_heartbeat_intervalmiddleman_detach_utility_actorsmiddleman_detach_multiplexermiddleman_cached_udp_buffersmiddleman_max_pending_msgs
Removed
- The
boost::asiowas part of an initiative to contribute CAF asboost::actor. Since there was little interest by the Boost community, this backend now serves no purpose.
Fixed
- Setting the log level to
quietnow properly suppresses any log output. - Configuring colored terminal output should now print colored output.