[Boost].SML vs Boost.MSM-eUML vs Boost.Statechart
Features
Overview
| Library | [Boost].SML | Boost.MSM-eUML | Boost.Statechart |
| Standard | C++14 | C++98/03 | C++98/03 |
| Version | 1.0.1 | 1.61 | 1.61 |
| License | Boost 1.0 | Boost 1.0 | Boost 1.0 |
| Linkage | header only | header only | header only |
Details
| Library | [Boost].SML | Boost.MSM-eUML | Boost.Statechart |
| UML | 2.0 | 2.0 | 1.5 |
| RTTI | - | - | ✓ |
| Exceptions | - | - | ✓ |
| Memory Allocations | - | - | ✓ |
UML features
| Library | [Boost].SML | Boost.MSM-eUML | Boost.Statechart |
| Transition | ✓ | ✓ | ✓ |
| Anonymous transition | ✓ | ✓ | ✓ |
| Internal transition | ✓ | ✓ | ✓ |
| Local transitions | - | - | - |
| State entry/exit | ✓ | ✓ | ✓ |
| Guard | ✓ | ✓ | ✓ |
| Action | ✓ | ✓ | ✓ |
| Event defering | ~ | ✓ | ✓ |
| Error handling | ✓ | ✓ | ✓ |
| Initial state | ✓ | ✓ | ✓ |
| Terminate State | ✓ | ✓ | ✓ |
| Explicit entry | ✓ | ✓ | ✓ |
| Explicit exit | - | ✓ | ✓ |
| Fork | - | ✓ | - |
| Orthogonal regions | ✓ | ✓ | ✓ |
| Sub / Composite | ✓ | ✓ | ✓ |
| Shallow History | ✓ | ✓ | ✓ |
| Deep History | ~ | ~ | ✓ |
Non-UML features
| Library | [Boost].SML | Boost.MSM-eUML | Boost.Statechart |
| Any event | - | ✓ | - |
| Flags | - | ✓ | - |
| Interrupt state | - | ✓ | - |
| State Visitor | ✓ | ✓ | ✓ |
| Serialization | - | ✓ | - |
| Dispatcher | ✓ | - | - |
| Asynchronous SM | - | - | ✓ |
Benchmarks
| Test | CXXFLAGS | Events | States | Transitions | Process Events |
| Simple Test | -O2 -s, /Ox | 6 | 5 | 12 | 1'000'000 |
| Clang-3.7 | [Boost].SML | [Boost.MSM-eUML] | [Boost.MSM3-eUML2] | [Boost.Statechart] |
| Compilation time | 0.144s | 3.855s | 8.699s | 1.028s |
| Execution time | 15ms | 17ms | 17ms | 1232ms |
| Memory usage | 1b | 32b | 28b | 200b |
| Executable size | 11K | 91K | 15K + boost_system | 59K |
| GCC-5.2 | [Boost].SML | [Boost.MSM-eUML] | [Boost.MSM3-eUML2] | [Boost.Statechart] |
| Compilation time | 0.175s | 7.879s | 17.101s | 1.790s |
| Execution time | 15ms | 19ms | 21ms | 929ms |
| Memory usage | 1b | 32b | 28b | 224b |
| Executable size | 11K | 67K | 15K + boost_system | 63K |
| MSVC-2015 | [Boost].SML | [Boost.MSM-eUML] | [Boost.MSM3-eUML2] | [Boost.Statechart] |
| Compilation time | 0.450s | | | |
| Execution time | 27ms | | | |
| Memory usage | 16b | | | |
| Executable size | 206K | | | |
| Test | CXXFLAGS | Events | States | Transitions | Process Events |
| Composite Test | -O2 -s, /Ox | 8 | 5 + 3 | 12 + 4 | 1'000 * 1'000 |
| Clang-3.7 | [Boost].SML | [Boost.MSM-eUML] | [Boost.MSM3-eUML2] | [Boost.Statechart] |
| Compilation time | 0.184s | 4.526s | 10.599s | 1.293s |
| Execution time | 10ms | 14ms | 10ms | 491ms |
| Memory usage | 2b | 60b | 52b | 200b |
| Executable size | 15K | 111K | 15K + boost_system | 83K |
| GCC-5.2 | [Boost].SML | [Boost.MSM-eUML] | [Boost.MSM3-eUML2] | [Boost.Statechart] |
| Compilation time | 0.248s | 9.363s | 23.404s | 2.037s |
| Execution time | 9ms | 13ms | 12ms | 404ms |
| Memory usage | 2b | 60b | 52b | 224b |
| Executable size | 12K | 91K | 15K + boost_system | 83K |
| MSVC-2015 | [Boost].SML | [Boost.MSM-eUML] | [Boost.MSM3-eUML2] | [Boost.Statechart] |
| Compilation time | 0.599s | | | |
| Execution time | 21ms | | | |
| Memory usage | 23b | | | |
| Executable size | 224K | | | |
| Test | CXXFLAGS | Events | States | Transitions | Process Events |
| Complex Test | -O2 -s, /Ox | 50 | 50 | 50 | 1'000'000 |
| Clang-3.7 | [Boost].SML | [Boost.MSM-eUML] | [Boost.MSM3-eUML2] | [Boost.Statechart] |
| Compilation time | 0.582s | 1m15.935s | 43.341s | 3.661s |
| Execution time | 69ms | 81ms | 78ms | 6221ms |
| Memory usage | 1b | 120b | 72b | 200b |
| Executable size | 35K | 611K | 31K + boost_system | 343K |
| GCC-5.2 | [Boost].SML | [Boost.MSM-eUML] | [Boost.MSM3-eUML2] | [Boost.Statechart] |
| Compilation time | 0.816s | 52.238s | 1m41.045s | 4.997s |
| Execution time | 72ms | 77ms | 91ms | 5520ms |
| Memory usage | 1b | 120b | 72b | 224b |
| Executable size | 35K | 271K | 47K + boost_system | 215K |
| MSVC-2015 | [Boost].SML | [Boost.MSM-eUML] | [Boost.MSM3-eUML2] | [Boost.Statechart] |
| Compilation time | 1.891s | | | |
| Execution time | 166ms | | | |
| Memory usage | 104b | | | |
| Executable size | 224K | | | |
| Test | | ---- | |Header Test |
| Clang-3.7 | [Boost].SML | [Boost.MSM-eUML] | [Boost.MSM3-eUML2] | [Boost.Statechart] |
| Compilation time | 0.060s | 2.072s | 2.504s | 0.552s |
| GCC-5.2 | [Boost].SML | [Boost.MSM-eUML] | [Boost.MSM3-eUML2] | [Boost.Statechart] |
| Compilation time | 0.073s | 3.197s | 3.986s | 0.704s |
| MSVC-2015 | [Boost].SML | [Boost.MSM-eUML] | [Boost.MSM3-eUML2] | [Boost.Statechart] |
| Compilation time | 0.182s | | | |
cd benchmark && make # make benchmark_simple benchmark_composite benchmark_complex