17 ms·
Boost.SML (which is experimental) has garnered a lot of attention lately as a modern take on C++ state machines that can replace both of the options you raised.
by nly 8y ago
Boost.SML (which is experimental) has garnered a lot of attention lately as a modern take on C++ state machines that can replace both of the options you raised.
https://boost-experimental.github.io/sml/ https://boost-experimental.github.io/sml/
Unfortunately I haven't seen any compelling real world usage of any of these libraries, and the documentation for SML leaves a lot to be desired.
- indiosmo 8y agoI have been using SML in production for a little over a year now without issues, mostly for protocol machines. I agree the documentation is not great though, you kind of have to go over the example code and try to figure things out on your own. Using embedded data for keeping state (e.g. counters, etc; see https://boost-experimental.github.io/sml/examples/index.html#data https://boost-experimental.github.io/sml/examples/index.html...) along with injecting std::functions to use as actions is pretty powerful. Here's a basic example I wrote some months ago showing a hierarchical machine (https://gist.github.com/indiosmo/08ab24181770125d5a2448d27f6ae99f https://gist.github.com/indiosmo/08ab24181770125d5a2448d27f6...). Also please note my usage is pretty basic as I usually have the same machine ported to C# and Python so I tend to use the smallest subset of functionality supported by all the libraries in each language.
- ephimetheus 8y agoI didn’t find a good way to handle unexpected events with SML. I know there is supposed to be a special catch all event which can do that, but that’s only for the case the event is not used in the entire FSM, which makes it pretty useless. Thinking of rolling my own based on std::variant now.
- analognoise 8y agoSeeing those examples made me realize how much I hate Modern C++, or just C++ in general. This is so belaboured; there's an abundance of what looks like line noise to me. It lacks any sense of grace whatsoever.
- lgeorget 8y agoThank you, indeed I was not aware of that one. I'll have a look.