On Sunday, 26 March 2017 05:15:10 UTC+3, Bakul Shah wrote:
>
> The simplest design I can think of (that does what you seem to 
> want) is to add parameterized packages.  Here's a 
> stereotypical example: 
>
> ======== 
> package stack(T)        // parameterized on stack element type 
> import "fmt" 
> type Type struct { rep []T 
> func New() *Type { &T{} } 
> func (stk *Type)Push(t T) { stk.rep = append(stk.rep, t) } 
> func (stk *Type)Pop()(T, error) { 
>     var t T 
>     ln := len(stk.rep) 
>     if ln = 0 { return t, fmt.Errorf("Empty stack") } 
>     t = stk.rep[ln-1] 
>     stk.rep = st.rep[:ln-2] 
>     return t, nil 
> } 
> ======== 
> package foo 
>
> import intstack "stack"(int)        // stack of ints 
> import intstackstack "stack"(intstack.Type)        // stack of stack of 
> ints 
>
> var istk intstack.Type 
> var istkstk intstackstack.Type 
> ... 
>         istk.Push(5) 
>         x, err := istk.Pop() 
>         istkstk.Push(istk) 
> ========= 
>
> Note that 
> - This adds only two syntax rules. 
>   1. In the package header, its name can be followed by a 
>      parenthesized list of names. 
>   2. A package import must provide a complete list of types, 
>      which are concrete or its own parameter types. And such 
>      instantiated package must be given a local name. 
> - *All* we are doing is saving some typing. 
> - Given this, this feature can be expanded out via a preprocessor. 
> - Given this, no new semantics need be defined! 
> - Only one instance of a given type of package need be 
>   generated and compiled. 
> - The intstackstack example is to show composability. 
> - This actually makes interface types more useful than now. 
>
> The last point is worth elaborating on. Currently the "io" 
> package defines a bunch of interface types such as Reader, 
> Writer and so on. These interface types allow you to use 
> objects of a variety of other types so as as they implement 
> relevant functions. But "io" interface types are primarily for 
> byte slices.  If "io" was defined as a parameterized package, 
> one can have similar choices for other slice types. Currently 
> to provide similar set of useful interface types for other 
> slice types you would have to replicate a whole bunch of 
> packages. 
>
> Avoiding duplication of code should not be taken lightly. 
> Copies can diverge, bug fixes or peroformance improvements may 
> not be made consistently across all copies, newer copies may 
> not have as much testing, and as different copies may have 
> different bugs (and written by different people) each has to 
> be independently and thoroughly reviewed etc. 
>
> Go may not impress lanuage designers but it is a practical 
> language. IMHO the above has a similar feel for "generics" -- 
> it is simple, very easy to teach, it is not turing complete or 
> anything fancy but takes care of most of the common use cases. 
>
> I had looked at previous formal proposals but none seemed 
> as simple as this. 
>

https://docs.google.com/document/d/1vrAy9gMpMoS3uaVphB32uVXX4pi-HnNjkMEgyAHX4N4/edit#heading=h.wko1dvdznk4y

Bakul 
>
> On Sat, 25 Mar 2017 20:57:51 EDT David Collier-Brown <dave...@gmail.com 
> <javascript:>> wrote: 
> > Hmmn, we may be thinking different things... I *think* I'm looking for a 
> > way to say "an X of Y", and see composition as a possible approach. 
> > I just don't know if it will be a, the, or not the answer (;-)) 
> > 
> > --dave 
> > 
> > 
> > On 24/03/17 11:21 PM, Michael Jones wrote: 
> > > I think I was saying that what I seem to want personally is the 
> "simple, 
> > > weak, slight" thing that you likely see as failure. 
> > > 
> > > The opposite end of that--where everything is a list and can be 
> composed 
> > > without special regard (lisp) or everything is an object that can 
> > > receive any message (smalltalk) are comfortable for me, but just not 
> > > what I find myself wanting very often. 
> > > 
> > > My own view is not important in the sense that a broad survey would 
> be, 
> > > but since it seems much less than what people seem to dream of, I 
> wanted 
> > > to share that maybe people could be happy with less than they seek. 
> > > 
> > > Or maybe that ultimate typeless generality is what others really need 
> > > somehow. I would not know. 
> > > 
> > > On Fri, Mar 24, 2017 at 6:13 PM David Collier-Brown <dave...@gmail.com 
> <javascript:> 
> > > <mailto:dave...@gmail.com <javascript:>>> wrote: 
> > > 
> > >     We still don't understand genrality: the current generics are 
> > >     unimpressive. The proposals for Go are typically "let's do 
> something 
> > >     that has failed already, in hopes that trying it agin will have a 
> > >     different result".  That, alas, is one of the definitions of 
> insanity. 
> > > 
> > >     Due caution is advised! 
>

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