Skip to content

Commit eabb601

Browse files
authored
stop specializing on argument types of display (#28616)
there is no real advantage in specializing on the argument types for display since it goes through a quite complicated machinery of trying to find applicable displays. Before: julia> let @time precompile(Tuple{typeof(Base.Multimedia.display), Int32}) @time precompile(Tuple{typeof(Base.Multimedia.display), Vector{Int}}) @time precompile(Tuple{typeof(Base.Multimedia.display), Float64}) @time precompile(Tuple{typeof(Base.Multimedia.display), Symbol}) end 0.034542 seconds (37.08 k allocations: 1.916 MiB) 0.042272 seconds (92.57 k allocations: 4.810 MiB) 0.039003 seconds (90.20 k allocations: 4.758 MiB) 0.030826 seconds (61.08 k allocations: 3.066 MiB) After: julia> let @time precompile(Tuple{typeof(Base.Multimedia.display), Int32}) @time precompile(Tuple{typeof(Base.Multimedia.display), Vector{Int}}) @time precompile(Tuple{typeof(Base.Multimedia.display), Float64}) @time precompile(Tuple{typeof(Base.Multimedia.display), Symbol}) end 0.000041 seconds (12 allocations: 640 bytes) 0.000029 seconds (10 allocations: 544 bytes) 0.000024 seconds (9 allocations: 496 bytes) 0.000021 seconds (9 allocations: 496 bytes)
1 parent 686ffdb commit eabb601

File tree

1 file changed

+14
-14
lines changed

1 file changed

+14
-14
lines changed

base/multimedia.jl

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ julia> showable("img/png", rand(5))
4343
false
4444
```
4545
"""
46-
showable(::MIME{mime}, x) where {mime} = hasmethod(show, Tuple{IO, MIME{mime}, typeof(x)})
47-
showable(m::AbstractString, x) = showable(MIME(m), x)
46+
showable(::MIME{mime}, @nospecialize x) where {mime} = hasmethod(show, Tuple{IO, MIME{mime}, typeof(x)})
47+
showable(m::AbstractString, @nospecialize x) = showable(MIME(m), x)
4848

4949
"""
5050
show(io, mime, x)
@@ -175,8 +175,8 @@ end
175175
abstract type AbstractDisplay end
176176

177177
# it is convenient to accept strings instead of ::MIME
178-
display(d::AbstractDisplay, mime::AbstractString, x) = display(d, MIME(mime), x)
179-
display(mime::AbstractString, x) = display(MIME(mime), x)
178+
display(d::AbstractDisplay, mime::AbstractString, @nospecialize x) = display(d, MIME(mime), x)
179+
display(mime::AbstractString, @nospecialize x) = display(MIME(mime), x)
180180

181181
"""
182182
displayable(mime) -> Bool
@@ -201,12 +201,12 @@ objects are printed in the Julia REPL.)
201201
struct TextDisplay <: AbstractDisplay
202202
io::IO
203203
end
204-
display(d::TextDisplay, M::MIME"text/plain", x) = show(d.io, M, x)
205-
display(d::TextDisplay, x) = display(d, MIME"text/plain"(), x)
204+
display(d::TextDisplay, M::MIME"text/plain", @nospecialize x) = show(d.io, M, x)
205+
display(d::TextDisplay, @nospecialize x) = display(d, MIME"text/plain"(), x)
206206

207207
# if you explicitly call display("text/foo", x), it should work on a TextDisplay:
208208
displayable(d::TextDisplay, M::MIME) = istextmime(M)
209-
function display(d::TextDisplay, M::MIME, x)
209+
function display(d::TextDisplay, M::MIME, @nospecialize x)
210210
displayable(d, M) || throw(MethodError(display, (d, M, x)))
211211
show(d.io, M, x)
212212
end
@@ -254,7 +254,7 @@ function reinit_displays()
254254
pushdisplay(TextDisplay(stdout))
255255
end
256256

257-
xdisplayable(D::AbstractDisplay, args...) = applicable(display, D, args...)
257+
xdisplayable(D::AbstractDisplay, @nospecialize args...) = applicable(display, D, args...)
258258

259259
"""
260260
display(x)
@@ -280,7 +280,7 @@ variants, one can also supply the "raw" data in the requested MIME type by passi
280280
`x::AbstractString` (for MIME types with text-based storage, such as text/html or
281281
application/postscript) or `x::Vector{UInt8}` (for binary MIME types).
282282
"""
283-
function display(x)
283+
function display(@nospecialize x)
284284
for i = length(displays):-1:1
285285
if xdisplayable(displays[i], x)
286286
try
@@ -294,7 +294,7 @@ function display(x)
294294
throw(MethodError(display, (x,)))
295295
end
296296

297-
function display(m::MIME, x)
297+
function display(m::MIME, @nospecialize x)
298298
for i = length(displays):-1:1
299299
if xdisplayable(displays[i], m, x)
300300
try
@@ -339,7 +339,7 @@ Using `redisplay` is also a hint to the backend that `x` may be redisplayed
339339
several times, and the backend may choose to defer the display until
340340
(for example) the next interactive prompt.
341341
"""
342-
function redisplay(x)
342+
function redisplay(@nospecialize x)
343343
for i = length(displays):-1:1
344344
if xdisplayable(displays[i], x)
345345
try
@@ -353,7 +353,7 @@ function redisplay(x)
353353
throw(MethodError(redisplay, (x,)))
354354
end
355355

356-
function redisplay(m::Union{MIME,AbstractString}, x)
356+
function redisplay(m::Union{MIME,AbstractString}, @nospecialize x)
357357
for i = length(displays):-1:1
358358
if xdisplayable(displays[i], m, x)
359359
try
@@ -368,8 +368,8 @@ function redisplay(m::Union{MIME,AbstractString}, x)
368368
end
369369

370370
# default redisplay is simply to call display
371-
redisplay(d::AbstractDisplay, x) = display(d, x)
372-
redisplay(d::AbstractDisplay, m::Union{MIME,AbstractString}, x) = display(d, m, x)
371+
redisplay(d::AbstractDisplay, @nospecialize x) = display(d, x)
372+
redisplay(d::AbstractDisplay, m::Union{MIME,AbstractString}, @nospecialize x) = display(d, m, x)
373373

374374
###########################################################################
375375

0 commit comments

Comments
 (0)