-
codec/bench/v1.2.7
Release 1.2.7 This is a production release of go-codec. Changes include: - support registering extension functions for time.Time - fix bugs with encoding/decoding very-nested slices in specific cases Please try it out and share your experiences.
-
codec/codecgen/v1.2.7
Release 1.2.7 This is a production release of go-codec. Changes include: - support registering extension functions for time.Time - fix bugs with encoding/decoding very-nested slices in specific cases Please try it out and share your experiences.
-
codec/v1.2.7
Release 1.2.7 This is a production release of go-codec. Changes include: - support registering extension functions for time.Time - fix bugs with encoding/decoding very-nested slices in specific cases Please try it out and share your experiences.
-
v1.2.7
Release 1.2.7 This is a production release of go-codec. Changes include: - support registering extension functions for time.Time - fix bugs with encoding/decoding very-nested slices in specific cases Please try it out and share your experiences.
-
codec/bench/v1.2.6
Release 1.2.6 This is a production release of go-codec. Changes include: - EncodeOptions.NoAddressableReadonly - streamline/reduce size of helper types - optimize side(En|De)code and (En|De)codeExt calls - decode a number from any number in the stream i.e. you can decode a float/integer/unsigned integer from any number in stream - clean up tests so they work completely regardless if we recover from panics - improve inlining of common functions Please try it out and share your experiences.
-
codec/codecgen/v1.2.6
Release 1.2.6 This is a production release of go-codec. Changes include: - EncodeOptions.NoAddressableReadonly - streamline/reduce size of helper types - optimize side(En|De)code and (En|De)codeExt calls - decode a number from any number in the stream i.e. you can decode a float/integer/unsigned integer from any number in stream - clean up tests so they work completely regardless if we recover from panics - improve inlining of common functions Please try it out and share your experiences.
-
codec/v1.2.6
Release 1.2.6 This is a production release of go-codec. Changes include: - EncodeOptions.NoAddressableReadonly - streamline/reduce size of helper types - optimize side(En|De)code and (En|De)codeExt calls - decode a number from any number in the stream i.e. you can decode a float/integer/unsigned integer from any number in stream - clean up tests so they work completely regardless if we recover from panics - improve inlining of common functions Please try it out and share your experiences.
-
v1.2.6
Release 1.2.6 This is a production release of go-codec. Changes include: - EncodeOptions.NoAddressableReadonly - streamline/reduce size of helper types - optimize side(En|De)code and (En|De)codeExt calls - decode a number from any number in the stream i.e. you can decode a float/integer/unsigned integer from any number in stream - clean up tests so they work completely regardless if we recover from panics - improve inlining of common functions Please try it out and share your experiences.
-
codec/bench/v1.2.5
Release 1.2.5 This is a production release of go-codec. This is a very important release, building upon the optimization introduced in v1.2.4. Changes include: - support gollvm in addition to gccgo in default high-performance mode - support codec.safe and codec.notfastpath as preferred build tags (replacing safe and notfastpath) - support Canonical mode with MissingFielder - robust handling of codecgen caveats wrt Canonical|CheckCircularRef flags and MissingFielder implementations - robust handling of transient values, where we track if a value has internal pointers and handle appropriately - reduce use of global values: all in-use values are scoped to an Encoder or Decoder - implement stateManager for Encoder/Decoder, supporting capture, reset and restore functions. - side encoding or decoding can now reuse an Encoder/Decoder, leveraging state management to capture its state, do something else, then restore its state and continue - support running all tests in parallel, so we can shake out any concurrency issues - Fix issue in rpc where writer was not being flushed, causing a hang where reader was waiting on an encoded value - Support shallow copies of a Handle, to support parallel execution where we need to temporarily change some Handler fields This is the best release yet. Please try it out and share your experiences.
-
codec/codecgen/v1.2.5
Release 1.2.5 This is a production release of go-codec. This is a very important release, building upon the optimization introduced in v1.2.4. Changes include: - support gollvm in addition to gccgo in default high-performance mode - support codec.safe and codec.notfastpath as preferred build tags (replacing safe and notfastpath) - support Canonical mode with MissingFielder - robust handling of codecgen caveats wrt Canonical|CheckCircularRef flags and MissingFielder implementations - robust handling of transient values, where we track if a value has internal pointers and handle appropriately - reduce use of global values: all in-use values are scoped to an Encoder or Decoder - implement stateManager for Encoder/Decoder, supporting capture, reset and restore functions. - side encoding or decoding can now reuse an Encoder/Decoder, leveraging state management to capture its state, do something else, then restore its state and continue - support running all tests in parallel, so we can shake out any concurrency issues - Fix issue in rpc where writer was not being flushed, causing a hang where reader was waiting on an encoded value - Support shallow copies of a Handle, to support parallel execution where we need to temporarily change some Handler fields This is the best release yet. Please try it out and share your experiences.
-
codec/v1.2.5
Release 1.2.5 This is a production release of go-codec. This is a very important release, building upon the optimization introduced in v1.2.4. Changes include: - support gollvm in addition to gccgo in default high-performance mode - support codec.safe and codec.notfastpath as preferred build tags (replacing safe and notfastpath) - support Canonical mode with MissingFielder - robust handling of codecgen caveats wrt Canonical|CheckCircularRef flags and MissingFielder implementations - robust handling of transient values, where we track if a value has internal pointers and handle appropriately - reduce use of global values: all in-use values are scoped to an Encoder or Decoder - implement stateManager for Encoder/Decoder, supporting capture, reset and restore functions. - side encoding or decoding can now reuse an Encoder/Decoder, leveraging state management to capture its state, do something else, then restore its state and continue - support running all tests in parallel, so we can shake out any concurrency issues - Fix issue in rpc where writer was not being flushed, causing a hang where reader was waiting on an encoded value - Support shallow copies of a Handle, to support parallel execution where we need to temporarily change some Handler fields This is the best release yet. Please try it out and share your experiences.
-
v1.2.5
Release 1.2.5 This is a production release of go-codec. This is a very important release, building upon the optimization introduced in v1.2.4. Changes include: - support gollvm in addition to gccgo in default high-performance mode - support codec.safe and codec.notfastpath as preferred build tags (replacing safe and notfastpath) - support Canonical mode with MissingFielder - robust handling of codecgen caveats wrt Canonical|CheckCircularRef flags and MissingFielder implementations - robust handling of transient values, where we track if a value has internal pointers and handle appropriately - reduce use of global values: all in-use values are scoped to an Encoder or Decoder - implement stateManager for Encoder/Decoder, supporting capture, reset and restore functions. - side encoding or decoding can now reuse an Encoder/Decoder, leveraging state management to capture its state, do something else, then restore its state and continue - support running all tests in parallel, so we can shake out any concurrency issues - Fix issue in rpc where writer was not being flushed, causing a hang where reader was waiting on an encoded value - Support shallow copies of a Handle, to support parallel execution where we need to temporarily change some Handler fields This is the best release yet. Please try it out and share your experiences.
-
codec/bench/v1.2.4
Release 1.2.4 This is a production release of go-codec. This is a very important release, which focused on optimization across the board to ensure that go-codec is the most performant library for popular encoding formats. Optimizations across the board include: - optimization by eliding allocation where not necessary e.g. - when encoding non-addressable value with ptr receiver - map iteration/access - decoding floats - creating slices or sub-slices (removing temporary slice allocated on heap) - decoding map keys if both key and value kinds are scalars - decoding map values if value kind is a scalar - better reuse of pool'ed []byte(s) - leveraging mapXXX_fastXXX calls where possible - better inlining (where applicable) e.g. arrayStart, mapStart, etc - support complex numbers (where we treat complex numbers as floats with imaginary part = 0) - optimize encoding and decoding arrays, including using fast-paths for slices as applicable - use runtime's growslice algorithm when growing arrays for better performance - optimize nextValueBytes and swallow so they do not allocate when applicable e.g. do not allocate/copy bytes if swallow is called or you were decoding from a []byte (just return a sub-slice) - optimize isEmptyStruct to just compare if value == zero'es (instead of field by field), simulating comparing to zero value. To guarantee better fairness in benchmarking, we did the following: - use common types in benchmarks and common methods to ensure fairness in benchmarks - run benchmarks with ZeroCopy=true and (MapValue|Interface|SliceElement)Reset = true, aligning with how other libraries operate by default With these changes, we have reflection-based mode performing within 25% of codecgen, with similar allocation numbers as codecgen. For example, encoding typically has just 1 allocation without codecgen (just as in codecgen). This is the best release yet. Please try it out and share your experiences.
-
codec/codecgen/v1.2.4
Release 1.2.4 This is a production release of go-codec. This is a very important release, which focused on optimization across the board to ensure that go-codec is the most performant library for popular encoding formats. Optimizations across the board include: - optimization by eliding allocation where not necessary e.g. - when encoding non-addressable value with ptr receiver - map iteration/access - decoding floats - creating slices or sub-slices (removing temporary slice allocated on heap) - decoding map keys if both key and value kinds are scalars - decoding map values if value kind is a scalar - better reuse of pool'ed []byte(s) - leveraging mapXXX_fastXXX calls where possible - better inlining (where applicable) e.g. arrayStart, mapStart, etc - support complex numbers (where we treat complex numbers as floats with imaginary part = 0) - optimize encoding and decoding arrays, including using fast-paths for slices as applicable - use runtime's growslice algorithm when growing arrays for better performance - optimize nextValueBytes and swallow so they do not allocate when applicable e.g. do not allocate/copy bytes if swallow is called or you were decoding from a []byte (just return a sub-slice) - optimize isEmptyStruct to just compare if value == zero'es (instead of field by field), simulating comparing to zero value. To guarantee better fairness in benchmarking, we did the following: - use common types in benchmarks and common methods to ensure fairness in benchmarks - run benchmarks with ZeroCopy=true and (MapValue|Interface|SliceElement)Reset = true, aligning with how other libraries operate by default With these changes, we have reflection-based mode performing within 25% of codecgen, with similar allocation numbers as codecgen. For example, encoding typically has just 1 allocation without codecgen (just as in codecgen). This is the best release yet. Please try it out and share your experiences.
-
codec/v1.2.4
Release 1.2.4 This is a production release of go-codec. This is a very important release, which focused on optimization across the board to ensure that go-codec is the most performant library for popular encoding formats. Optimizations across the board include: - optimization by eliding allocation where not necessary e.g. - when encoding non-addressable value with ptr receiver - map iteration/access - decoding floats - creating slices or sub-slices (removing temporary slice allocated on heap) - decoding map keys if both key and value kinds are scalars - decoding map values if value kind is a scalar - better reuse of pool'ed []byte(s) - leveraging mapXXX_fastXXX calls where possible - better inlining (where applicable) e.g. arrayStart, mapStart, etc - support complex numbers (where we treat complex numbers as floats with imaginary part = 0) - optimize encoding and decoding arrays, including using fast-paths for slices as applicable - use runtime's growslice algorithm when growing arrays for better performance - optimize nextValueBytes and swallow so they do not allocate when applicable e.g. do not allocate/copy bytes if swallow is called or you were decoding from a []byte (just return a sub-slice) - optimize isEmptyStruct to just compare if value == zero'es (instead of field by field), simulating comparing to zero value. To guarantee better fairness in benchmarking, we did the following: - use common types in benchmarks and common methods to ensure fairness in benchmarks - run benchmarks with ZeroCopy=true and (MapValue|Interface|SliceElement)Reset = true, aligning with how other libraries operate by default With these changes, we have reflection-based mode performing within 25% of codecgen, with similar allocation numbers as codecgen. For example, encoding typically has just 1 allocation without codecgen (just as in codecgen). This is the best release yet. Please try it out and share your experiences.
-
v1.2.4
Release 1.2.4 This is a production release of go-codec. This is a very important release, which focused on optimization across the board to ensure that go-codec is the most performant library for popular encoding formats. Optimizations across the board include: - optimization by eliding allocation where not necessary e.g. - when encoding non-addressable value with ptr receiver - map iteration/access - decoding floats - creating slices or sub-slices (removing temporary slice allocated on heap) - decoding map keys if both key and value kinds are scalars - decoding map values if value kind is a scalar - better reuse of pool'ed []byte(s) - leveraging mapXXX_fastXXX calls where possible - better inlining (where applicable) e.g. arrayStart, mapStart, etc - support complex numbers (where we treat complex numbers as floats with imaginary part = 0) - optimize encoding and decoding arrays, including using fast-paths for slices as applicable - use runtime's growslice algorithm when growing arrays for better performance - optimize nextValueBytes and swallow so they do not allocate when applicable e.g. do not allocate/copy bytes if swallow is called or you were decoding from a []byte (just return a sub-slice) - optimize isEmptyStruct to just compare if value == zero'es (instead of field by field), simulating comparing to zero value. To guarantee better fairness in benchmarking, we did the following: - use common types in benchmarks and common methods to ensure fairness in benchmarks - run benchmarks with ZeroCopy=true and (MapValue|Interface|SliceElement)Reset = true, aligning with how other libraries operate by default With these changes, we have reflection-based mode performing within 25% of codecgen, with similar allocation numbers as codecgen. For example, encoding typically has just 1 allocation without codecgen (just as in codecgen). This is the best release yet. Please try it out and share your experiences.
-
codec/bench/v1.2.3
Release 1.2.3 This is a production release of go-codec. This optimizes decoding for *zero-copy* mode when decoding from a string or []byte. With this mode, we see 50% reduction in allocation in both codecgen and normal execution, and this gives performance better than other libraries (easyjson, json-iterator, etc) while providing much more features and supported formats (json, cbor, msgpack, simple, etc).
-
codec/codecgen/v1.2.3
Release 1.2.3 This is a production release of go-codec. This optimizes decoding for *zero-copy* mode when decoding from a string or []byte. With this mode, we see 50% reduction in allocation in both codecgen and normal execution, and this gives performance better than other libraries (easyjson, json-iterator, etc) while providing much more features and supported formats (json, cbor, msgpack, simple, etc).
-
codec/v1.2.3
Release 1.2.3 This is a production release of go-codec. This optimizes decoding for *zero-copy* mode when decoding from a string or []byte. With this mode, we see 50% reduction in allocation in both codecgen and normal execution, and this gives performance better than other libraries (easyjson, json-iterator, etc) while providing much more features and supported formats (json, cbor, msgpack, simple, etc).
-
v1.2.3
Release 1.2.3 This is a production release of go-codec. This optimizes decoding for *zero-copy* mode when decoding from a string or []byte. With this mode, we see 50% reduction in allocation in both codecgen and normal execution, and this gives performance better than other libraries (easyjson, json-iterator, etc) while providing much more features and supported formats (json, cbor, msgpack, simple, etc).