[ https://issues.apache.org/jira/browse/THRIFT-5337?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jens Geyer closed THRIFT-5337. ------------------------------ > 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 > Assignee: BytedanceRPC > Priority: Major > Fix For: 0.15.0 > > Time Spent: 8h > Remaining Estimate: 0h > > 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)