On Tue, May 3, 2022 at 10:59 PM 'Axel Wagner' via golang-nuts
<golang-nuts@googlegroups.com> wrote:
>
>> As a tangent, I don't understand why this wasn't made unambiguous in the 
>> language spec. Why not have `new(struct{})` always allocate a new pointer? 
>> Who's allocating all these empty structs on the heap where this is something 
>> that needs to be optimized for? Is that really worth complicating the 
>> language? 🤔
>
>
> I don't know why that decision was made. I do believe there are some less 
> obvious cases, where you at least have to add special casing in the 
> implementation (e.g. make([]T, x) would have to check at runtime if x is 0). 
> But I agree that it would probably be okay to change the spec here.

Zero sized values are useful in Go, because they can have methods and
they can be stored in interfaces.  But if the addresses of zero-sized
values must be distinct, then although zero-sized values appear to
have zero size they must in fact be implemented as taking up one byte.
For example, given `struct { a, b struct{} }`, the addresses of `a`
and `b` must be distinct, so that struct is actually two bytes.  So,
sure, we could change it.  But there are surprising results either
way.

(Historically this was introduced for https://go.dev/issue/2620.)

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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAOyqgcU%3DTdSF1co2jyeQuUhk2P7giwf33tdK6p%2Bd8UgaXO4Tng%40mail.gmail.com.

Reply via email to