compile performance design issue
vtjnash opened this issue · comments
When I load this package, it appears to create a lot of different tuple size combinations (internally this expands to hundreds of different calls to zip). Don't do this. Use a vector for variable sized data. Unfortunately, I have not been able to identify where this comes from, since append!
here does not have any backedges, and I don't see append called directly in this code repository.
julia> methods(Base.append!, (Any, Any))[8].specializations
(10, MethodInstance for append!(::Vector{CSTParser.EXPR}, ::NTuple{14, CSTParser.EXPR}))
(11, MethodInstance for append!(::Vector{CSTParser.EXPR}, ::NTuple{27, CSTParser.EXPR}))
(12, MethodInstance for append!(::Vector{CSTParser.EXPR}, ::NTuple{8, CSTParser.EXPR}))
(13, MethodInstance for append!(::Vector{CSTParser.EXPR}, ::NTuple{10, CSTParser.EXPR}))
(14, MethodInstance for append!(::Vector{CSTParser.EXPR}, ::Tuple{CSTParser.EXPR, CSTParser.EXPR, CSTParser.EXPR}))
(15, MethodInstance for append!(::Vector{CSTParser.EXPR}, ::NTuple{12, CSTParser.EXPR}))
(16, MethodInstance for append!(::Vector{CSTParser.EXPR}, ::NTuple{4, CSTParser.EXPR}))
(17, MethodInstance for append!(::Vector{CSTParser.EXPR}, ::NTuple{7, CSTParser.EXPR}))
(18, MethodInstance for append!(::Vector{CSTParser.EXPR}, ::Tuple{CSTParser.EXPR, CSTParser.EXPR}))
(19, MethodInstance for append!(::Vector{CSTParser.EXPR}, ::NTuple{9, CSTParser.EXPR}))
(20, MethodInstance for append!(::Vector{CSTParser.EXPR}, ::NTuple{16, CSTParser.EXPR}))
(21, MethodInstance for append!(::Vector{CSTParser.EXPR}, ::NTuple{17, CSTParser.EXPR}))
(22, MethodInstance for append!(::Vector{CSTParser.EXPR}, ::NTuple{5, CSTParser.EXPR}))
(23, MethodInstance for append!(::Vector{CSTParser.EXPR}, ::NTuple{6, CSTParser.EXPR}))
(24, MethodInstance for append!(::Vector{JuliaFormatter.FST}, ::NTuple{7, JuliaFormatter.FST}))
(25, MethodInstance for append!(::Vector{JuliaFormatter.FST}, ::NTuple{5, JuliaFormatter.FST}))
(26, MethodInstance for append!(::Vector{JuliaFormatter.FST}, ::NTuple{23, JuliaFormatter.FST}))
(27, MethodInstance for append!(::Vector{JuliaFormatter.FST}, ::NTuple{9, JuliaFormatter.FST}))
(28, MethodInstance for append!(::Vector{JuliaFormatter.FST}, ::NTuple{21, JuliaFormatter.FST}))
(29, MethodInstance for append!(::Vector{JuliaFormatter.FST}, ::NTuple{25, JuliaFormatter.FST}))
(30, MethodInstance for append!(::Vector{JuliaFormatter.FST}, ::NTuple{17, JuliaFormatter.FST}))
(31, MethodInstance for append!(::Vector{JuliaFormatter.FST}, ::NTuple{19, JuliaFormatter.FST}))
(32, MethodInstance for append!(::Vector{JuliaFormatter.FST}, ::Tuple{JuliaFormatter.FST, JuliaFormatter.FST, JuliaFormatter.FST}))
(33, MethodInstance for append!(::Vector{JuliaFormatter.FST}, ::NTuple{11, JuliaFormatter.FST}))
(34, MethodInstance for append!(::Vector{JuliaFormatter.FST}, ::NTuple{15, JuliaFormatter.FST}))
(35, MethodInstance for append!(::Vector{JuliaFormatter.FST}, ::NTuple{6, JuliaFormatter.FST}))
(36, MethodInstance for append!(::Vector{JuliaFormatter.FST}, ::NTuple{29, JuliaFormatter.FST}))
(37, MethodInstance for append!(::Vector{JuliaFormatter.FST}, ::NTuple{13, JuliaFormatter.FST}))
(38, MethodInstance for append!(::Vector{JuliaFormatter.FST}, ::NTuple{4, JuliaFormatter.FST}))
pkg> st -m JuliaFormatter
[98e50ef6] JuliaFormatter v1.0.24
```
hmmm when you call push!([1], [1,2,3]...) it calls append! so I guess anything that looks like that might trigger this?
https://github.com/domluna/JuliaFormatter.jl/blob/master/src/fst.jl#L421
https://github.com/domluna/JuliaFormatter.jl/blob/master/src/passes.jl#L34
https://github.com/domluna/JuliaFormatter.jl/blob/master/src/passes.jl#L43
https://github.com/domluna/JuliaFormatter.jl/blob/master/src/passes.jl#L56
https://github.com/domluna/JuliaFormatter.jl/blob/master/src/passes.jl#L40
but those would return a vector so I'm not sure why it's showing up as a tuple here
oh wait the splat would turn the list into a tuple