|
1 | 1 | % Example: Implementing Vec
|
2 | 2 |
|
3 | 3 | To bring everything together, we're going to write `std::Vec` from scratch.
|
4 |
| -Because the all the best tools for writing unsafe code are unstable, this |
| 4 | +Because all the best tools for writing unsafe code are unstable, this |
5 | 5 | project will only work on nightly (as of Rust 1.2.0).
|
6 | 6 |
|
7 | 7 |
|
@@ -253,7 +253,7 @@ pub fn pop(&mut self) -> Option<T> {
|
253 | 253 |
|
254 | 254 | # Deallocating
|
255 | 255 |
|
256 |
| -Next we should implement Drop so that we don't massively leak tons of resources. |
| 256 | +Next we should implement Drop so that we don't massively leaks tons of resources. |
257 | 257 | The easiest way is to just call `pop` until it yields None, and then deallocate
|
258 | 258 | our buffer. Note that calling `pop` is uneeded if `T: !Drop`. In theory we can
|
259 | 259 | ask Rust if T needs_drop and omit the calls to `pop`. However in practice LLVM
|
@@ -442,9 +442,9 @@ end = ptr.offset(len)
|
442 | 442 | ```
|
443 | 443 |
|
444 | 444 | However because `offset` is marked as a GEP inbounds instruction, this will tell
|
445 |
| -LLVM that ptr is allocated and won't alias other allocated memory. This is fine |
| 445 | +llVM that ptr is allocated and won't alias other allocated memory. This is fine |
446 | 446 | for zero-sized types, as they can't alias anything. However if we're using
|
447 |
| -`heap::EMPTY` as a sentinel for a non-allocation for a *non-zero-sized* type, |
| 447 | +heap::EMPTY as a sentinel for a non-allocation for a *non-zero-sized* type, |
448 | 448 | this can cause undefined behaviour. Alas, we must therefore special case either
|
449 | 449 | cap or len being 0 to not do the offset.
|
450 | 450 |
|
|
0 commit comments