Why couldn't maps be implemented as a pointer to the map implementation? If 
you try to use the map and the pointer is nil, then the map allocates the 
backing implementation. Pseudocode for a built-in implementation:

type map struct {
    impl *mapimpl
}

func (m map) set(k, v interface{}) { // used for m[k] = v
    if m.impl == nil {
        m.impl = newMapImpl()
    }
    m.impl.set(k, v)
}

On Tuesday, April 18, 2017 at 7:16:25 AM UTC-7, Ian Lance Taylor wrote:
>
> On Tue, Apr 18, 2017 at 7:02 AM, Jesse McNelis <jes...@jessta.id.au 
> <javascript:>> wrote: 
> > On Tue, Apr 18, 2017 at 10:04 PM, Tad Vizbaras <eta...@gmail.com 
> <javascript:>> wrote: 
> >> I am just curious what is the reason behind not making zero maps more 
> >> useful? Is it space? 
> > 
> > The problem is that maps are mutable. 
> > 
> > var a map[int]int 
> > a[1] = 1  // could be fine and useful. 
> > 
> > var a map[int]int 
> > someFunc(a)  // Does someFunc need to return the map or not? 
> > 
> > If someFunc() allocates the map(because it got nil) by adding 
> > something to it then it needs to return the map it allocated to it's 
> > caller. 
> > But if it didn't need to allocate because it got a valid map it 
> > doesn't need to return the map. 
> > 
> > The possibility that a function might be passed a nil map would then 
> > mean that all functions that work with maps would need to always 
> > return the map. 
>
> And another reason is that it's very convenient for the zero value for 
> all types to be literally a sequence of zero bytes.  We could never 
> figure out how to preserve that property while not requiring the make 
> call for map values.  In the very early days what we call maps now 
> were written as pointers, so you wrote *map[int]int.  We moved away 
> from that when we realized that no one ever wrote `map` without 
> writing `*map`.  That simplified many things but it left this issue 
> behind as a complication. 
>
> The most plausible fix that I know for this is to invent a map 
> function that is similar to the append function, but I haven't yet 
> seen a good design for that. 
>
> Ian 
>

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