Move std::io::Error into core#155625
Conversation
This comment has been minimized.
This comment has been minimized.
b86f41f to
c538e5d
Compare
This comment has been minimized.
This comment has been minimized.
6c37f53 to
65d4011
Compare
This comment has been minimized.
This comment has been minimized.
65d4011 to
56a8e8c
Compare
93b1fa3 to
d3835aa
Compare
This comment has been minimized.
This comment has been minimized.
|
example of how to link from |
d3835aa to
8bfceb6
Compare
That's a clever trick I never knew about! Looks like it's also required for linking to incoherent implementations even within the file that creates them too. |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
8bfceb6 to
96864eb
Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
96864eb to
7cad458
Compare
This comment has been minimized.
This comment has been minimized.
maybe just leave it until you get the PR to work, that way there's less comment spam. |
|
@bushrat011899: 🔑 Insufficient privileges: not in try users |
|
@bors try @rust-timer queue |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
Move `std::io::Error` into `core`
This comment has been minimized.
This comment has been minimized.
|
Finished benchmarking commit (a2159f2): comparison URL. Overall result: ❌✅ regressions and improvements - please read:Benchmarking means the PR may be perf-sensitive. It's automatically marked not fit for rolling up. Overriding is possible but disadvised: it risks changing compiler perf. Next, please: If you can, justify the regressions found in this try perf run in writing along with @bors rollup=never Instruction countOur most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.
Max RSS (memory usage)Results (primary 3.3%, secondary -2.1%)A less reliable metric. May be of interest, but not used to determine the overall result above.
CyclesResults (primary 2.5%, secondary 1.2%)A less reliable metric. May be of interest, but not used to determine the overall result above.
Binary sizeResults (primary 0.5%, secondary 1.0%)A less reliable metric. May be of interest, but not used to determine the overall result above.
Bootstrap: 507.838s -> 512.25s (0.87%) |
|
I invite anyone with more experience interpreting a perf run to help me out here, but below is my best attempt at understanding these results. From what I can tell, there is no measurable difference in runtime performance, despite the following two changes which could impact runtime:
However it's possible runtime performance along codepaths affected by this PR isn't being measured by the current set of benchmarks. After all, the worst performance is likely to be seen in dropping Out of the primary compilation benchmarks, it appears the worst regressions come down to spending more time in LLVM optimising, or more time in @rustbot label: +perf-regression-triaged |
e11e4f4 to
f553a2c
Compare
|
Since there is a measurable performance difference in compilation time, I've split this PR's commits further to hopefully make it easier to review. |
Viewing internals wont be possible from `std` once moved into `core`.
Adjust `Error` documentation `core` is more restrictive with documentation quality and linking to other items. Methods that will be implemented through incoherence must also be explicitly linked.
Personal preference that will be used for another module in a later commit. Purely stylistic.
They'll be moved into `core` but must be accessible from `std`.
Incoherence is required to define inherit methods on `Error` from `alloc` and `std` once it is moved into `core`. This is required because: 1. `Box` is part of `Error`'s public API and that is only accessible from `alloc`. 2. `RawOsError` methods must ensure the `OsFunctions` atomic pointer is appropriately set, which can only be done from `std`.
Required to allow `std` access from `core`
This allows `Error` to be moved into `core` while still retaining the ability to store custom error data. This may have performance implications!
Stored in a `static` `AtomicPtr` to allow definition in `core` and setting in `std`. Should be replaced with Externally Implemented Items (EII) or similar once stable.
Now that `Error` lives in `core::io`, doc links to it from `core` can be simplified.
f553a2c to
5fff01b
Compare
|
The job Click to see the possible cause of the failure (guessed by this bot) |
| #[unstable(feature = "core_io_internals", reason = "exposed only for libstd", issue = "none")] | ||
| pub use self::os_functions::{decode_error_kind, format_os_error, is_interrupted, set_functions}; | ||
| use crate::{error, fmt}; | ||
|
|
There was a problem hiding this comment.
Maybe split this commit out first and testing(merge it first) it if have performance regression?
I think this commit have maximal possibility have performance issue.
View all comments
ACP: rust-lang/libs-team#755
Tracking issue: #154046
Related: #155574
Related: #152918
Description
Moves
std::io::Errorintocore, deferringBox-adjacent methods to incoherent implementations inalloc, andRawOsErrormethods tostd. This requires some substantial changes to the internals ofError, but none of them are breaking changes or externally visible.Notably, I've replaced usage of
Boxwith a wrapper around a pointer and an appropriate drop function. This requires the addition of quite a few lines of unsafe, but is required to work aroundBoxonly being accessible fromalloc. Additionally, an atomic pointer to a VTable is used for working withRawOsErrorincore, since we cannot know the required implementations withoutstd.Notes
std::iotoalloc#152918std::io::RawOsErrortocore::io#155574