This seems to me to be the better solution (but it's still in the pipeline?) https://github.com/golang/go/issues/19367an unsafe, rather than reflect, access to the slice structure, which allows a user to do.. interesting things to the object. Am I correct in thinking that this change (when implemented) removes the reflect implementations, and does away with the comments?
--
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.
To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/669b67cd-6336-49ae-be04-4eade048b84an%40googlegroups.com.
On Tue, Nov 10, 2020 at 11:09 AM shan...@gmail.com <shan...@gmail.com> wrote:
> My confusion is this, the comment says (very clearly)
> It's not safe, nor portable, and may change (although I have had it pointed out to me that the comparability guarantee may contradict this)
It does not. When there exists explicit documentation for the
contrary, it means the contrary.
> Further the Data field reference won't stop the Garbage collector removing the data
It's the same as for any other uintptr anywhere else. It's not a
pointer and thus does not guarantee reachability of its "pointee". The
documentation just reminds of this.
> So, can someone explain to me what it's purpose in life is (there's suggestion that it was a temporary fix that, like all things temporary, has become permanent, and if so, I wonder if that means the documentation needs updating)
This does not make reflect.SliceHeader unusable though. The
reflect.SliceHeader is either aliased to a real slice or is later
unsafely converted to one. Then the uintptr field is no more an
uintptr, but a real pointer. The documentation points out that _in
between_ one has to guarantee the reachability by other means, the
only pseudo-reference of the uintptr value is not sufficient for that.
I see nothing in the documentation that needs to be updated. It's
possible that it could be improved to become better understood as it
seems it's not always working that way.
This seems to me to be the better solution (but it's still in the pipeline?) https://github.com/golang/go/issues/19367an unsafe, rather than reflect, access to the slice structure, which allows a user to do.. interesting things to the object. Am I correct in thinking that this change (when implemented) removes the reflect implementations, and does away with the comments?I agree that with unsafe.Slice there shouldn't be any more use cases that necessitate use of reflect.SliceHeader. I don't think it should be removed outright though. There is no need to break existing programs using it, even if we consider it allowed from the compatibility guarantee. Likewise, the comments should persist, so that readers of existing code can look up its documentation.We can definitely add a note that unsafe.Slice and &a[0]/len/cap should be used instead, though.
But, just to be clear, I also don't think anything substantially changes in terms of compatibility guarantees - unsafe.Slice will give just as little a guarantee as reflect.SliceHeader does today.