Skip to content

Commit

Permalink
Merge pull request #3367 from bravequickcleverfibreyarn/ch17-02-trait…
Browse files Browse the repository at this point in the history
…-objects.md

ch17-02: Monomorphization applies to generics in general
  • Loading branch information
chriskrycho authored Dec 11, 2024
2 parents f8efec5 + a3d5796 commit d491e87
Showing 1 changed file with 9 additions and 10 deletions.
19 changes: 9 additions & 10 deletions src/ch18-02-trait-objects.md
Original file line number Diff line number Diff line change
Expand Up @@ -222,16 +222,15 @@ didn’t mean to pass and so should pass a different type or we should implement
### Trait Objects Perform Dynamic Dispatch

Recall in the [“Performance of Code Using
Generics”][performance-of-code-using-generics]<!-- ignore --> section in
Chapter 10 our discussion on the monomorphization process performed by the
compiler when we use trait bounds on generics: the compiler generates
nongeneric implementations of functions and methods for each concrete type that
we use in place of a generic type parameter. The code that results from
monomorphization is doing _static dispatch_, which is when the compiler knows
what method you’re calling at compile time. This is opposed to _dynamic
dispatch_, which is when the compiler can’t tell at compile time which method
you’re calling. In dynamic dispatch cases, the compiler emits code that at
runtime will figure out which method to call.
Generics”][performance-of-code-using-generics]<!-- ignore --> section in Chapter
10 our discussion on the monomorphization process performed on generics by the
compiler: the compiler generates nongeneric implementations of functions and
methods for each concrete type that we use in place of a generic type parameter.
The code that results from monomorphization is doing _static dispatch_, which is
when the compiler knows what method you’re calling at compile time. This is
opposed to _dynamic dispatch_, which is when the compiler can’t tell at compile
time which method you’re calling. In dynamic dispatch cases, the compiler emits
code that at runtime will figure out which method to call.

When we use trait objects, Rust must use dynamic dispatch. The compiler doesn’t
know all the types that might be used with the code that’s using trait objects,
Expand Down

0 comments on commit d491e87

Please sign in to comment.