@@ -1100,10 +1100,28 @@ mod trait_keyword {}
11001100// 
11011101/// A value of type [`bool`] representing logical **true**. 
11021102/// 
1103- /// The documentation for this keyword is [not yet complete]. Pull requests welcome! 
1103+ /// Logically `true` is not equal to [`false`]. 
1104+ /// 
1105+ /// ## Control structures that check for **true** 
1106+ /// 
1107+ /// Several of Rust's control structures will check for a `bool` condition evaluating to **true**. 
1108+ /// 
1109+ ///   * The condition in an [`if`] expression must be of type `bool`. 
1110+ ///     Whenever that condition evaluates to **true**, the `if` expression takes 
1111+ ///     on the value of the first block. If however, the condition evaluates 
1112+ ///     to `false`, the expression takes on value of the `else` block if there is one. 
11041113/// 
1114+ ///   * [`while`] is another control flow construct expecting a `bool`-typed condition. 
1115+ ///     As long as the condition evaluates to **true**, the `while` loop will continually 
1116+ ///     evaluate its associated block. 
1117+ /// 
1118+ ///   * [`match`] arms can have guard clauses on them. 
1119+ /// 
1120+ /// [`if`]: keyword.if.html 
1121+ /// [`while`]: keyword.while.html 
1122+ /// [`match`]: ../reference/expressions/match-expr.html#match-guards 
1123+ /// [`false`]: keyword.false.html 
11051124/// [`bool`]: primitive.bool.html 
1106- /// [not yet complete]: https://github.com/rust-lang/rust/issues/34601 
11071125mod  true_keyword { } 
11081126
11091127#[ doc( keyword = "type" ) ]  
@@ -1167,12 +1185,33 @@ mod await_keyword {}
11671185
11681186#[ doc( keyword = "dyn" ) ]  
11691187// 
1170- /// Name the type  of a [trait object]. 
1188+ /// `dyn` is a prefix  of a [trait object]'s type . 
11711189/// 
1172- /// The documentation for this keyword is [not yet complete]. Pull requests welcome! 
1190+ /// The `dyn` keyword is used to highlight that calls to methods on the associated `Trait` 
1191+ /// are dynamically dispatched. To use the trait this way, it must be 'object safe'. 
1192+ /// 
1193+ /// Unlike generic parameters or `impl Trait`, the compiler does not know the concrete type that 
1194+ /// is being passed. That is, the type has been [erased]. 
1195+ /// As such, a `dyn Trait` reference contains _two_ pointers. 
1196+ /// One pointer goes to the data (e.g., an instance of a struct). 
1197+ /// Another pointer goes to a map of method call names to function pointers 
1198+ /// (known as a virtual method table or vtable). 
1199+ /// 
1200+ /// At run-time, when a method needs to be called on the `dyn Trait`, the vtable is consulted to get 
1201+ /// the function pointer and then that function pointer is called. 
1202+ /// 
1203+ /// ## Trade-offs 
1204+ /// 
1205+ /// The above indirection is the additional runtime cost of calling a function on a `dyn Trait`. 
1206+ /// Methods called by dynamic dispatch generally cannot be inlined by the compiler. 
1207+ /// 
1208+ /// However, `dyn Trait` is likely to produce smaller code than `impl Trait` / generic parameters as 
1209+ /// the method won't be duplicated for each concrete type. 
1210+ /// 
1211+ /// Read more about `object safety` and [trait object]s. 
11731212/// 
11741213/// [trait object]: ../book/ch17-02-trait-objects.html 
1175- /// [not yet complete ]: https://github.com/rust-lang/rust/issues/34601  
1214+ /// [erased ]: https://en.wikipedia.org/wiki/Type_erasure  
11761215mod  dyn_keyword { } 
11771216
11781217#[ doc( keyword = "union" ) ]  
0 commit comments