Una interfaz conversacional para la arquitectura, diccionarios de mensajes, perfiles de venue y suite de benchmarks de NexusFIX. 182 preguntas respondidas por expertos indexadas y basadas en el código en vivo. Y un hilo en vivo cuando la respuesta enlatada no es suficiente.
Hola, soy el experto NexusFIX, basado en el código fuente público, CSV de benchmark y las 182 respuestas seleccionadas indexadas en esta página.
Elige un hilo a la derecha, o pregúntame cualquier cosa abajo. Si la respuesta no está en la fuente, lo diré.
¿Cómo logra NexusFIX cero asignaciones de heap?
Tres sustituciones, todas en la ruta caliente:
1. Las vistas std::span<const char> al buffer original reemplazan las copias de std::string. El span ocupa 16 bytes en la pila. Sin heap, sin copia, sin destructor.
2. Un array preindexado reemplaza a std::map para la búsqueda de campos. El acceso a campos se convierte en un único mov indexado por número de tag FIX.
3. std::pmr::monotonic_buffer_resource proporciona asignación de arena para lo que realmente necesita un slot. El arena tiene tamaño predefinido y se reutiliza por sesión.
El resultado: 0 llamadas a malloc en la ruta caliente, verificado mediante un asignador personalizado que instrumenta cada alloc/free y hace fallar el test si alguno se dispara.
Las ocho preguntas que aparecen en casi cada conversación. Haz clic para expandir. O llévala al hilo en vivo arriba.
QuickFIX fue diseñado a principios de los 2000 en torno a modismos C++98/03: dispatch virtual, asignación de heap por mensaje, almacenamiento de campo basado en strings. Estos patrones son fundamentalmente incompatibles con latencia sub-microsegundo.
Partimos de primeros principios usando capacidades de C++23 que no existían cuando se diseñó QuickFIX. Std::span, std::expected, std::pmr, conceptos y consteval. Y preguntamos: ¿cómo sería un motor FIX si no cargaras veinte años de decisiones de asignador?
Firmas de trading cuantitativo y equipos de infraestructura que necesitan procesamiento de mensajes FIX determinista y sub-microsegundo.
Específicamente: firmas que ejecutan estrategias colocalizadas, equipos que construyen gateways de trading personalizados, e ingenieros C++ que estudian técnicas modernas de rendimiento en una base de código real y pública.
Las vistas std::span
El resultado: cero llamadas malloc en la ruta caliente, verificado mediante un harness de instrumentación de asignador personalizado que se ejecuta en cada build de CI.
std::expected para manejo de errores (sin excepciones en la ruta caliente), std::span para vistas de datos zero-copy, conceptos para validación de interfaces en tiempo de compilación, consteval para cómputo en tiempo de compilación, y hints de rama [[likely]]/[[unlikely]].
Cada una de estas habría requerido una implementación personalizada en la era de QuickFIX.
Las instrucciones AVX2 cargan 32 bytes a la vez y usan comparación vectorizada para encontrar delimitadores SOH (\x01) en paralelo. Esto es ~13× más rápido que el escaneo byte a byte.
La técnica está inspirada en simdjson pero adaptada a la semántica del protocolo FIX. Es decir, la estructura tag=value=SOH significa que podemos localizar cada límite de campo en una sola pasada vectorizada y luego construir la tabla de offsets.
FIX 4.4 está completamente soportado y es el más común en producción. FIX 5.0 + FIXT 1.1 también tiene soporte completo con sólo un 2% de overhead frente a 4.4.
El índice estructural es agnóstico a la versión. El escaneo de campos funciona idénticamente entre versiones FIX. Los overlays de dialecto personalizados manejan tags específicos del venue en el bind de la sesión.
NexusFIX está en desarrollo activo y aún no se ha desplegado en entornos de trading de producción. Los benchmarks provienen de entornos controlados con pinning de CPU y precalentamiento de caché.
Endurecimiento de producción. Pruebas de soak, cobertura de modos de fallo, certificación contra gateways de venues específicos. Es un esfuerzo de ingeniería separado. Si lo estás considerando para prod, habla con nosotros primero.
Fix8 (C++11) usa pools de objetos y técnicas de copia cero, y es uno de los motores FIX open source más sofisticados.
NexusFIX se diferencia al aprovechar las características de la librería estándar C++23 (PMR, std::span, std::expected) en lugar de implementaciones personalizadas. Menos piezas móviles que auditar. Y al añadir parsing acelerado por SIMD que Fix8 no tiene.
Hazla en el hilo en vivo arriba. O abre un issue en GitHub. Cada pregunta que obtiene una respuesta con fuentes y útil entra en el conjunto indexado en la próxima versión.