In nightly, loading FileIO results in lots of invalidations related to StyledStrings, see the following case:
(@v1.12) pkg> activate --temp
Activating new project at `/tmp/jl_uxMxkY`
(jl_uxMxkY) pkg> add FileIO
Resolving package versions...
Updating `/tmp/jl_uxMxkY/Project.toml`
[5789e2e9] + FileIO v1.16.3
Updating `/tmp/jl_uxMxkY/Manifest.toml`
[5789e2e9] + FileIO v1.16.3
[ae029012] + Requires v1.3.0
[0dad84c5] + ArgTools v1.1.2
[56f22d72] + Artifacts v1.11.0
[2a0f44e3] + Base64 v1.11.0
[ade2ca70] + Dates v1.11.0
[f43a241f] + Downloads v1.6.0
[7b1f6079] + FileWatching v1.11.0
[dc6e5ff7] + JuliaSyntaxHighlighting v1.12.0
[b27032c2] + LibCURL v0.6.4
[76f85450] + LibGit2 v1.11.0
[8f399da3] + Libdl v1.11.0
[56ddb016] + Logging v1.11.0
[d6f4376e] + Markdown v1.11.0
[ca575930] + NetworkOptions v1.2.0
[44cfe95a] + Pkg v1.12.0
[de0858da] + Printf v1.11.0
[9a3f8284] + Random v1.11.0
[ea8e919c] + SHA v0.7.0
[f489334b] + StyledStrings v1.11.0
[fa267f1f] + TOML v1.0.3
[a4e569a6] + Tar v1.10.0
[cf7118a7] + UUIDs v1.11.0
[4ec0a83e] + Unicode v1.11.0
[deac9b47] + LibCURL_jll v8.6.0+0
[e37daf67] + LibGit2_jll v1.8.0+0
[29816b5a] + LibSSH2_jll v1.11.0+1
[c8ffd9c3] + MbedTLS_jll v2.28.6+0
[14a3606d] + MozillaCACerts_jll v2024.3.11
[83775a58] + Zlib_jll v1.3.1+0
[8e850ede] + nghttp2_jll v1.60.0+0
[3f19e933] + p7zip_jll v17.5.0+0
(jl_uxMxkY) pkg> precompile
julia> using SnoopCompileCore
julia> invs = @snoop_invalidations using FileIO;
julia> using SnoopCompile
julia> trees = invalidation_trees(invs)
3-element Vector{SnoopCompile.MethodInvalidations}:
inserting displaysize(t::REPL.Terminals.UnixTerminal) @ REPL.Terminals ~/.julia/juliaup/julia-nightly/share/julia/stdlib/v1.12/REPL/src/Terminals.jl:149 invalidated:
backedges: 1: superseding displaysize(io::IO) @ Base stream.jl:568 with MethodInstance for displaysize(::IO) (50 children)
2: superseding displaysize(io::IO) @ Base stream.jl:568 with MethodInstance for displaysize(::IO) (1 children)
3: superseding displaysize(io::IO) @ Base stream.jl:568 with MethodInstance for displaysize(::IO) (1 children)
inserting displaysize(::REPL.Terminals.TextTerminal) @ REPL.Terminals ~/.julia/juliaup/julia-nightly/share/julia/stdlib/v1.12/REPL/src/Terminals.jl:46 invalidated:
backedges: 1: superseding displaysize(io::IO) @ Base stream.jl:568 with MethodInstance for displaysize(::IO) (50 children)
2: superseding displaysize(io::IO) @ Base stream.jl:568 with MethodInstance for displaysize(::IO) (1 children)
3: superseding displaysize(io::IO) @ Base stream.jl:568 with MethodInstance for displaysize(::IO) (1 children)
inserting read(s::Stream, nb) @ FileIO ~/.julia/packages/FileIO/xOKyx/src/types.jl:142 invalidated:
mt_backedges: 1: signature Tuple{typeof(read), Any, Type{Base.AnnotatedString{String}}} triggered MethodInstance for Base._join_preserve_annotations(::Tuple{Any, String}, ::String, ::String) (0 children)
2: signature Tuple{typeof(read), Any, Type{Base.AnnotatedString{String}}} triggered MethodInstance for Base._join_preserve_annotations(::Tuple{Vararg{Symbol}}, ::String) (0 children)
3: signature Tuple{typeof(read), Any, Type{Base.AnnotatedString{String}}} triggered MethodInstance for Base._join_preserve_annotations(::Vector{Any}, ::String) (8069 children)
julia> versioninfo()
Julia Version 1.12.0-DEV.1040
Commit cf4c30accd9 (2024-08-12 13:10 UTC)
Build Info:
Official https://julialang.org/ release
Platform Info:
OS: Linux (x86_64-linux-gnu)
CPU: 32 × 13th Gen Intel(R) Core(TM) i9-13900F
WORD_SIZE: 64
LLVM: libLLVM-18.1.7 (ORCJIT, alderlake)
Threads: 32 default, 0 interactive, 32 GC (on 32 virtual cores)
Environment:
JULIA_INFO_COLOR = green
As can be seen in the last invalidation tree,
|
Base.read(s::Stream, nb) = read(stream(s), nb) |
triggers the invalidation of 8k+ children. In practice this causes lags of a few seconds in the REPL when typing common commands for the first time after loading FileIO (
pkg> st and
pkg> resolve particularly so). The cause is perhaps related to
join on
AnnotatedString as discussed already in
KristofferC/OhMyREPL.jl#355. I'm not sure if there is something to be done in FileIO or if this is something to address in Base or StyledStrings.
cc @tecosaur
In nightly, loading FileIO results in lots of invalidations related to StyledStrings, see the following case:
(@v1.12) pkg> activate --temp Activating new project at `/tmp/jl_uxMxkY` (jl_uxMxkY) pkg> add FileIO Resolving package versions... Updating `/tmp/jl_uxMxkY/Project.toml` [5789e2e9] + FileIO v1.16.3 Updating `/tmp/jl_uxMxkY/Manifest.toml` [5789e2e9] + FileIO v1.16.3 [ae029012] + Requires v1.3.0 [0dad84c5] + ArgTools v1.1.2 [56f22d72] + Artifacts v1.11.0 [2a0f44e3] + Base64 v1.11.0 [ade2ca70] + Dates v1.11.0 [f43a241f] + Downloads v1.6.0 [7b1f6079] + FileWatching v1.11.0 [dc6e5ff7] + JuliaSyntaxHighlighting v1.12.0 [b27032c2] + LibCURL v0.6.4 [76f85450] + LibGit2 v1.11.0 [8f399da3] + Libdl v1.11.0 [56ddb016] + Logging v1.11.0 [d6f4376e] + Markdown v1.11.0 [ca575930] + NetworkOptions v1.2.0 [44cfe95a] + Pkg v1.12.0 [de0858da] + Printf v1.11.0 [9a3f8284] + Random v1.11.0 [ea8e919c] + SHA v0.7.0 [f489334b] + StyledStrings v1.11.0 [fa267f1f] + TOML v1.0.3 [a4e569a6] + Tar v1.10.0 [cf7118a7] + UUIDs v1.11.0 [4ec0a83e] + Unicode v1.11.0 [deac9b47] + LibCURL_jll v8.6.0+0 [e37daf67] + LibGit2_jll v1.8.0+0 [29816b5a] + LibSSH2_jll v1.11.0+1 [c8ffd9c3] + MbedTLS_jll v2.28.6+0 [14a3606d] + MozillaCACerts_jll v2024.3.11 [83775a58] + Zlib_jll v1.3.1+0 [8e850ede] + nghttp2_jll v1.60.0+0 [3f19e933] + p7zip_jll v17.5.0+0 (jl_uxMxkY) pkg> precompile julia> using SnoopCompileCore julia> invs = @snoop_invalidations using FileIO; julia> using SnoopCompile julia> trees = invalidation_trees(invs) 3-element Vector{SnoopCompile.MethodInvalidations}: inserting displaysize(t::REPL.Terminals.UnixTerminal) @ REPL.Terminals ~/.julia/juliaup/julia-nightly/share/julia/stdlib/v1.12/REPL/src/Terminals.jl:149 invalidated: backedges: 1: superseding displaysize(io::IO) @ Base stream.jl:568 with MethodInstance for displaysize(::IO) (50 children) 2: superseding displaysize(io::IO) @ Base stream.jl:568 with MethodInstance for displaysize(::IO) (1 children) 3: superseding displaysize(io::IO) @ Base stream.jl:568 with MethodInstance for displaysize(::IO) (1 children) inserting displaysize(::REPL.Terminals.TextTerminal) @ REPL.Terminals ~/.julia/juliaup/julia-nightly/share/julia/stdlib/v1.12/REPL/src/Terminals.jl:46 invalidated: backedges: 1: superseding displaysize(io::IO) @ Base stream.jl:568 with MethodInstance for displaysize(::IO) (50 children) 2: superseding displaysize(io::IO) @ Base stream.jl:568 with MethodInstance for displaysize(::IO) (1 children) 3: superseding displaysize(io::IO) @ Base stream.jl:568 with MethodInstance for displaysize(::IO) (1 children) inserting read(s::Stream, nb) @ FileIO ~/.julia/packages/FileIO/xOKyx/src/types.jl:142 invalidated: mt_backedges: 1: signature Tuple{typeof(read), Any, Type{Base.AnnotatedString{String}}} triggered MethodInstance for Base._join_preserve_annotations(::Tuple{Any, String}, ::String, ::String) (0 children) 2: signature Tuple{typeof(read), Any, Type{Base.AnnotatedString{String}}} triggered MethodInstance for Base._join_preserve_annotations(::Tuple{Vararg{Symbol}}, ::String) (0 children) 3: signature Tuple{typeof(read), Any, Type{Base.AnnotatedString{String}}} triggered MethodInstance for Base._join_preserve_annotations(::Vector{Any}, ::String) (8069 children) julia> versioninfo() Julia Version 1.12.0-DEV.1040 Commit cf4c30accd9 (2024-08-12 13:10 UTC) Build Info: Official https://julialang.org/ release Platform Info: OS: Linux (x86_64-linux-gnu) CPU: 32 × 13th Gen Intel(R) Core(TM) i9-13900F WORD_SIZE: 64 LLVM: libLLVM-18.1.7 (ORCJIT, alderlake) Threads: 32 default, 0 interactive, 32 GC (on 32 virtual cores) Environment: JULIA_INFO_COLOR = greenAs can be seen in the last invalidation tree,
FileIO.jl/src/types.jl
Line 157 in 4c93073
pkg> standpkg> resolveparticularly so). The cause is perhaps related tojoinonAnnotatedStringas discussed already in KristofferC/OhMyREPL.jl#355. I'm not sure if there is something to be done in FileIO or if this is something to address in Base or StyledStrings.cc @tecosaur