Hi all,

I just found out that there is a wiki 
<https://github.com/golang/go/wiki/Go2GenericsFeedback> for this kind of 
discussion,  looks to me like a better venue, more organised, more 
interest, 
and just recently proposed on golang.org.

Scott


On Sunday, 2 September 2018 10:09:43 UTC+2, Tristan Colgate wrote:
>
> Just read:
>
> https://emilymaier.net/words/getting-specific-about-generics/
>
> I think I concur, keep specification of behaviour in interfaces if 
> possible.
>
> Contracts overlap too much. If interfaces can do the job, all be it less 
> elegantly, the extra verbosity seems worth it to avoid the feature overlap.
>
> What I'm mostly worried about is a future where new comers have to learn 
> two overlapping features. Inevitably people won't stop using interfaces.
>
> Contracts are too expensive, cognitively, if they aren't going to become 
> pervasive, but that seems to throw out interfaces (even if they can be made 
> to cooperate).
>
>
> On Sat, 1 Sep 2018, 21:55 roger peppe, <rogp...@gmail.com <javascript:>> 
> wrote:
>
>> FWIW I've published some ideas about how contracts and interface types
>> could be partially unified, and contracts significantly simplified,
>> which I think is quite pertinent to the above discussion.
>>
>> Doc here:
>>
>> https://gist.github.com/rogpeppe/45f5a7578507989ec4ba5ac639ae2c69
>>
>>
>>
>> On 1 September 2018 at 20:15, Scott Cotton <w...@iri-labs.com 
>> <javascript:>> wrote:
>> >
>> >
>> > On Saturday, 1 September 2018 20:29:31 UTC+2, Axel Wagner wrote:
>> >>
>> >> I don't understand what you are trying to say. You assert that there
>> >> wouldn't be a type-error, but you don't actually justify that.
>> >
>> >
>> > There are 2 examples,  both are (to me) intuitive suggestions and not 
>> the
>> > result of a phd thesis worth of research :)  continued below.
>> >
>> >
>> >
>> >> It seems pretty obvious to me, that if you instantiate my MultiReader
>> >> example to, say, *strings.Reader, it would fail to compile. Because
>> >> *multiReader is not a *strings.Reader (and you'd have to replace R with
>> >> *strings.Reader everywhere in the signature, that is the exact reason 
>> we
>> >> want generics to begin with).
>> >
>> >
>> > That's why I didn't use R for another, distinct Reader.  For the 
>> signature
>> > of your MultiReader example I changed the return type from "R" (the type
>> > argument) to "Reader" (the name of the contract).  In a hand-wavy formal
>> > way, the return type would serve as a new type argument to Reader,
>> > independent of R.  Put in an intuitive (to me) way: Since MultiReader
>> > returns something which presumably conforms to the contract Reader, why 
>> not
>> > just say that instead of the type argument R?
>> >
>> >
>> >>
>> >> The example you give for "unifying this" isn't actually syntactically
>> >> correct, AFAICT. At least I can't find anything in the design that 
>> would
>> >> allow using the identifier of the contract in its arguments - and it's
>> >> unclear to me what that would mean.
>> >
>> >
>> > Apologies, I'm responding to the proposal, just giving my 2 cents.  I 
>> am not
>> > asserting that the examples I give are syntactically correct according 
>> to
>> > the proposal.  I am suggesting that the concepts of "contract" and
>> > "interface",  can (probably) be defined for Go
>> > in a unified way.  I am not  supposing the definitions in the proposal 
>> of
>> > "interface" and "contract" in suggesting this; to the contrary I am
>> > suggesting these concepts are what Go would define them to be and hence 
>> are
>> > flexible and not yet fixed.  I do not think saying interfaces and 
>> contracts
>> > are different because the proposal or other background such as Haskell 
>> or
>> > type theory treat them differently is a convincing counterargument to my
>> > suggestion of exploring the unification of contract and interface.
>> >
>> >>
>> >>
>> >> To provide another way to clarify that interfaces and contracts are
>> >> different:
>> >
>> >
>> > This again assumes a priori interfaces and contracts are different.  I 
>> am
>> > trying to suggest to drop this assumption and see what happens.  To me, 
>> it
>> > seems, so far, good things would happen.
>> >
>> >>
>> >> * How would you build fmt.Println using contracts?
>> >>
>> >> * One of the main motivators behind adding generics is the lack of
>> >> type-safety for containers (say, container/list). While all methods 
>> mention
>> >> the same type, interface{}, it is not checked for consistency between
>> >> invocations. This is a bug for type-safe containers, but it's a 
>> feature for
>> >> fmt.Println.
>> >
>> >
>> > So perhaps containers could use a contract which does not instantiate 
>> each
>> > type argument distinctly, forcing uniformity of types and
>> > more or less like in the proposal.  And perhaps situations desiring
>> > heterogenous types, such as fmt,*f(), could use a different kind of
>> > contract which instantiates each type argument independently at the call
>> > site.  To distinguish them, some syntax could be proposed such as
>> >
>> > contract Reader(r Reader.(*)) { ... }
>> > vs
>> > contract Reader(r Reader) {...}
>> >
>> > I am far from the genius who is capable of thinking this idea through 
>> and
>> > making it as solid as the proposal overnight.  Just expressing the 
>> opinion
>> > that unifying the concepts of contract and interface seems to me like a 
>> good
>> > idea to explore, and that a priori assuming they are different doesn't 
>> help
>> > advance exploring it.
>> >
>> > Scott
>> >
>> >
>> >
>> >
>> >
>> >
>> > --
>> > You received this message because you are subscribed to the Google 
>> Groups
>> > "golang-nuts" group.
>> > To unsubscribe from this group and stop receiving emails from it, send 
>> an
>> > email to golang-nuts...@googlegroups.com <javascript:>.
>> > For more options, visit https://groups.google.com/d/optout.
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to golang-nuts...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to