[TYPES] Types in distributed systems

"Ionuț G. Stan" ionut.g.stan at gmail.com
Sat Aug 30 16:44:05 EDT 2014


Thank you all for the given pointers. Much more than I had initially 
anticipated. I skimmed over some of the mentioned papers and they all 
look great. This should keep me busy for a little while.


On 30/08/14 14:26, Philip Wadler wrote:
> See the Acute system by Sewell and others.
>
> http://www.cl.cam.ac.uk/~pes20/acute/index.html
>
> -- P
>
> .   \ Philip Wadler, Professor of Theoretical Computer Science
> .   /\ School of Informatics, University of Edinburgh
> .  /  \ http://homepages.inf.ed.ac.uk/wadler/
>
>
> On 29 August 2014 03:24, "Ionuț G. Stan" <ionut.g.stan at gmail.com
> <mailto:ionut.g.stan at gmail.com>> wrote:
>
>     [ The Types Forum,
>     http://lists.seas.upenn.edu/__mailman/listinfo/types-list
>     <http://lists.seas.upenn.edu/mailman/listinfo/types-list> ]
>
>     Hello,
>
>     First, let me acknowledge upfront that I'm a complete dilettante
>     when it comes to type theory (I'm still working through the first
>     chapters of TaPL). That means that what I'm about to ask will be
>     either stupid or extremely inexact. Nevertheless, I'm curious.
>
>     Now, onto my question...
>
>     The TL;DR version is: how does one specify types in a distributed
>     programming model, like actors? And how much can we trust these types?
>
>     I was debating today, on Twitter [1], how to type the sets of
>     messages two actors can exchange; a producer (P) and a consumer (C).
>
>     Let's say that the possible set of messages produced by P is M. We
>     would like, by means of a type system, to know that C can handle: 1)
>     just messages of type M and 2) all possible messages of type M.
>
>     M could be represented by a sum type. Let's consider this particular
>     one:
>
>     M1 = A | B | C
>
>     In a closed world this makes complete sense (to me, at least) and
>     it's easy to verify statically. But in an open world setting, like a
>     distributed system, where P and C are on different machines that may
>     be upgraded separately, things look harder to me. You may guarantee
>     statically that the two properties are met, but at runtime there may
>     appear race conditions that violate the second property.
>
>     For example, we deploy P1 and C1, both agreeing on M1. Next, we add
>     a new variant to M1:
>
>     M2 = A | B | C | D
>
>     P1 and C1 are updated accordingly and we get P2 and C2, which we try
>     to deploy, but a race condition appears and P2 send message D to C1.
>     Obviously, C1 does not understand it. Even though the type system
>     told us that C1 can handle all variants of M, it can't actually.
>
>     A similar scenario appears when removing one of the variants of M1.
>
>     Is there any typing approach to this kind of problem?
>
>     It looks to me that types would have to include a version as well
>     and all runtime communication between different versions should be
>     prohibited by having versioned communication channels.
>
>     Does anyone have any insights or pointers to articles, papers or
>     books that discuss this sort of problem?
>
>     Thank you for reading this!
>
>
>     [1]: https://twitter.com/shajra/__status/504568858967953408
>     <https://twitter.com/shajra/status/504568858967953408>
>
>     --
>     Ionuț G. Stan  | http://igstan.ro
>
>
>
>
> The University of Edinburgh is a charitable body, registered in
> Scotland, with registration number SC005336.
>


-- 
Ionuț G. Stan  |  http://igstan.ro


More information about the Types-list mailing list