BytedanceRPC created THRIFT-5337: ------------------------------------ Summary: Go set fields write improvement Key: THRIFT-5337 URL: https://issues.apache.org/jira/browse/THRIFT-5337 Project: Thrift Issue Type: Improvement Components: Go - Compiler Reporter: BytedanceRPC
There is a duplicate elements check for set in `writeFields*` function, and it compares elements using `reflect.DeepEqual` which is expensive. It's much faster that generates a "DeepEqual" function for set elements and apply it in duplicate elements check, especially for nested struct element. For example, a thrift file like this: {code:java} namespace go bytedance.thrift.example struct Simple { 1: set<double> DoubleSet } struct Base { 1: set<i64> I64Set } struct WrappedBase { 1: set<Base> BaseSet } struct Nested { 1: set<WrappedBase> WrappedBaseSet } {code} Go generator would generate `Equals` method for structs defined in thrift file. generated file diff: https://gist.github.com/BytedanceRPC/1aa34b65cf4c9efabed0d0a115262d85 Benchmark writeField1 for Simple and Nested: {code:java} name old time/op new time/op delta SimpleWriteField1-8 576ns ± 3% 435ns ± 3% -24.56% (p=0.000 n=10+10) NestedWriteField1-8 257µs ± 3% 3µs ± 5% -98.71% (p=0.000 n=10+10)name old alloc/op new alloc/op delta SimpleWriteField1-8 160B ± 0% 153B ± 0% -4.58% (p=0.000 n=8+9) NestedWriteField1-8 45.5kB ± 0% 0.4kB ± 1% -99.23% (p=0.000 n=9+10)name old allocs/op new allocs/op delta SimpleWriteField1-8 6.00 ± 0% 4.00 ± 0% -33.33% (p=0.000 n=10+10) NestedWriteField1-8 2.22k ± 0% 0.01k ± 0% -99.68% (p=0.000 n=10+10) {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)