Development Principles

High Performance

HFSM2 uses template meta-programming to generate optimal code for a given FSM topology.

It does not use performance-prohibitive dynamic allocation, virtual methods, complex algorithms.

The structural information is statically encoded into the FSM instance type, which removes the need for complex lookups, and internal bookkeeping logic can always access the required information directly.

Small Footprint

With memory access being the performance bottleneck on modern architectures, small data structures fit better in memory caches, not only resulting in better performance for the FSM instance itself, and also leaving more resources available to be used by the other parts of the host application.

Additionally, low memory requirements make HFSM2 a good fit for the memory-constrained environments including embedded systems and robotics.

Powerful Feature Set

HFSM2 evolution is driven by the development experience rather than dry mathematical theory.

The tools provided by the library are not restricted to conform to an external standard, and the ideas for the new features come from from both the solutions to the typical problems encountered in development, and competing decision making methodologies, including behavior trees, utility theory and AI planners.

No Artificial Limitations

HFSM2 will not hold you back following questionable conventions. It's goal is to empower the developer instead.

It does not support any artificial standards (including UML), but rather provides tools that make sense in a given setting.

There are no superfluous transition tables, beyond the one defined implicitly in your client code.