Skip to content

Commit 02549d5

Browse files
Use PrecompileTools mechanics to compile REPL (#55782)
Fixes #55778 Based on discussion here #55778 (comment) With this `?reinterpret` feels instant, with only these precompiles at the start. ![Screenshot 2024-09-16 at 9 49 39 AM](https://github.com/user-attachments/assets/20dc016d-c6f7-4870-acd7-0e795dcf541b)
1 parent 5aad761 commit 02549d5

File tree

1 file changed

+34
-5
lines changed

1 file changed

+34
-5
lines changed

stdlib/REPL/src/precompile.jl

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ finally
1313
Base._track_dependencies[] = true
1414
end
1515

16-
let
16+
function repl_workload()
1717
# these are intentionally triggered
1818
allowed_errors = [
1919
"BoundsError: attempt to access 0-element Vector{Any} at index [1]",
@@ -175,9 +175,38 @@ let
175175
nothing
176176
end
177177

178-
precompile(Tuple{typeof(Base.setindex!), Base.Dict{Any, Any}, Any, Int})
179-
precompile(Tuple{typeof(Base.delete!), Base.Set{Any}, String})
180-
precompile(Tuple{typeof(Base.:(==)), Char, String})
181-
precompile(Tuple{typeof(Base.reseteof), Base.TTY})
178+
# Copied from PrecompileTools.jl
179+
let
180+
function check_edges(node)
181+
parentmi = node.mi_info.mi
182+
for child in node.children
183+
childmi = child.mi_info.mi
184+
if !(isdefined(childmi, :backedges) && parentmi childmi.backedges)
185+
precompile(childmi.specTypes)
186+
end
187+
check_edges(child)
188+
end
189+
end
190+
191+
if Base.generating_output() && Base.JLOptions().use_pkgimages != 0
192+
Core.Compiler.Timings.reset_timings()
193+
Core.Compiler.__set_measure_typeinf(true)
194+
try
195+
repl_workload()
196+
finally
197+
Core.Compiler.__set_measure_typeinf(false)
198+
Core.Compiler.Timings.close_current_timer()
199+
end
200+
roots = Core.Compiler.Timings._timings[1].children
201+
for child in roots
202+
precompile(child.mi_info.mi.specTypes)
203+
check_edges(child)
204+
end
205+
precompile(Tuple{typeof(Base.setindex!), Base.Dict{Any, Any}, Any, Int})
206+
precompile(Tuple{typeof(Base.delete!), Base.Set{Any}, String})
207+
precompile(Tuple{typeof(Base.:(==)), Char, String})
208+
precompile(Tuple{typeof(Base.reseteof), Base.TTY})
209+
end
210+
end
182211

183212
end # Precompile

0 commit comments

Comments
 (0)