1. Performance: >3x faster than Quickfix
We've had more fantastic improvements in encode/decode performance. For the same message, Fix8 encodes 3.2 times faster and decodes 2.3 times faster averaging 2.7 times over Quickfix. In other words, reduces encode latency by 69% and reduces decode latency by 56%. See Performance to see how we substantiate more of this shameless bragging.
2. Improvements to process modes
Fix8 now supports three process modes - pipelined, threaded and coroutines. As well as supporting threaded reader/writer with pipelining on or off, we we also want to support coroutine versions. With these versions, only a single thread of execution will exist per session, with the FIX reader, writer and application main loop all cooperatively sharing (scheduling) their work loads. In an ULL context this can deliver superior performance on a single interface with maximum cache coherency.
3. Summary of changes
- Fixed Jira tickets FX-57, FX-58, FX-59, FX-60, FX-61, FX-62, FX-63
- Logflags - support specific inbound and outbound flags for protocol logs
- Replace cfpopen with non GPL replacement
- Fixed compiler generated include guards do not work if alternate output directory specified.
- Fixed f8c compiler - can't specify output directory by "-o" as expected
- Remove header/trailer field lookups in encode and decode
- Fixed unit tests not building properly
- Add optional coroutine version of FIX reader and writer. The test client hftest can be run in coroutine mode to demonstrate how to use this feature. Coroutines will be documented in the wiki.