From 7fcde8bbaeb56bf425f63639ca2d5ed81bf0f661 Mon Sep 17 00:00:00 2001 From: Colin Date: Fri, 25 Feb 2022 00:49:33 +0800 Subject: [PATCH] add an explaination about the keyword `dyn` --- contents/basic/trait/trait-object.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contents/basic/trait/trait-object.md b/contents/basic/trait/trait-object.md index 417b8661..d566d410 100644 --- a/contents/basic/trait/trait-object.md +++ b/contents/basic/trait/trait-object.md @@ -257,7 +257,7 @@ help: function arguments must have a statically known size, borrowed types alway 回忆一下泛型章节我们提到过的,泛型是在编译期完成处理的:编译器会为每一个泛型参数对应的具体类型生成一份代码,这种方式是**静态分发(static dispatch)**,因为是在编译期完成的,对于运行期性能完全没有任何影响。 -与静态分发相对应的是**动态分发(dynamic dispatch)**,在这种情况下,直到运行时,才能确定需要调用什么方法。 +与静态分发相对应的是**动态分发(dynamic dispatch)**,在这种情况下,直到运行时,才能确定需要调用什么方法。之前代码中的关键字 `dyn` 正是在强调这一“动态”的特点。 当使用特征对象时,Rust 必须使用动态分发。编译器无法知晓所有可能用于特征对象代码的类型,所以它也不知道应该调用哪个类型的哪个方法实现。为此,Rust 在运行时使用特征对象中的指针来知晓需要调用哪个方法。动态分发也阻止编译器有选择的内联方法代码,这会相应的禁用一些优化。