Skip to content

v2.5.0-beta2

Pre-release
Pre-release
Compare
Choose a tag to compare
@fxamacker fxamacker released this 21 Feb 00:02
· 321 commits to master since this release
f9e6291

There are fewer changes in v2.5.0-beta2 compared to v2.5.0-beta. Speed and memory improvements since v2.4.0 are from v2.5.0-beta. Tests cover 98.5% and reached 100% coverage for stream.go (e.g. Decoder using the provided io.Reader).

What's Changed Since v2.5.0-beta

  • Retry in Decoder if io.Reader's Read() returns 0 bytes read with nil error by @fxamacker in #387
    • This PR also added more tests so we have 100% coverage for stream.go.
  • Update fxamacker_cbor_banner.png for v2.5 by @x448 in #383
  • bump safer-golangci-lint.yml to 1.51.1 by @x448 in #389

Go language recommends that Read implementations for io.Reader avoid returning 0 with nil error. It also recommends that callers receiving 0 and nil from Read should treat it as if nothing happened. This edge case is handled properly now.

@x448 shared benchmarks comparison of v2.4.0 vs v2.5.0-beta2. Performance improvements are from v2.5.0-beta.

Comparison of v2.5.0-beta2 vs v2.4.0

$ benchstat benchNewEncoderEncode-v2.4.0.log benchNewEncoderEncode-f9e6291.log 
goos: linux
goarch: amd64
pkg: github.com/fxamacker/cbor/v2
cpu: 12th Gen Intel(R) Core(TM) i7-12700H
                                                     │ benchNewEncoderEncode-v2.4.0.log │  benchNewEncoderEncode-f9e6291.log  │
                                                     │              sec/op              │   sec/op     vs base                │
NewEncoderEncode/Go_bool_to_CBOR_bool-20                                   236.70n ± 2%   58.04n ± 1%  -75.48% (p=0.000 n=10)
NewEncoderEncode/Go_uint64_to_CBOR_positive_int-20                         238.00n ± 2%   63.93n ± 1%  -73.14% (p=0.000 n=10)
NewEncoderEncode/Go_int64_to_CBOR_negative_int-20                          238.65n ± 2%   64.88n ± 1%  -72.81% (p=0.000 n=10)
NewEncoderEncode/Go_float64_to_CBOR_float-20                               242.00n ± 2%   63.00n ± 1%  -73.97% (p=0.000 n=10)
NewEncoderEncode/Go_[]uint8_to_CBOR_bytes-20                               245.60n ± 1%   68.55n ± 1%  -72.09% (p=0.000 n=10)
NewEncoderEncode/Go_string_to_CBOR_text-20                                 243.20n ± 3%   68.39n ± 1%  -71.88% (p=0.000 n=10)
NewEncoderEncode/Go_[]int_to_CBOR_array-20                                  563.0n ± 2%   378.3n ± 0%  -32.81% (p=0.000 n=10)
NewEncoderEncode/Go_map[string]string_to_CBOR_map-20                        2.043µ ± 2%   1.906µ ± 2%   -6.75% (p=0.000 n=10)
geomean                                                                     349.7n        122.7n       -64.92%

                                                     │ benchNewEncoderEncode-v2.4.0.log │    benchNewEncoderEncode-f9e6291.log    │
                                                     │               B/op               │    B/op     vs base                     │
NewEncoderEncode/Go_bool_to_CBOR_bool-20                                     128.0 ± 0%     0.0 ± 0%  -100.00% (p=0.000 n=10)
NewEncoderEncode/Go_uint64_to_CBOR_positive_int-20                           128.0 ± 0%     0.0 ± 0%  -100.00% (p=0.000 n=10)
NewEncoderEncode/Go_int64_to_CBOR_negative_int-20                            128.0 ± 0%     0.0 ± 0%  -100.00% (p=0.000 n=10)
NewEncoderEncode/Go_float64_to_CBOR_float-20                                 128.0 ± 0%     0.0 ± 0%  -100.00% (p=0.000 n=10)
NewEncoderEncode/Go_[]uint8_to_CBOR_bytes-20                                 128.0 ± 0%     0.0 ± 0%  -100.00% (p=0.000 n=10)
NewEncoderEncode/Go_string_to_CBOR_text-20                                   128.0 ± 0%     0.0 ± 0%  -100.00% (p=0.000 n=10)
NewEncoderEncode/Go_[]int_to_CBOR_array-20                                   128.0 ± 0%     0.0 ± 0%  -100.00% (p=0.000 n=10)
NewEncoderEncode/Go_map[string]string_to_CBOR_map-20                         544.0 ± 0%   416.0 ± 0%   -23.53% (p=0.000 n=10)
geomean                                                                      153.4                    ?                       ¹ ²
¹ summaries must be >0 to compute geomean
² ratios must be >0 to compute geomean

                                                     │ benchNewEncoderEncode-v2.4.0.log │    benchNewEncoderEncode-f9e6291.log    │
                                                     │            allocs/op             │ allocs/op   vs base                     │
NewEncoderEncode/Go_bool_to_CBOR_bool-20                                     2.000 ± 0%   0.000 ± 0%  -100.00% (p=0.000 n=10)
NewEncoderEncode/Go_uint64_to_CBOR_positive_int-20                           2.000 ± 0%   0.000 ± 0%  -100.00% (p=0.000 n=10)
NewEncoderEncode/Go_int64_to_CBOR_negative_int-20                            2.000 ± 0%   0.000 ± 0%  -100.00% (p=0.000 n=10)
NewEncoderEncode/Go_float64_to_CBOR_float-20                                 2.000 ± 0%   0.000 ± 0%  -100.00% (p=0.000 n=10)
NewEncoderEncode/Go_[]uint8_to_CBOR_bytes-20                                 2.000 ± 0%   0.000 ± 0%  -100.00% (p=0.000 n=10)
NewEncoderEncode/Go_string_to_CBOR_text-20                                   2.000 ± 0%   0.000 ± 0%  -100.00% (p=0.000 n=10)
NewEncoderEncode/Go_[]int_to_CBOR_array-20                                   2.000 ± 0%   0.000 ± 0%  -100.00% (p=0.000 n=10)
NewEncoderEncode/Go_map[string]string_to_CBOR_map-20                         28.00 ± 0%   26.00 ± 0%    -7.14% (p=0.000 n=10)
geomean                                                                      2.782                    ?                       ¹ ²
¹ summaries must be >0 to compute geomean
² ratios must be >0 to compute geomean

Full Changelog: v2.5.0-beta...v2.5.0-beta2