in reply to Re^11: Strong typing and Type Safety.A multilanguage approach (implicit)
in thread Strong typing and Type Safety.A multilanguage approach

How is explicitly using a monomorphic operator which operates on numeric values any less explicit than performing a manual conversion operation through a method?

The addition operator operators on scalars, not numeric values; you can pass it a string if you so desire. The operator must coerce the string into a number in order to do the addition.

The latter is explicit by definition. "Manual" is synonymous with "explicit".

Implicit conversion is less explicit than explicit conversion.

  • Comment on Re^12: Strong typing and Type Safety.A multilanguage approach (implicit)

Replies are listed 'Best First'.
Re^13: Strong typing and Type Safety.A multilanguage approach (implicit)
by chromatic (Archbishop) on Nov 22, 2010 at 17:37 UTC
    The addition operator operators on scalars, not numeric values; you can pass it a string if you so desire. The operator must coerce the string into a number in order to do the addition.

    From perlop:

    Binary "+" returns the sum of two numbers.

    The operator is monomorphic. Again, how is using the binary numeric addition operator not explicit about the intention to treat its operands in a numeric fashion?

      Monomorphic has nothing to do with it. You can have monomorphic operators that don't do any conversion (e.g. add), and you can have monomoprhic operators that do (e.g. to_int, +).

      You said yourself the addition operator coerces. What else is there to say.

        (I know you know all of this; I belabor it only for the sake of other people reading who may not know, and because I think most of the talk about the Perl 5 type system is incorrect in subtle and imprecise ways.)

        Monomorphic has nothing to do with it.

        It has everything to do with it. Perl 5's type system expresses types by operators, not values. There is no implicit conversion occurring because the typed monomorphic operators are all explicit. (Without an operator, you have only a single-term expression.

        Would you say that the C macro:

        #define INTEGER_ADD(a, b) (int)(a) + (int)(b)

        ... performs implicit conversion because when you use it, you don't see the casts?

        z = INTEGER_ADD(x, y);

        Would you not characterize this code as clunky?

        my $z = "$x" . "$y";

        To anyone who understands the concatenation operator, the explicit stringification is unnecessary because the operator explicitly expresses the type of the values it expects from its operands.