]> Cypherpunks repositories - gostls13.git/commit
encoding/gob: remove unsafe, use reflection.
authorRob Pike <r@golang.org>
Mon, 30 Jun 2014 18:06:47 +0000 (11:06 -0700)
committerRob Pike <r@golang.org>
Mon, 30 Jun 2014 18:06:47 +0000 (11:06 -0700)
commit3050a0a7d2bccede88c56828609902469328e15f
treefbbbf69d86b978ccc4bb570173214f0a435ff703
parent3e692becfe69a7b80dbf4af983eb620f65549f02
encoding/gob: remove unsafe, use reflection.
This removes a major unsafe thorn in our side, a perennial obstacle
to clean garbage collection.
Not coincidentally: In cleaning this up, several bugs were found,
including code that reached inside by-value interfaces to create
pointers for pointer-receiver methods. Unsafe code is just as
advertised.

Performance of course suffers, but not too badly. The Pipe number
is more indicative, since it's doing I/O that simulates a network
connection. Plus these are end-to-end, so each end suffers
only half of this pain.

The edit is pretty much a line-by-line conversion, with a few
simplifications and a couple of new tests. There may be more
performance to gain.

BenchmarkEndToEndByteBuffer     2493          3033          +21.66%
BenchmarkEndToEndPipe           4953          5597          +13.00%

Fixes #5159.

LGTM=rsc
R=rsc
CC=golang-codereviews, khr
https://golang.org/cl/102680045
src/pkg/encoding/gob/codec_test.go
src/pkg/encoding/gob/debug.go
src/pkg/encoding/gob/decode.go
src/pkg/encoding/gob/encode.go
src/pkg/encoding/gob/encoder_test.go
src/pkg/encoding/gob/gobencdec_test.go
src/pkg/encoding/gob/timing_test.go