On Fri, Oct 5, 2018 at 1:13 PM Brandon Allbery <allber...@gmail.com> wrote:

> My problem with it being in the signature is still that it doesn't say
> which part of the contract it applies to; it appears to be claiming it's
> part of dispatch, when it's not.
>

Explicit argument polymorphism has been shown to be useful and increasing
in elegance more often than it causes debugging complexity, while return
polymorphism has generally been a nightmare in languages that have tried
it, no? True that no other polymorphic language (AFAIK, but haven’t looked
lately) has true multimethods, but my guess is that return polymorphism
would be even worse within multiple dispatch than in single-dispatch
languages.

Not that I thought you were arguing that --> *should* apply to dispatch,
just trying to get everyone on the same page in case we’re not (and maybe
I’m the one who needs my page flipped to the same place in the hymnal).

But right now we have a situation where “everything within the
signature *except
for* the return constraint can participate in multi dispatch”, which does
feel weird. But is that actually true? Something’s nagging at me that
there’s something else in this category as well, but I can’t think what.
(Recursive multi dispatch on signatures of multi Callable arguments, maybe?
I would try but my machine’s offline upgrading….) If there are more rules
about what participates in multi dispatch than “change anything in the
signature to the left of the --> and you’re good”, then it’s probably
acceptable for --> to not participate either—it’s already more complex than
it looks.
​



>
> On Fri, Oct 5, 2018 at 12:01 PM Larry Wall <la...@wall.org> wrote:
>
>> On Thu, Oct 04, 2018 at 09:35:08PM +0200, JJ Merelo wrote:
>> : El jue., 4 oct. 2018 21:21, Brandon Allbery <allber...@gmail.com>
>> escribió:
>> :
>> : > I don't think we've reached the point of such conventions yet. And
>> there's
>> : > some history here, in --> not having done anything in the early days
>> except
>> : > possibly slow things down, and between --> and 'returns' (which is now
>> : > deprecated).
>> : >
>> :
>> : Not yet. Maybe never...
>>
>> --> generalizes to pointy blocks and such.  'returns' doesn't.
>>
>> --> allows return of explicit literal Nil and True and 42.  'returns'
>> doesn't.
>>
>> --> makes the return an official part of the routine's contract.
>> 'returns' doesn't.
>>
>> For various purposes it would be nice to know we have the entire in/out
>> contract
>> before we start processing all the oh-by-the-way traits that can turn the
>> contract
>> into a time-traveling brain pretzel.  For instance, what if one of the
>> phaser traits
>> needs to know will be returned, and the 'returns' comes after that?
>> Putting in error
>> messages that say "Too late for returns trait" is a design smell...
>>
>> So never say never.  :)
>>
>> Larry
>>
>
>
> --
> brandon s allbery kf8nh
> allber...@gmail.com
>

Reply via email to