Q&A interattivo · v1.8 · ancorato al sorgente

Chiedi al
motore stesso.

Un'interfaccia conversazionale per l'architettura, i dizionari dei messaggi, i profili delle venue e la suite di benchmark di NexusFIX. 182 domande risposte da esperti indicizzate e ancorate alla base di codice live. E un thread live quando la risposta preconfezionata non basta.

182
Risposte esperte
8
Categorie
v1.8
Build indicizzata
< 2s
Risposta mediana
Esperto NexusFIX v1.8
Indicizzato su main@a4f29d1 · 12 min fa
NF

Ciao, sono l'esperto NexusFIX, ancorato al sorgente pubblico, ai CSV di benchmark e alle 182 risposte selezionate indicizzate in questa pagina.

Scegli un thread a destra, o chiedimi qualsiasi cosa sotto. Se la risposta non è nel sorgente, lo dirò.

Perché non QuickFIX?
Hot path senza allocazioni
Parsing SIMD spiegato
Quali funzionalità C++23?
Pronto per la produzione
12:04:18 · indicizzato
YOU

Come fa NexusFIX a raggiungere zero allocazioni heap?

12:04:31
NF

Tre sostituzioni, tutte sull'hot path:

1. Le view std::span<const char> sul buffer originale sostituiscono le copie std::string. Lo span occupa 16 byte sullo stack. Nessun heap, nessuna copia, nessun distruttore.

2. Un array pre-indicizzato sostituisce std::map per la ricerca dei campi. L'accesso ai campi diventa un singolo mov indicizzato dal numero di tag FIX.

3. std::pmr::monotonic_buffer_resource fornisce allocazione arena per ciò che ha effettivamente bisogno di uno slot. L'arena è pre-dimensionata e riutilizzata per sessione.

Il risultato: 0 chiamate malloc sull'hot path, verificato tramite un allocatore custom che strumenta ogni alloc/free e fa fallire il test se una scatta.

Mostra la strumentazione
Dimensione e overflow dell'arena
Allocazioni cold-path
12:04:32 · 312 ms · fonte parser/arena.hpp
invia · ⇧ ↵ nuova rigaAncorato a main@a4f29d1 · v1.8

Domande frequenti, indicizzate.

Le otto domande che emergono in quasi ogni conversazione. Clicca per espandere. O riportala nel thread live sopra.

Q · 001MotivazionePerché hai costruito NexusFIX? Perché non usare semplicemente QuickFIX?+

QuickFIX è stato progettato all'inizio degli anni 2000 attorno a idiomi C++98/03: dispatch virtuale, allocazione heap per messaggio, storage di campo basato su stringhe. Questi pattern sono fondamentalmente incompatibili con latenza sub-microsecondo.

Siamo ripartiti dai primi principi usando funzionalità C++23 che non esistevano quando QuickFIX fu progettato. Std::span, std::expected, std::pmr, concetti e consteval. E ci siamo chiesti: come sarebbe un motore FIX se non ci si portasse dietro vent'anni di decisioni di allocatore?

Chiedi nel thread live →
Q · 002PubblicoQual è il pubblico target di NexusFIX?+

Aziende di trading quantitativo e team di infrastruttura che necessitano di elaborazione FIX deterministica e sub-microsecondo.

Nello specifico: aziende che eseguono strategie co-localizzate, team che costruiscono gateway di trading personalizzati, e ingegneri C++ che studiano tecniche di performance moderne su un codebase reale e pubblico.

Chiedi nel thread live →
Q · 003PerformanceCome fa NexusFIX a raggiungere zero allocazioni heap?+

Le view std::span sul buffer originale sostituiscono le copie std::string. Gli array pre-indicizzati sostituiscono std::map. std::pmr::monotonic_buffer_resource fornisce allocazione arena.

Il risultato: zero chiamate malloc sull'hot path, verificato tramite un harness di strumentazione di allocatore custom che gira ad ogni build CI.

Chiedi nel thread live →
Q · 004C++23Quali funzionalità C++23 usa NexusFIX?+

std::expected per la gestione errori (nessuna eccezione sull'hot path), std::span per view dati zero-copy, concetti per validazione interfaccia a compile-time, consteval per computazione a compile-time, e hint di branch [[likely]]/[[unlikely]].

Ogni una di queste avrebbe richiesto un'implementazione custom nell'era di QuickFIX.

Chiedi nel thread live →
Q · 005SIMDCome funziona il parsing SIMD?+

Le istruzioni AVX2 caricano 32 byte alla volta e usano confronto vettorizzato per trovare delimitatori SOH (\x01) in parallelo. È ~13× più veloce dello scan byte per byte.

La tecnica è ispirata a simdjson ma adattata alla semantica del protocollo FIX. Ovvero, la struttura tag=value=SOH significa che possiamo localizzare ogni confine di campo in un singolo passaggio vettorizzato e poi costruire la tabella offset.

Chiedi nel thread live →
Q · 006FIXQuali versioni FIX sono supportate?+

FIX 4.4 è pienamente supportato ed è il più comune in produzione. FIX 5.0 + FIXT 1.1 è anch'esso pienamente supportato con solo il 2% di overhead rispetto al 4.4.

L'indice strutturale è agnostico alla versione. Lo scan dei campi funziona in modo identico tra le versioni FIX. Gli overlay di dialetto custom gestiscono i tag specifici del venue al bind della sessione.

Chiedi nel thread live →
Q · 007ProduzioneNexusFIX è pronto per la produzione?+

NexusFIX è in sviluppo attivo e non è ancora stato deployato in ambienti di trading produttivi. I benchmark provengono da ambienti controllati con pinning CPU e riscaldamento cache.

Irrobustimento produzione. Soak test, copertura modalità di guasto, certificazione contro gateway di venue specifici. È uno sforzo ingegneristico separato. Se lo stai considerando per la prod, parlaci prima.

Chiedi nel thread live →
Q · 008ConfrontoCome si confronta NexusFIX con Fix8?+

Fix8 (C++11) usa pool di oggetti e tecniche zero-copy ed è uno dei motori FIX open source più sofisticati.

NexusFIX si differenzia sfruttando le funzionalità della libreria standard C++23 (PMR, std::span, std::expected) invece di implementazioni custom. Meno parti mobili da auditare. E aggiungendo il parsing accelerato da SIMD che Fix8 non ha.

Chiedi nel thread live →

Una domanda che non è nell'indice?

Chiedila nel thread live sopra. O apri una issue su GitHub. Ogni domanda con una risposta sourced e utile entra nel set indicizzato nella prossima release.