
On 8/11/07, Benjamin Franksen
A certain amount of dynamism wrt the message content (high level protocol) is necessary for systems for which Erlang was designed, namely large distributed control systems with minimum down-times. For large distributed installations it is a matter of practicality to be able to upgrade one component w/o needing to recompile (and then re-start) all the other components that it communicates with -- for systems with expected down-times of 3 Minutes per year it is a matter of being able to meet the specifications. You'll have a hard time finding high-availability or large control systems which use an IDL approach for communication.
Hmmm, that's interesting. I'd never considered lack of typing to be a good thing for system robustness before! Question: to what extent does interface versioning get around this problem? I assume the issue we're trying to address is to be able to upgrade clients/servers/peers independently, without losing connectivity with unupgraded systems? So, using versioned interfaces: Initially we have: client1 marketinterface1 server marketinterface1 client2 marketinterface1 Then, we upgrade the server with a new interface, marketinterface2. Significantly, we keep the old interface. So now we have: client1 marketinterface1 server marketinterface1, marketinterface2 client2 marketinterface1 The whole system continues to work: client1 and client2 continue to chat with server on marketinterface1. Now we upgrade client1: client1 marketinterface2 server marketinterface1, marketinterface2 client2 marketinterface1 ... and client2: client1 marketinterface2 server marketinterface1, marketinterface2 client2 marketinterface2 Finally, we deprecate/remove marketinterface1 from the server: client1 marketinterface2 server marketinterface2 client2 marketinterface2