Next Gen BSC

Big Idea

Fork Statechart then rewrite using more recent C++ version (11, 14, 17).

Replacing MPL

This will require replacing MPL. Current favorite is mp11

Goal: Improve Compiler Error Msgs



  • Using Clang
  • Static Asserts? Based on most common error use cases. Which for state machine is probably “Who is your parent?” “Did you forget to specify your parent?” etc.

For use case of state not correctly listing it’s context. Static Assert?

We attempted this around 12/2019, but unfortunately our changes were compiled after boost.statechart, which made our attempts futile. Anyways, we tried.

Goal: Add type checking support for SMACC Substate Objects

Also, we’ll add type checking support for Orthogonals, Clients, Client Behaviors and other SMACC Substate Objects.

  • transition from an orthogonal that doesn’t exist
  • transition from a client behavior that doesn’t exist
  • transition from a client that doesn’t exist
  • transition from a state reactor that doesn’t exist
  • transition from a choice point that doesn’t exist
  • cb from a client that doesn’t exist

We tried to do this (at runtime) around 12/2019 but we stopped after coming to the conclusion that the library is too immature for us to start shutting off portions of the library. So we decided to push but comment out the changes for now.

Goal: Add Performance Instrumentation

We’ll add intrumentation, via LTTng. Mainly related to low level performance.


Goal: Then make it fast

Cutting what we don’t need, custom memory allocation, etc..

Goal: Get TypeDefwalker working at compile time

This would allow us to get state diagrams at compile time, which would be huge.

Interesting Possibilities to Consider

While we’re replacing/upgrading BSC, we should look at some dream functionalities. Items to consider…

  • Vectors of States
  • Formulaic Transitions (beyond history)
  • Passing of Parameters into States