[erlang-questions] Proposal for new state machine engine: gen_statem

Raimo Niskanen raimo+erlang-questions@REDACTED
Fri Feb 19 16:43:55 CET 2016

On Wed, Feb 10, 2016 at 01:56:48PM +0100, Raimo Niskanen wrote:
> Hi all!
> I have created a pull request for a new state machine engine in the gen_*
> framework.  There is a heated discussion right now on GitHUB:
>     https://github.com/erlang/otp/pull/960
> Please contribute with an opinion.

I pushed some updates to the branch. Major changes:

* New return values from the state functions: {stop,Reason} |
  {keep_state,...} | {keep_state_and_data,...}. It turned out that the old
  [Op] was essential to an internal use case of ours and that can now be done
  with {keep_state_and_data,[Op]}.
* Change initial PrevState to undefined.
* Rewrite of terminology and types: state_data() -> data(), StateOp ::
  state_operation() -> Op :: transition_action() and more.
* Some more documentation cleanup

Two questions still remain:

* Should we change the return format from init/1 from
  {'ok',state(),data()} to {callback_mode(),state(),data()} and remove the
  init/enter_loop option {'callback_mode',callback_mode()}? I think I am for
  making the option mandatory this way or some similar.

* If there are multiple transaction_option() in a state function return
  Ops, which one shall win, the first or the last? Currently the last wins to
  harmonize with that all Ops are executed in list order so the last one
  overrides the previous. This way you can not override a value by consing it
  to the head of Ops - you will have to append it instead, which is a bit

The documentation still lack early examples, but hopefully the Description
is easier to understand now... Opinions on the current version, please?!

Updated documentation at:

Updated OTP 18.2 .beam files at:
  keep the original around.


/ Raimo Niskanen, Erlang/OTP, Ericsson AB

More information about the erlang-questions mailing list