Subject: [boost] [review] FSM Library review result
From: Martin Vuille (martin_at_[hidden])
Date: 2008-09-15 11:24:10
This is a summary of the comments received during the
review of Andrey Semashev's Finite State Machines (FSM)
library. Apologies for the delay in getting these out.
* Relocate ToC to make it stand out.
* Several people used the Wikipedia article
a reference for FSM terminology and operation, and
found discrepancies between Boost.FSM and that description.
Perhaps Boost.FSM should explicitly describe its FSM
metamodel, or refer to an existing metamodel (Wikipedia
FSM or Harel or UML Statechart, for example). The latter
was mentioned several times as being preferred since it
is a standard.
* If possible, use standard terminology. For example,
"transition map" vs. "state transition table". Or
define the non-standard terms.
* Include a comprehensive rationale mapping the design
choices to the design objectives.
* Compare/contrast Boost.FSM with the FSM implementation
as described in "C++ Template Metaprogramming".
* Add an example of event deferral using boost::function.
* Clarify support for multithreading vs. asynchronous FSM,
as some were confused by existing text.
* Clarify lifetime of objects.
* Add implementation of example using transition map/STT.
* Add more complex example(s).
These were features that were suggested or asked about.
Some or all may not be suited for addition to the library.
In that event, it may be useful to explicitly mention in
the documentation that they are not supported, and why.
* Support nested states. Return-to-history was cited as
an example of a benefit of nested states over nested FSM.
* In STT, support matching "any" from state.
* Add syntactic sugar to support "synthetic" states (cf.
* Support event deferral.
* Support data-dependent transitions (perhaps this is the
same as the synthetic state suggestion above).
* Improve modeling of the "transition" concept. Specifically,
there was an issue with the fact that the action was
associated with a state rather than a transition.
* There was a lot of discussion comparing the amount of code
required to implement an "ad hoc" FSM, vs. the amount of
code required to implement the same FSM using Boost.FSM.
* The "transition map" representation was deemed to contain
too much syntactic noise and not sufficiently similar to
a traditional STT, and it was suggested that it should
include the transition action.
* Some felt that the interface was too procedural rather than
* There was quite a bit of discussion of the Boost.FSM
implementation vs. the C++TM implementation, but I don't
believe there were any specific conclusions reached.
* Handling of event is different depending on whether or not
transition map is used (handled by "to" state vs. current
state, respectively). This is also the case when an event
is not found in the transition map. This could lead to
Thanks again to Andrey for his submission and to all the
reviewers and other who made comments for their input.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk