Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re^4: I think Perl ruined me as a programmer

by tilly (Archbishop)
on Nov 03, 2007 at 13:02 UTC ( [id://648787]=note: print w/replies, xml ) Need Help??


in reply to Re^3: I think Perl ruined me as a programmer
in thread I think Perl ruined me as a programmer

That helps with your own data types. But since most programs just use the default data types, it still takes more work in Perl to define a generic min function that works across strings and numbers.

And, to tell the truth, in Perl 5 you can already use overload to define a comparison function and then use a fairly generic min function. Of course people don't actually use this much in practice. For many good reasons. Most people haven't learned what they can do with overload. Also it is a fair amount of work (Perl 5 doesn't have multiple dispatch to help). And using overload like this in shared Perl code violates the principle of not surprising your maintenance programmer. And finally because for most programs it is more convenient to use default data types.

That said, the first bug I found in Ruby was that if you defined a subclass of String that is exactly like a String but it compares in reverse, the built-in sort method from Comparable will ignore your comparison and use the normal string comparison. I was told that this bug is due to a deliberate optimization. I just tested it. The bug is still there. :-(

So even having a clean design doesn't help you if you break your own design for performance reasons.

  • Comment on Re^4: I think Perl ruined me as a programmer

Replies are listed 'Best First'.
Re^5: I think Perl ruined me as a programmer
by TimToady (Parson) on Nov 03, 2007 at 15:40 UTC
    That helps with your own data types. But since most programs just use the default data types, it still takes more work in Perl to define a generic min function that works across strings and numbers.
    Again, you are speaking of Perl 5 here; Perl 6 has generic ordering functions already, called "before" and "after", and both min and cmp are defined in terms of those. (The old string-biased cmp was renamed to leg.) And sort is defined in terms of the new cmp, so it is also generic. The least-specific ordering variants are defined in terms of comparing canonicalizations, so we can have "natural" sorting of heterogenous data.

    But Perl 6 can also easily emulate the broken Ruby behavior by using the string-biased comparison operators explicitly. Philosophically, Perl 6 is going to do the right thing by default, but give the programmer the ability to supply enough type information (via either the data or the operator) for the the optimizer to do interesting things, up to and including compiling down to machine code.

    (Of course, even the generic operations are allowed to do on-the-fly optimizations as long as they're pessimizable in the presence of inconsistent data. Only the semantics need be preserved--it's okay for the program to get faster or slower as the data changes in consistency. Hopefully the slowness is bounded so that you don't open your server up for denial of service attacks.)

    Anyway, my point is simply that we've already thought about these things an awful lot. Please don't assume Perl 6 will fail the same way Perl 5 fails. :)

Log In?
Username:
Password:

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

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

    No recent polls found