On Wed, Oct 24, 2018 at 3:52 PM Andy Balholm <andybalh...@gmail.com> wrote:
>
> What I’m doing with structural contracts is basically the same as what you’re 
> doing with struct and interface types as contracts, except that (I hope) the 
> syntax is a little clearer.
>
> I added the support for operators basically to avoid having the supportsEqual 
> contract as a special case that needs to be built in. Most other operators 
> could be handled just as well with an enumerated contract, so maybe it would 
> be better to just have supportsEqual or comparable as a built-in contract.

The only problem with that, I think, is that the contract syntax is no
longer a struct or interface. I see your point though.


> I was envisioning the type switches being evaluated at compile time if the 
> compiler was producing a type-specialized version of the generic function. 
> Min(int) would probably produce exactly the same machine code as

That's a neat idea.


>
> func MinInt(a, b int) int {
>         if a < b {
>                 return a
>         }
>         return b
> }
>
> Andy
>
> > On Oct 24, 2018, at 9:47 AM, Burak Serdar <bser...@ieee.org> wrote:
> >
> > On Wed, Oct 24, 2018 at 10:22 AM Andy Balholm <andybalh...@gmail.com> wrote:
> >>
> >> Here’s my attempt at streamlining it, as well as adding a way to deal with 
> >> the operator/method dichotomy: 
> >> https://gist.github.com/andybalholm/8165da83c10a48e56590c96542e93ff2
> >
> > Thanks!
> >
> > However,  I think yours is a somewhat different approach altogether.
> > The main idea I have is that existing types should be used as
> > contracts.  That means no operators in contracts.
> >
> > Also: when you list types in a contract:
> >
> > contract X {
> >  T1
> >  T2
> > }
> >
> > I defined it to mean that any type satisfying X must satisfy both T1 and T2.
> >
> > And with "like" type contract specifications (enumerated contracts)
> >
> > contract X like(int,int8,int16...)
> >
> > A type satisfying X is a derivative of any one of the types listed. So
> > it is possible to write:
> >
> > contract StrNum {
> >   like(int, int8, int16,...)
> >   interface {
> >      String() string
> >   }
> > }
> >
> > meaning StrNum must be an integer that implements String()
> >
> > The "type switch" for contracts imply that contracts are a runtime
> > construct. In my case, contracts are purely compile time.
> >
> >
> >>
> >> Andy
> >>
> >> On Oct 23, 2018, at 9:37 AM, Burak Serdar <bser...@ieee.org> wrote:
> >>
> >> On Mon, Oct 22, 2018 at 2:10 PM Burak Serdar <bser...@ieee.org> wrote:
> >>
> >>
> >> On Mon, Oct 22, 2018 at 1:53 PM Marvin Renich <m...@renich.org> wrote:
> >>
> >>
> >> * Burak Serdar <bser...@ieee.org> [181018 15:08]:
> >>
> >> tbh, I am not trying to avoid operator overloading, I am trying to
> >> avoid the contracts. With operator overloading, you can write:
> >>
> >> func F(a,b type T like(int,X)) {
> >>  if a<b {
> >>    ...
> >>  }
> >> }
> >>
> >> provided X is a type that supports <.
> >>
> >>
> >> Are you trying to avoid the concept of contracts or the specific syntax
> >> proposed in the design draft?
> >>
> >>
> >>
> >> My intent was to use existing types as contracts instead of an
> >> abstract contract specification. In this scenario, a contract is a
> >> more abstract concept that an interface. Above, type T like(int,X)
> >> would mean:
> >> - func F compiles for T=int and T=X
> >> - F can be instantiated for any type derived from int or X
> >> So instead of specifying the precise type semantics required by F,
> >> you'd approximate the intent and declare that F would work for types
> >> that look like int, and X.
> >>
> >> When you apply the same idea to structs:
> >>
> >> type T like struct {a, b, int}
> >>
> >> would mean that T can be substituted by any struct containing two int
> >> fields called a and b.
> >>
> >> This idea ran into problems later on: I cannot explain simple
> >> contracts such as "type T must support ==".
> >>
> >>
> >>
> >> I typed this up in a more organized way, and it turned out to be an
> >> alternative declaration for contracts without touching the generics
> >> parts of the proposal.
> >>
> >> https://gist.github.com/bserdar/8f583d6e8df2bbec145912b66a8874b3
> >>
> >> --
> >> 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.
> >>
> >>
>

-- 
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