是什么驱动你构建 NexusFIX?为什么不直接使用 QuickFIX?
QuickFIX 基于 2000 年代早期的 C++98/03 设计:虚函数分派、每消息堆分配、基于字符串的字段存储。这些模式从根本上与亚微秒延迟需求不兼容。我们从第一性原理出发,利用 QuickFIX 设计时不存在的 C++23 能力重新构建。
NexusFIX 的目标用户是谁?
需要确定性亚微秒 FIX 消息处理的量化交易公司和基础设施团队。具体包括:运行共址策略的公司、构建自定义交易网关的团队,以及学习现代性能技术的 C++ 工程师。
NexusFIX 如何实现零堆分配?
std::span<const char> 视图引用原始缓冲区替代 std::string 拷贝。预索引数组替代 std::map。std::pmr::monotonic_buffer_resource 提供 Arena 分配。结果:热路径上零 malloc 调用,通过自定义分配器检测验证。
NexusFIX 使用了哪些 C++23 特性?
std::expected 用于错误处理(热路径无异常),std::span 用于零拷贝数据视图,concepts 用于编译期接口验证,consteval 用于编译期计算,以及 [[likely]]/[[unlikely]] 分支提示。
SIMD 解析是如何工作的?
AVX2 指令一次加载 32 字节,使用向量化比较并行查找 SOH(\\x01)分隔符。这比逐字节扫描快约 13 倍。该技术受 simdjson 启发,但针对 FIX 协议语义进行了适配。
支持哪些 FIX 版本?
FIX 4.4 完全支持,是生产环境中最常用的版本。FIX 5.0 + FIXT 1.1 也完全支持,与 4.4 相比仅有 2% 的额外开销。结构索引与版本无关——字段扫描在所有 FIX 版本中的工作方式相同。
NexusFIX 是否已可用于生产?
NexusFIX 正在积极开发中,尚未部署到生产交易环境。基准测试来自受控环境,使用 CPU 固定和缓存预热。生产加固是一个独立的工程工作。
NexusFIX 与 Fix8 相比如何?
Fix8(C++11)使用对象池和零拷贝技术。NexusFIX 的不同之处在于利用 C++23 标准库特性(PMR、std::span、std::expected)而非自定义实现,并增加了 Fix8 没有的 SIMD 加速解析。