diff --git a/src/ch18-02-trait-objects.md b/src/ch18-02-trait-objects.md index 99e1e73900..980b1206c7 100644 --- a/src/ch18-02-trait-objects.md +++ b/src/ch18-02-trait-objects.md @@ -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] 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] 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,