| # Why FastSignals? | |
| FastSignals is a C++17 signals/slots implementation which API is compatible with Boost.Signals2. | |
| FastSignals pros: | |
| * Faster than Boost.Signals2 | |
| * Has more compact binary code | |
| * Has the same API as Boost.Signals2 | |
| FastSignals cons: | |
| * Supports only C++17 compatible compilers: Visual Studio 2017, modern Clang, modern GCC | |
| * Lacks a few rarely used features presented in Boost.Signals2 | |
| * No access to connection from slot with `signal::connect_extended` method | |
| * No connected object tracking with `slot::track` method | |
| * Use [bind_weak](bind_weak.md) instead | |
| * No temporary signal blocking with `shared_connection_block` class | |
| * Cannot disconnect equivalent slots since no `disconnect(slot)` function overload | |
| * Any other API difference is a bug - please report it! | |
| See also [Migration from Boost.Signals2](migration-from-boost-signals2.md). | |
| ## Benchmark results | |
| Directory `tests/libfastsignals_bench` contains simple benchmark with compares two signal/slot implementations: | |
| * Boost.Signals2 | |
| * libfastsignals | |
| Benchmark compairs performance when signal emitted frequently with 0, 1 and 8 active connections. In these cases libfastsignals is 3-6 times faster. | |
| ``` | |
| *** Results: | |
| measure emit_boost emit_fastsignals | |
| emit_boost/0 1.00 3.00 | |
| emit_boost/1 1.00 5.76 | |
| emit_boost/8 1.00 3.70 | |
| *** | |
| ``` | |