Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re^6: Strong typing and Type Safety.A multilanguage approach (implicit)

by tye (Sage)
on Nov 20, 2010 at 21:09 UTC ( [id://872696]=note: print w/replies, xml ) Need Help??


in reply to Re^5: Strong typing and Type Safety.A multilanguage approach
in thread Strong typing and Type Safety.A multilanguage approach

Sure, I can "explicitly" do 0+ with the intent of converting a string into a number. "Explicit" describes my motivation. But, no, 1+$duration is not an explicit type conversion, it is explicit addition that implies a type conversion, if required.

I can write 1+$duration with no intention of doing a conversion. If I am mistaken in thinking that $duration holds a numeric value and write 1+$duration, since the explicit request for addition includes in it an implicit possibility of type conversion, the compiler can't tell that I didn't mean for a conversion to happen. The type conversion is called "implicit". Having to write 1+(int)$duration is much more explicit. Type conversion is only done when I explicitly say "do a type conversion" not when I say "do addition" and can't separately specify that I want a conversion.

- tye        

Replies are listed 'Best First'.
Re^7: Strong typing and Type Safety.A multilanguage approach (implicit)
by chromatic (Archbishop) on Nov 22, 2010 at 00:12 UTC
    1+$duration is not an explicit type conversion, it is explicit addition that implies a type conversion, if required.

    + is a monomorphic operator. So is .. Perl values are polymorphic.

    Arguing that operator-enforced coercions in Perl are implicit is silly nonsense; to do so you must assume a priori that values should be monomorphic.

    I can write 1+$duration with no intention of doing a conversion.

    You can also write $string + $duration with no intention of performing addition, but that has nothing to do with typing and everything to do with you writing buggy (or poorly understood) code.

      Implicit doesn't mean you don't know about it. It means you don't have to take any action for it to happen. You don't convert the value before passing it to the addition operator, so any conversion that occurs is implicit.

      Personally, I don't really think about it as conversion (whether implicit or explicit) since conversion implies loss of the original value. I think of the addition operator as "getting the numeric value of the operand". For example, the numeric value of a scalar is "123" whether "123" is stored in the IV slot or "123" is stored in the PV slot, and the numeric value of a scalar is zero whether "0" is stored in the IV slot or "abc" is stored in the PV slot.

        You don't convert the value before passing it to the addition operator, so any conversion that occurs is implicit.

        You can argue it that way, but what's the difference between:

        $z = add( $x->to_int(), $y->to_int() );

        ... and:

        $z = $x + $y

        ... given that the + operator always performs numeric addition? If it's the presence of explicit type name hints, your argument gets awkward in the presence of type inference.

        ... conversion implies loss of the original value.

        I agree; that's why I try to prefer the term "coercion".

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://872696]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chilling in the Monastery: (3)
As of 2024-04-19 20:23 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found