"The book presents an overview of the operations of a major commercial airport, much of which is still applicable over 40 years later. Several major and minor characters appear, illustrating the vast complexity of the airport and its operations, including customs officers, lawyers, airport police, doctors, clerks, snow clearers, et al."
I'll provide the short version, and will encourage the exchange team to do a proper write-up once they feel ready for it. But to provide proper context, keep in mind that everything below is considered with a trading exchange in mind.
Distilled down to bullet point material, the change is driven by:
- language ecosystem; support libraries for Erlang are, regrettably, not that well maintained
- familiarity; the team maintaining and improving the exchange stack are not Erlang experts but know C++ pretty well
- hiring pool; finding good engineers who know Erlang is impressively hard. Intersection with engineers who have been exposed to financial exchanges is ... well.
- performance; as I've been explained to, the underlying data structures in Erlang are designed for maximum concurrency and share-nothing model (the Actor pattern in its pure form). These impose constraints that happen to hit the hot paths pretty hard. And related to that...
- memory model properties; exchanges rely on data structures whose critical paths cannot avoid invasive operations. Routinely working around your runtime's central assumptions is not exactly a best practice, regardless of the language used.
I will let our exchange team tell the complete back story, in their own style and with their view from the trenches. Known interest probably helps.
There are gotchas and unsupported functionality (e.g. 'since Perl 6 does not have the same concept of "context", Perl 5 methods are always called in list context.') which effectively mean that you've got no idea if library 'foo' will work or not without a thorough review of the code.
At best, it's a hack. Impressive, sure, but not something that you could rely upon. There's still no sane upgrade path here.
XS is the "same" hack all the time, though. A Perl library that can only be called in list context in Perl 6 is a substantial change from Perl 5. I've seen much smaller changes trash code bases before. I've got real code that would be affected by that. (I also think the context idea was a misfire in Perl <6, but as long as it is there, I've sometimes written code that had to deal with it.)
That said, why is it impossible to call a Perl 5 function in scalar context? Shouldn't the equivalent of Perl 5's "scalar" be fairly easy to implement? It may stink to have to manually use it, but it wouldn't be very often, and it's easy enough to use any of half-a-dozen Perl 6 features to minimize the syntactic hit.