Merge from rustc
This commit is contained in:
commit
fa78cabe2a
|
|
@ -121,6 +121,14 @@ For `#[instrument]`, it's recommended to:
|
||||||
- Explicitly pick an instrumentation name via `name = ".."` to distinguish between e.g. `run` of different steps.
|
- Explicitly pick an instrumentation name via `name = ".."` to distinguish between e.g. `run` of different steps.
|
||||||
- Take care to not cause diverging behavior via tracing, e.g. building extra things only when tracing infra is enabled.
|
- Take care to not cause diverging behavior via tracing, e.g. building extra things only when tracing infra is enabled.
|
||||||
|
|
||||||
|
### Profiling bootstrap
|
||||||
|
|
||||||
|
You can use the `COMMAND` tracing target to trace execution of most commands spawned by bootstrap. If you also use the `BOOTSTRAP_PROFILE=1` environment variable, bootstrap will generate a Chrome JSON trace file, which can be visualized in Chrome's `chrome://tracing` page or on https://ui.perfetto.dev.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ BOOTSTRAP_TRACING=COMMAND=trace BOOTSTRAP_PROFILE=1 ./x build library
|
||||||
|
```
|
||||||
|
|
||||||
### rust-analyzer integration?
|
### rust-analyzer integration?
|
||||||
|
|
||||||
Unfortunately, because bootstrap is a `rust-analyzer.linkedProjects`, you can't ask r-a to check/build bootstrap itself with `tracing` feature enabled to get relevant completions, due to lack of support as described in <https://github.com/rust-lang/rust-analyzer/issues/8521>.
|
Unfortunately, because bootstrap is a `rust-analyzer.linkedProjects`, you can't ask r-a to check/build bootstrap itself with `tracing` feature enabled to get relevant completions, due to lack of support as described in <https://github.com/rust-lang/rust-analyzer/issues/8521>.
|
||||||
|
|
|
||||||
|
|
@ -304,9 +304,9 @@ The most important rule for
|
||||||
this representation is that every value must be uniquely represented. In other
|
this representation is that every value must be uniquely represented. In other
|
||||||
words: a specific value must only be representable in one specific way. For example: there is only
|
words: a specific value must only be representable in one specific way. For example: there is only
|
||||||
one way to represent an array of two integers as a `ValTree`:
|
one way to represent an array of two integers as a `ValTree`:
|
||||||
`ValTree::Branch(&[ValTree::Leaf(first_int), ValTree::Leaf(second_int)])`.
|
`Branch([Leaf(first_int), Leaf(second_int)])`.
|
||||||
Even though theoretically a `[u32; 2]` could be encoded in a `u64` and thus just be a
|
Even though theoretically a `[u32; 2]` could be encoded in a `u64` and thus just be a
|
||||||
`ValTree::Leaf(bits_of_two_u32)`, that is not a legal construction of `ValTree`
|
`Leaf(bits_of_two_u32)`, that is not a legal construction of `ValTree`
|
||||||
(and is very complex to do, so it is unlikely anyone is tempted to do so).
|
(and is very complex to do, so it is unlikely anyone is tempted to do so).
|
||||||
|
|
||||||
These rules also mean that some values are not representable. There can be no `union`s in type
|
These rules also mean that some values are not representable. There can be no `union`s in type
|
||||||
|
|
|
||||||
|
|
@ -46,8 +46,6 @@ are implemented differently depending on whether `parallel-compiler` is true.
|
||||||
|
|
||||||
| data structure | parallel | non-parallel |
|
| data structure | parallel | non-parallel |
|
||||||
| -------------------------------- | --------------------------------------------------- | ------------ |
|
| -------------------------------- | --------------------------------------------------- | ------------ |
|
||||||
| Weak | std::sync::Weak | std::rc::Weak |
|
|
||||||
| Atomic{Bool}/{Usize}/{U32}/{U64} | std::sync::atomic::Atomic{Bool}/{Usize}/{U32}/{U64} | (std::cell::Cell<bool/usize/u32/u64>) |
|
|
||||||
| OnceCell | std::sync::OnceLock | std::cell::OnceCell |
|
| OnceCell | std::sync::OnceLock | std::cell::OnceCell |
|
||||||
| Lock\<T> | (parking_lot::Mutex\<T>) | (std::cell::RefCell) |
|
| Lock\<T> | (parking_lot::Mutex\<T>) | (std::cell::RefCell) |
|
||||||
| RwLock\<T> | (parking_lot::RwLock\<T>) | (std::cell::RefCell) |
|
| RwLock\<T> | (parking_lot::RwLock\<T>) | (std::cell::RefCell) |
|
||||||
|
|
@ -58,7 +56,6 @@ are implemented differently depending on whether `parallel-compiler` is true.
|
||||||
| WriteGuard | parking_lot::RwLockWriteGuard | std::cell::RefMut |
|
| WriteGuard | parking_lot::RwLockWriteGuard | std::cell::RefMut |
|
||||||
| MappedWriteGuard | parking_lot::MappedRwLockWriteGuard | std::cell::RefMut |
|
| MappedWriteGuard | parking_lot::MappedRwLockWriteGuard | std::cell::RefMut |
|
||||||
| LockGuard | parking_lot::MutexGuard | std::cell::RefMut |
|
| LockGuard | parking_lot::MutexGuard | std::cell::RefMut |
|
||||||
| MappedLockGuard | parking_lot::MappedMutexGuard | std::cell::RefMut |
|
|
||||||
|
|
||||||
- These thread-safe data structures are interspersed during compilation which
|
- These thread-safe data structures are interspersed during compilation which
|
||||||
can cause lock contention resulting in degraded performance as the number of
|
can cause lock contention resulting in degraded performance as the number of
|
||||||
|
|
@ -173,12 +170,10 @@ Here are some resources that can be used to learn more:
|
||||||
- [This list of interior mutability in the compiler by nikomatsakis][imlist]
|
- [This list of interior mutability in the compiler by nikomatsakis][imlist]
|
||||||
|
|
||||||
[`rayon`]: https://crates.io/crates/rayon
|
[`rayon`]: https://crates.io/crates/rayon
|
||||||
[Arc]: https://doc.rust-lang.org/std/sync/struct.Arc.html
|
|
||||||
[imlist]: https://github.com/nikomatsakis/rustc-parallelization/blob/master/interior-mutability-list.md
|
[imlist]: https://github.com/nikomatsakis/rustc-parallelization/blob/master/interior-mutability-list.md
|
||||||
[irlo0]: https://internals.rust-lang.org/t/parallelizing-rustc-using-rayon/6606
|
[irlo0]: https://internals.rust-lang.org/t/parallelizing-rustc-using-rayon/6606
|
||||||
[irlo1]: https://internals.rust-lang.org/t/help-test-parallel-rustc/11503
|
[irlo1]: https://internals.rust-lang.org/t/help-test-parallel-rustc/11503
|
||||||
[monomorphization]: backend/monomorph.md
|
[monomorphization]: backend/monomorph.md
|
||||||
[parallel-rustdoc]: https://github.com/rust-lang/rust/issues/82741
|
[parallel-rustdoc]: https://github.com/rust-lang/rust/issues/82741
|
||||||
[Rc]: https://doc.rust-lang.org/std/rc/struct.Rc.html
|
|
||||||
[rustc-rayon]: https://github.com/rust-lang/rustc-rayon
|
[rustc-rayon]: https://github.com/rust-lang/rustc-rayon
|
||||||
[tracking]: https://github.com/rust-lang/rust/issues/48685
|
[tracking]: https://github.com/rust-lang/rust/issues/48685
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue