Restrict types mail

Revision as of 17:08, 22 June 2007 by Juliant (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

These two emails are from the ECMA mailinglist and written by Bertrand Meyer. Only the important parts are copied:

First mail

Restrict_list ==                restrict Interval_expression
Interval_expression ==  Interval | "{" Interval Operator Interval "}"
 
 
Interval ==             Explicit_interval | Implicit_Interval
Explicit_interval ==    Class_type ".." Class_type
Implicit_interval ==    Class_type | ">" Class_type | Class_type ">"
 
Interval_operator == "+"  |  "-" | "*"
 
Note that operators use full parenthesization so there is no ambiguity. Maybe 
parentheses would be better than braces.
 
Instead of >T and T> we could use .. T and T .., i.e. allow omitting either 
but not both of the two Class_type in Explicit_interval.
Having played with both I tend to like the ">" forms better but am not really 
sure.
 
 
Semantics:
 
An Interval_expression denotes a (possibly empty) subset of the types in the 
universe. T .. U is the set of all types that conform
to T and to which U conforms. T is an abbreviation for T .. T. T> is an 
abbreviation for T .. NONE. >T is an abbreviation for ANY ..
T. "+" is union, "-" set difference, "*" intersection.
 
 
Examples:
 
ANY .. NONE                     -- Fits all types
ANY>                            -- Means the same
>NONE                           -- Means the same
T>                              -- T and conforming types
>T                              -- Types conforming to T
T .. U                  -- Types conforming to T and to which U conforms
X .. Y                  -- Types conforming to X and to which Y conforms
{T .. U} + {X .. Y}     -- Types that satisfy any of the preceding two 
conditions
{T .. U} - {X .. Y}     -- Types that satisfy the first of those but not the 
second
{T .. U} * {X .. Y}     -- Types that satisfy both
 
 
etc.
 
a: T is an abbreviation for e.g. a: restrict {T>}.
 
 
 
Comparison with last proposed notation:
 
a1: ANIMAL restrict ANIMAL                      -- Previously accept 
{ANIMAL}: monomorphic
a2: ANIMAL restrict ANIMAL>                     -- `restrict' clause is 
superfluous
a3: ANIMAL restrict {ANIMAL> - ANIMAL}  -- Strictly polymorphic.
a4: ANIMAL restrict OCTOPUS>                    -- Previously accept {all 
OCTOPUS}
a5: ANIMAL restrict {CAT> + OCTOPUS}    -- Previously accept {all CAT, 
OCTOPUS}
a6: ANIMAL restrict {ANIMAL> - CAT>}    -- Previously reject {CAT}
a7: ANIMAL restrict {FELINE> - {CAT .. SIAMESE}}
                                                        -- No previous 
equivalent
 
I don't have any good example with intersection.

Second mail contained conformance rule

T restrict S conforms to T restrict S' only if S is a subset of S'