4 ms·
There's a major historically-contingent component to this, too. The Island ECN, later absorbed into NASDAQ's ECN, originally ran its matching engine as one of t
by taion 6y ago
There's a major historically-contingent component to this, too. The Island ECN, later absorbed into NASDAQ's ECN, originally ran its matching engine as one of these low-latency Java processes, writing everything using explicit object pools to avoid doing any GC on the critical path, as this was long before Zing was around.
This was a pretty reasonable choice at the time, as this was long before C++11 was around, and Java just offered a lot of advantages for developer ergonomics.
A natural consequence of this is that a number of HFT shops that were seeded by ex-ISLD devs just fell into using something like the ISLD tech stack, which at least at first involved a lot of GC-free Java.
- secondcoming 6y agoI bet they used a bit of sun.misc.Unsafe too https://blogs.oracle.com/javamagazine/the-unsafe-class-unsafe-at-any-speed https://blogs.oracle.com/javamagazine/the-unsafe-class-unsaf...
- taion 6y agoLess than you'd think – it comes up in serializing/deserializing data, somewhat, because JNI has a fair bit of overhead, but this isn't really like Rust's "unsafe". To have fast Java, you really need the JIT to be happy, and that's not a safe bet if you're doing random things with Unsafe.
- neomantra 6y agoAnd before Java, it used Microsoft FoxPro! Here's the source code: https://josh.com/notes/island-ecn-10th-birthday/ https://josh.com/notes/island-ecn-10th-birthday/ https://josh.com/notes/island-ecn-10th-birthday/ISLAND.PRG.TXT https://josh.com/notes/island-ecn-10th-birthday/ISLAND.PRG.T...
- clausok 6y agoMore color on the original FoxPro matching engine: "Levine found a simple but hugely consequential 'trick' to speed matching. In Levine’s later paraphrase, what the 'enter2order' procedure did when the Island system received a new order was to: 'See if there was a record from a recently cancelled order that we can reuse for this new order. This is hugely important because that record will likely still be in the cache [fast internal memory] and using it will be much faster than making a new one. (Levine, n.d.)'" http://www.sps.ed.ac.uk/__data/assets/pdf_file/0003/97500/Island34.pdf http://www.sps.ed.ac.uk/__data/assets/pdf_file/0003/97500/Is...
- deleted 6y ago[deleted]