¿Qué le motivó a construir NexusFIX? ¿Por qué no usar simplemente QuickFIX?
QuickFIX fue diseñado a principios de los 2000 en torno a los idiomas de C++98/03: despacho virtual, asignación en heap por mensaje, almacenamiento de campos basado en strings. Estos patrones son fundamentalmente incompatibles con los requisitos de latencia por debajo del microsegundo. Partimos de primeros principios usando las capacidades de C++23 que no existían cuando se diseñó QuickFIX.
¿Quién es el público objetivo de NexusFIX?
Empresas de trading cuantitativo y equipos de infraestructura que necesitan procesamiento de mensajes FIX determinista y por debajo del microsegundo. Específicamente: empresas que ejecutan estrategias en co-localización, equipos que construyen pasarelas de trading personalizadas e ingenieros de C++ que estudian técnicas modernas de rendimiento.
¿Cómo logra NexusFIX cero asignaciones en heap?
Las vistas std::span<const char> sobre el buffer original sustituyen a las copias de std::string. Los arrays pre-indexados sustituyen a std::map. std::pmr::monotonic_buffer_resource proporciona asignación en arena. El resultado: cero llamadas a malloc en la ruta crítica, verificado mediante instrumentación de asignador personalizado.
¿Qué características de C++23 usa NexusFIX?
std::expected para el manejo de errores (sin excepciones en la ruta crítica), std::span para vistas de datos de copia cero, concepts para la validación de interfaces en tiempo de compilación, consteval para cómputo en tiempo de compilación y sugerencias de rama [[likely]]/[[unlikely]].
¿Cómo funciona el parsing SIMD?
Las instrucciones AVX2 cargan 32 bytes a la vez y usan comparación vectorizada para encontrar delimitadores SOH (\\x01) en paralelo. Esto es ~13x más rápido que el escaneo byte a byte. La técnica está inspirada en simdjson pero adaptada para la semántica del protocolo FIX.
¿Qué versiones de FIX son compatibles?
FIX 4.4 tiene soporte completo y es la más común en producción. FIX 5.0 + FIXT 1.1 también tiene soporte completo con solo un 2% de sobrecarga frente a 4.4. El índice estructural es independiente de la versión — el escaneo de campos funciona de manera idéntica en todas las versiones de FIX.
¿Está NexusFIX listo para producción?
NexusFIX está en desarrollo activo y aún no ha sido desplegado en entornos de trading de producción. Los benchmarks provienen de entornos controlados con anclaje de CPU y calentamiento de caché. El endurecimiento para producción es un esfuerzo de ingeniería separado.
¿Cómo se compara NexusFIX con Fix8?
Fix8 (C++11) usa pools de objetos y técnicas de copia cero. NexusFIX se diferencia al aprovechar las características de la librería estándar de C++23 (PMR, std::span, std::expected) en lugar de implementaciones personalizadas, y al añadir parsing acelerado por SIMD que Fix8 no tiene.