On Sun, Oct 1, 2023 at 4:16 PM Ernie Rael <err...@raelity.com> wrote:

> On 23/10/01 2:56 PM, Yegappan Lakshmanan wrote:
>
>
> On Sun, Oct 1, 2023 at 11:06 AM Ernie Rael <err...@raelity.com> wrote:
>
>> On 23/10/01 6:44 AM, Yegappan Lakshmanan wrote:
>>
>> Hi,
>>
>> On Sun, Oct 1, 2023 at 5:17 AM shane qian <shane.q...@live.com> wrote:
>>
>>> and I meant vim9script so far I felt it's good for type-checking and
>>> performance, but vim9 class to me I felt a bit burdened, not sure if
>>> still a chance to make it be simple to use (use for scripting), still wish
>>> that's the goal. @errael  @yegappan
>>>
>>>
>> I haven't introduced any fancy OOP features so far.  These are the
>> features
>> that Bram has partially implemented or planned for and were already in
>> the todo list.
>>
>> The spec clearly says (said)
>>
>> Object methods of the base class can be overruled.  *The signature
>> (arguments,*
>> *argument types and return type) must be exactly the same*.  The method
>> of the
>> base class can be called by prefixing "super.".
>>
>> I can't find where Bram partially implemented or planned to allow
>> contravariant parameters. In fact it looks the other way around. See
>> comments
>> https://github.com/vim/vim/pull/13221#issuecomment-1741637630 .
>>
>> After we've all worked hard to resolve incomplete spec issues (thinking
>> statics) and to get the implementation to meet the spec. This last minute
>> spec change, which doesn't seem to offer any useful functionality and
>> hasn't been discussed or tested, feels ill-conceived.
>>
>
> We have two options for the method parameter types.
>
>
> Actually, we have *three options*. We could follow the original spec
> which is invariant parameters: The signature [...] must be exactly the same.
>
> I've been repeating myself. But I still have not seen any answer as to why
> the spec, invariant parameters, should be changed rather than simply
> enforcing the spec for vim9.1, and revisiting
> the issue at some future point. I'd be interested in seeing a real world
> example that makes this
> change worthwhile.
>

I have created PR https://github.com/vim/vim/pull/13248 to use invariant
type check instead
of contra-variant type check for the derived method argument type checks.
We can revisit
this type check later.

- Yegappan


> To be clear, if a method signature says "def Foo(): return A", that
> doesn't mean that a subclass of A can't be returned from Foo().
>
> We can either follow the Typescript/Java
> specification, which supports covariance for the method parameters or
> follow the Dart specification
> which supports contra-variance for the method parameters.  As we are
> already following the Dart
> specification for interfaces, I choose the Dart specification.
>
>
> So what if we chose Dart for one thing. There are some cases where other
> languages are followed, the idea is to pick something consistent with the
> vim9script design philosophy. I do not understand why change the spec for a
> confusing concept. I've only seen contravariant parameters in relationship
> to generics, for example
>
> In the common case of a generic data structure ilist, covariant parameters
> are used for methods getting data out of the structure, and contravariant
> parameters for methods putting data into the structure. the mnemonic for
> Producer Extends, Consumer Super (PECS), from the book Effective Java by
> Joshua Bloch gives an easy way to remember when to use covariance and
> contravariance.
>
> But in our case we are not talking about a generic data structures. And no
> matter what words you use to describe it, it is not a simple concept. I
> still review PECS when I design a Java generic class/method. IIRC, generics
> are on the vim9class todo list; that's probably the proper time to consider
> contravariant parameters.
>
> -ernie
>
>
>
>> While this may be something for the future, *I see no reason to change
>> the spec now*.
>>
>> These features are basic to any OOP language.
>>
>> Can you point to a language that doesn't have overloaded methods that
>> allows contravariant parameters? I'm not saying there aren't any (I'm just
>> a country language-lawyer).
>>
>
> Are you referring to covariant parameters here?  If you are, then Dart
> allows only contravariant parameters
> for overloaded methods.
>
> Regards,
> Yegappan
>
>
>>
>

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/CAAW7x7%3DhFSqf28Oj_en5y%3D0Sqer%3DfJESfe9iwuQm0FrmHyA7cw%40mail.gmail.com.

Raspunde prin e-mail lui