Questions and discussion on UBF

Erik Pearson erik@REDACTED
Mon Apr 28 22:09:26 CEST 2003


Hi Fabien,

Quite a lot to chew on -- I'll bite off just one piece!

On Monday, April 28, 2003, at 07:16 AM, Fabien Dagnat wrote:

> Hello,
> As I am working on using contracts on component (or service, if one 
> prefer) oriented specifications, I'm looking at UBF.
>
>
> I'm asking myself why allowing any type for messages in the contracts. 
> I know that this is linked with the fact that in Erlang a message may 
> be of any type. But:
>   - a programming rule specifies that all messages should be tagged.
>   - as a "universal" format, it should conform to other language
>     culture too.
> Indeed, in a more abstract view (than erlang usual one), it would be 
> "better" to name (give a tag) messages (from a specification point of 
> view). Combined with some (yet to completly implement) type system, it 
> would perhaps be possible to ensure that a server respect its 
> contracts...

I think I see what you mean here, but please correct me if not. This 
would basically be extending the UBF(C) from

   Msg$  => {Reply, NextState}$

to

   {SendTag, Msg}$ => {ReplyTag, Reply, NextState}$

In short, I think this would start breaking down the simplicity of UBF. 
Can't you get that just by always using types which are structures, and 
having the first element be a constant which serves as your tag?



>
> My second question is why just allowing named type in the automaton 
> description.
> More precisely why not having something like:
> +STATE start
>        ls            => files()     & start;
>        {get, file()} => binary()    & start
> 		     | noSuchFile() & stop.
> Is there any technical (or philosophical) limitation that I haven't 
> thougth of? I think it would save type definitions and help reading 
> the automaton (without always shifting to type definitions to remember 
> what are the message types). I know that the current syntax is similar 
> in this point to the message definition in WSDL, but I don't see WSDL 
> as a panacea of XML encoding of interfaces.
>
> Next, to go back to my point on universality. Why not having:
> +STATE start
>        ls()                 => files()     & start;
>        get(file : string()) => binary()    & start
> 		            | noSuchFile() & stop.
> My point here is that I would like to add to the contract some pre and 
> post conditions and to do this usually we have to refer to some 
> arguments of the message. Furthermore, to do this, I would like to add 
> some state variables to the state.
> For exemple, a bank account contract could be:
> +STATE start
>   open() => ok() & created.
> +STATE created
>   deposit(sum : int()) => ok() & credit(sum).
> +STATE credit(balance : int())
>   deposit(sum : int())  => if (sum > 0) ok() & credit(balance + sum);
>   withdraw(sum : int()) => if (sum <= balance) ok() & credit(balance - 
> sum);
>   balance()             => {ok, sum} with sum = balance & 
> credit(balance).
>
> I don't advocate that this is a great example of the interest of pre 
> and post conditions. But, I think it is sufficiently interesting to 
> illustrates what I was thinking of.
>
> It is clear that this way of thinking contracts embed a lot more 
> (behavioral) semantics that the current UBF. Indeed, it shift some 
> part of the server state to the "contract checker". But, it could gave 
> some interesting property like the fact that the "contract checker" 
> could use several servers giving them the needed state with the 
> message (we would get some fault tolerance or some load balancing 
> capacity).
>
> Finally, why not allowing a return state in the ANYSTATE declaration. 
> Suppose, I would like to have a stop message available in all states 
> that brings the server in a stopped state. For example,
>
> +STATE stopped
>   start() => ok() & s1.
> +STATE s1
>   ...
> +STATE s2
>   ...
> +ANYSTATE
>   stop() => ok() & stopped.
>
> Thanks in advance for any answer, opinion, criticism...
>
> Fabien
> -- 
> Fabien Dagnat -- Maître de Conférences
>  Mel : Fabien.Dagnat@REDACTED
>  Web : perso-info.enst-bretagne.fr/~fdagnat/index.php
>  Tel : (0|33) 2 29 00 14 09
>  Fax : (0|33) 2 29 00 12 82
>  Adr : Ecole Nationale Superieure des Télécommunication de Bretagne
>        Departement Informatique
>        Technopôle Brest Iroise
>        BP 832
>        29285 Brest Cedex
>
>
>
Erik Pearson
Adaptations
desk +1 510 527 5437
cell +1 510 517 3122




More information about the erlang-questions mailing list