User-Defined Operators (ad-hoc overloading)
Andrew J Bromage
ajb@spamcop.net
Sat, 19 Jul 2003 14:13:54 +1000
G'day all.
On Fri, Jul 18, 2003 at 11:08:16AM +0200, Christian Maeder wrote:
> Mere overload resolution (over monomorphic types) is not NP-hard. (This
> is only a common misconception.)
No, but as you note below, the "interesting" cases are. Most
of the more interesting number-like types are polymorphic (e.g.
Complex, Ratio).
> Overload resolution in conjunction with polymorphism surely remains NP
> hard due to the "let". Furthermore, usually unification alone (know to
> be linear in theory) is implemented in a way that can cause "explosion".
>
> So I doubt, that overload resolution should be blamed if front-ends
> become really slow.
The question is not "is it theoretically slow?" The question is "are
you ever likely to see the worst-case behaviour if you're not actively
looking for it, or otherwise doing something dubious?"
Remember that the situation we're looking at is that there are a small
number of operators (e.g. those which work on number-like types) which
people want to heavily overload. A program which used a mixture of
these types could easily tickle exponential behaviour quite quickly if
the programmer is not careful. Plus, what would cause this behaviour
is not their _use_ as such, but rather the number of modules imported
which have these overloaded operators defined.
Cheers,
Andrew Bromage