Eine konversationelle Schnittstelle zur Architektur, Nachrichtenwörterbüchern, Venue-Profilen und Benchmark-Suite von NexusFIX. 182 von Experten beantwortete Fragen indexiert und in der Live-Codebasis verankert. Plus ein Live-Thread, wenn die Standardantwort nicht reicht.
Hallo, ich bin der NexusFIX-Experte, basierend auf öffentlichem Quellcode, Benchmark-CSVs und den 182 kuratierten Antworten auf dieser Seite.
Wählen Sie rechts einen Thread oder fragen Sie unten alles. Wenn die Antwort nicht im Quellcode steht, sage ich das.
Wie erreicht NexusFIX null Heap-Allokationen?
Drei Substitutionen, alle auf dem Hot-Path:
1. std::span<const char>-Views in den Originalpuffer ersetzen std::string-Kopien. Die Span ist 16 Bytes auf dem Stack. Kein Heap, kein Copy, kein Destruktor.
2. Ein vorindiziertes Array ersetzt std::map für die Feldsuche. Feldzugriff wird zu einem einzigen mov, indiziert nach FIX-Tag-Nummer.
3. std::pmr::monotonic_buffer_resource bietet Arena-Allokation für alles, was tatsächlich einen Slot braucht. Die Arena ist vordimensioniert und wird pro Session wiederverwendet.
Das Ergebnis sind 0 malloc-Aufrufe auf dem Hot-Path, verifiziert durch einen Custom-Allocator, der jede alloc/free instrumentiert und den Test fehlschlagen lässt, falls eine auftritt.
Die acht Fragen, die in fast jedem Gespräch auftauchen. Klicken Sie zum Aufklappen. Oder bringen Sie sie in den Live-Thread oben.
QuickFIX wurde Anfang der 2000er um C++98/03-Idiome herum entworfen: virtueller Dispatch, Heap-Allokation pro Nachricht, stringbasierte Feldspeicherung. Diese Muster sind grundsätzlich inkompatibel mit Sub-Mikrosekunden-Latenz.
Wir haben aus ersten Prinzipien mit C++23-Fähigkeiten begonnen, die es zur Entwurfszeit von QuickFIX nicht gab. Std::span, std::expected, std::pmr, Konzepte und consteval. Und gefragt: Wie würde eine FIX-Engine aussehen, wenn man nicht zwanzig Jahre Allocator-Entscheidungen mit sich herumtragen müsste?
Quantitative Handelsfirmen und Infrastrukturteams, die deterministische FIX-Nachrichtenverarbeitung im Sub-Mikrosekundenbereich benötigen.
Konkret: Firmen mit co-located Strategien, Teams, die eigene Trading-Gateways bauen, und C++-Ingenieure, die moderne Performance-Techniken an einer echten, öffentlichen Codebasis studieren.
std::span
Das Ergebnis: null malloc-Aufrufe auf dem Hot-Path, verifiziert über einen Custom-Allocator-Instrumentierungsharness, der bei jedem CI-Build läuft.
std::expected für Error-Handling (keine Exceptions auf dem Hot-Path), std::span für Zero-Copy-Datenviews, Konzepte für Compile-Time-Interface-Validierung, consteval für Compile-Time-Berechnung und [[likely]]/[[unlikely]] Branch-Hints.
Jedes einzelne davon hätte in der QuickFIX-Ära eine handgeschriebene Custom-Implementierung erfordert.
AVX2-Instruktionen laden 32 Bytes gleichzeitig und nutzen vektorisierten Vergleich, um SOH (\x01)-Delimiter parallel zu finden. Das ist ca. 13× schneller als Byte-für-Byte-Scannen.
Die Technik ist von simdjson inspiriert, aber für FIX-Protokoll-Semantik angepasst. Nämlich, die tag=value=SOH-Struktur bedeutet, dass wir in einem einzigen vektorisierten Durchlauf jede Feldgrenze lokalisieren und dann die Offset-Tabelle aufbauen können.
FIX 4.4 wird voll unterstützt und ist die in Produktion gebräuchlichste Version. FIX 5.0 + FIXT 1.1 wird ebenfalls voll unterstützt, mit nur 2% Overhead gegenüber 4.4.
Der Strukturindex ist versionsagnostisch. Feldscanning funktioniert identisch über FIX-Versionen hinweg. Custom-Dialect-Overlays behandeln venue-spezifische Tags zur Session-Bind-Zeit.
NexusFIX befindet sich in aktiver Entwicklung und wurde noch nicht in produktive Handelsumgebungen deployt. Benchmarks stammen aus kontrollierten Umgebungen mit CPU-Pinning und Cache-Warming.
Produktions-Härtung. Soak-Tests, Failure-Mode-Coverage, Zertifizierung gegen spezifische Venue-Gateways. Ist ein separater Engineering-Aufwand. Wenn du es für die Produktion in Betracht ziehst, sprich zuerst mit uns.
Fix8 (C++11) verwendet Objektpools und Zero-Copy-Techniken und ist eine der ausgereifteren Open-FIX-Engines.
NexusFIX unterscheidet sich durch die Nutzung von C++23-Standardbibliothek-Funktionen (PMR, std::span, std::expected) statt eigener Implementierungen. Weniger Komponenten zu auditieren. Und durch SIMD-beschleunigtes Parsing, das Fix8 nicht hat.
Stellen Sie sie im Live-Thread oben oder öffnen Sie ein Issue auf GitHub. Jede Frage mit einer fundierten, nützlichen Antwort kommt in der nächsten Version in den indexierten Satz.