• Rob Pike's avatar
    encoding/gob: remove unsafe, use reflection. · 3050a0a7
    Rob Pike authored
    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
    3050a0a7
encoder_test.go 21.1 KB