1
0
mirror of https://github.com/google/comprehensive-rust.git synced 2025-07-12 01:00:16 +02:00

Clarify the Box layout diagrams. (#374)

This commit is contained in:
gendx
2023-02-14 19:03:46 +00:00
committed by GitHub
parent 302c93e3fd
commit 8dd5a78626
2 changed files with 23 additions and 22 deletions

View File

@ -20,24 +20,24 @@ fn main() {
.- - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - - -.
: : : :
: list : : :
: +--------+-------+ : : +--------+--------+ +--------+------+ :
: | Tag | Cons | : : .->| Tag | Cons | .->| Tag | Nil | :
: | 0 | 1 | : : | | 0 | 2 | | | ////// | //// | :
: | 1 | o-----+----+-----+-' | 1 | o------+-' | ////// | //// | :
: +--------+-------+ : : +--------+--------+ +--------+------+ :
: +------+----+----+ : : +------+----+----+ +------+----+----+ :
: | Tag | .0 | .1 | : : | Tag | .0 | .1 | | Tag | .0 | .1 | :
: +------+----+----+ : : +------+----+----+ +------+----+----+ :
: | Cons | 1 | o--+----+-----+--->| Cons | 2 | o--+--->| Nil | // | // | :
: +------+----+----+ : : +------+----+----+ +------+----+----+ :
: : : :
: : : :
`- - - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - - -'
'- - - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - - -'
```
<details>
* If the `Box` was not used here and we attempted to embed a `List` directly into the `List`,
the compiler would not compute a fixed size of the struct in memory, it would look infinite.
* `Box` solves this problem as it has the same size as a regular pointer and just points at the next
element of the `List` in the heap.
* Remove the `Box` in the List definition and show the compiler error. `Recursive with indirection` is a hint you might want to use a Box or reference of some kind, instead of storing a value directly.
* `Box` solves this problem as it has the same size as a regular pointer and just points at the next
element of the `List` in the heap.
* Remove the `Box` in the List definition and show the compiler error. `Recursive with indirection` is a hint you might want to use a Box or reference of some kind, instead of storing a value directly.
</details>