StoneCypher / fsl

Finite State Language specification

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Transcompiler `targets` directive

StoneCypher opened this issue · comments

So one of the elephants in the herd in the room regarding transtargeting other state machines is the wild range of feature support betwixt.

image

Hooks and post-hooks in our comparison set are a great example:

  • 10/16 support specific hooks;
  • 7/16 (and partly a different set) support general hook;
  • 4/16 support post-hooks.

It would be a genuinely nasty surprise to build out a machine on a feature, only to discover that one of your transcompile targets doesn't support it.

It would be quite nice if you could declare early on "I intend to ship this to XState, Stent, ruby:state_machine, and boost:msm", and it warned you the second you started trying to use a property that no, ruby:state_machine doesn't do that

Something like

targets: [native:javascript native:typescript xstate stent c#:dotnet-state-machine];

Off -> Red 'next' => Green 'next' => Yellow 'next' => Red;
[Red Yellow Green] ~> Off;

And immediately on writing the last line, you should be warned that none of the target machines support forced-only edges.

Blocked by #566