open-psa/mef

Typing of Expression

rakhimov opened this issue · 0 comments

The MEF specification doesn't discuss or implicit about
Expressions' parameter and return value types.

Example 1.

<parameter name="type-unsafe">
    <div>
        <int value="42"/>
        <bool value="true"/>
    </div>
</parameter>

Strictly, Example 1 expression doesn't make sense.
This would produce type errors in strongly-typed system (e.g, Haskell);
however, weakly-typed languages would succeed with implicit bool->int conversion.

Example 2.

<parameter name="integer-div">
    <div>
        <int value="42"/>
        <int value="4"/>
    </div>
</parameter>

<parameter name="float-div">
    <div>
        <float value="42"/>
        <float value="4"/>
    </div>
</parameter>

Example 2 is overloading with integer division returning integer
and float division returning float;
Note that these overloads return different values (10 vs. 10.5)
and have different semantics
even though the argument values are equal.

Example 3.

<parameter name="implicit-cast">
    <ite>
        <int value="42"/>  <!-- This is condition -->
        <float value="1.0"/>
        <int value="1"/>
    </ite>
</parameter>

Examples 3 would produce type errors in strongly-typed system,
weak system would convert 42 into true and succeed;
moreover, due to type mismatch in different arms of the expression,
the return type is float.

The simplest solution from specification and implementation points of view
is to adopt the weak typing of the C language with no overloading.
If an Expression needs to be generic (e.g., div, mul),
the parameter and return types can be float.

I suspect that the MEF authors being C programmers
assumed the C-type system for numbers but forgot to mention it :).