Very interesting post.
I am making an FBP-like system using the Pony Language, because
a. It has an actor model built-in, i.e. input queue on components. Placing an event on the input queue, however, is basically the same as a function call, except in Pony the callee declares a "Behavior" rather than a "Function" which completely changes the call semantics (from function call to queueing an event and becoming asynchronous).
b. Blocking-free. Each actor (i.e. input queue) is assigned to a OS thread, to minimize cache sync. One thread per CPU Core, to minimize context switching.
c. Data-race guarantees, either shared or mutable but not both. Mutable data can be passed between components/actors, yet language guarantees that read/write can not get corrupted.
Basically all the "Requirements" are filled at the language level (except "lock routing wire"), and what I have done is to allow the creation of pluggable components according to my domain's needs (not IT related, so 'events' are actually numeric values). I am not sure what "lock routing wire" means.
Cheers
Niclas