[msm] Version 2.0 available

Dear Boosters, I'm happy to announce the review-ready new version of Msm (2.0). Msm is a framework which enables you to build a Finite State Machine in a straightforward, descriptive and easy-to-use manner. The generated code is optimized for speed and will force you to use neither RTTI nor anything virtual. Msm supports most of UML state machine features: - state entry/exit - transition actions/guards - composite states - history - orthogonal regions - terminate states - deferred events - explicit entry/fork - entry/exit pseudostates - anonymous transitions - transition conflicts and much more. Msm v2.0 is a redesign of Msm v1.20 and offers a separation beetween front- and back-ends. There is currently one backend and several frontends: - the same frontend as Msm v1.20 - a variation of this frontend based on functors for actions - eUML, a boost::proto-based compile-time language allowing you to use UML notations directly inside your code, thus making writing code from a state machine diagram easier. eUML also comes in with a functional programming library similar to Boost.Phoenix, adapted to state machines. I'll be happy for any comment. You can find Msm v2.0 in: - the vault (http://www.boostpro.com/vault/index.php?directory=Msm) - the boost sandbox (http://svn.boost.org/svn/boost/sandbox/msm/) The documentation can be found at libs/msm/doc/index.htm and the code in the boost/msm subdirectory. The 1.0 and 1.10 are now retired. To close up the 1.x path, I'll bring a 1.21 with the latest bugfixes and then retire the 1.20 from the vault. Best regards, Christophe

Christophe Henry wrote:
Dear Boosters,
I'm happy to announce the review-ready new version of Msm (2.0).
Congrats! So is this a review request? Nudge, nudge.
I had a quick peek, and it looks really very cool.
eUML also comes in with a functional programming library similar to Boost.Phoenix, adapted to state machines.
Do we really need another lambda? I hope that with a proto-based Phoenix, we can retire all the mini-lambdas that have been proliferating. (I'm guilty of this, too.) -- Eric Niebler BoostPro Computing http://www.boostpro.com

Christophe Henry wrote:
Msm v2.0 is a redesign of Msm v1.20 and offers a separation beetween front- and back-ends.
MSM 1.20 allowed writing a state machine with actions/guards which modify some external state. E.g. <code> struct MyStateMachine : public boost::msm::state_machine { MyStateMachine( SomeExternalContext & context ) : context_( context ) {} SomeExternalClass &context_; ....guards/actions which mess with 'context_'... }; </code> However with MSM 2.0 this becomes: <code> struct MyStateMachine_ : public msm::front::state_machine_def<MyStateMachine_> { MyStateMachine( SomeExternalClass & context ) : context_( context ) {} SomeExternalClass &context_; .... }; typedef msm::back::state_machine<MyStateMachine_> MyStateMachine; </code> I no longer instantiate the state machine directly and cannot pass parameters to constructor and it seems that msm::back::state_machine will not do this for me (after a quick glance at the definition it seemed to me that msm::back::state_machine expects its template parameter to be default constructible). Is this wrong or am I missing something obvious? Is there some way I could still achieve the old functionality? Thank you for the great library btw. :) TIA
participants (4)
-
Christophe Henry
-
Eric Niebler
-
Juraj Ivančić
-
Zachary Turner