-
Notifications
You must be signed in to change notification settings - Fork 12.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement AsRawFd for Stdin, Stdout, and Stderr #43459
Conversation
r? @brson (rust_highfive has picked a reviewer for you, use r? to override) |
Thanks for the PR! My only point of hesitation here is that these structures are internally buffered (stdin and stdout at least) and AFAIK we don't implement @rust-lang/libs, do others have thoughts? |
I think we should just add |
src/libstd/sys/redox/ext/io.rs
Outdated
@@ -109,6 +110,21 @@ impl AsRawFd for net::UdpSocket { | |||
} | |||
} | |||
|
|||
#[stable(feature = "rust1", since = "1.0.0")] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this should be 1.21.0
? (Someone check me on the exact version.)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What should feature
be? I don't know exactly how this works, since trait implementations aren't behind feature flags.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You can pick a new feature name for this
src/libstd/sys/unix/ext/io.rs
Outdated
@@ -104,6 +106,21 @@ impl AsRawFd for net::UdpSocket { | |||
fn as_raw_fd(&self) -> RawFd { *self.as_inner().socket().as_inner() } | |||
} | |||
|
|||
#[stable(feature = "rust1", since = "1.0.0")] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same here.
@sfackler IIRC the implementation on Windows is pretty nontrivial, in that neither |
Oh, right. I guess it could live in std::os::unix::io? |
Yeah that seems plausible to me. Either that or we could have |
@sfackler @BurntSushi do y'all have thoughts on specifically not providing this impl on the existing types? My rationale is that they're buffered so they're not quite as "raw" as you'd like, but I'm curious what others' opinions are. |
@alexcrichton From my perspective, I think all I really care about is just being able to get the std file descriptors easily. It's purely a convenience. I think I'd be just as happy with them existing on the "raw" types. I do somewhat share your concern that getting a file descriptor on something that is buffered is a little strange, although I think the C function |
I think it is worth having the impls on the buffered versions - we can call out the fact that they are buffered on the impl docs which should help avoid confusion there. |
@rfcbot fcp merge |
Team member @alexcrichton has proposed to merge this. The next step is review by the rest of the tagged teams: No concerns currently listed. Once these reviewers reach consensus, this will enter its final comment period. If you spot a major issue that hasn't been raised at any point in this process, please speak up! See this document for info about what commands tagged team members can give me. |
(I checked for @brson, who is away) |
🔔 This is now entering its final comment period, as per the review above. 🔔 |
📌 Commit a878592 has been approved by |
📌 Commit 578123c has been approved by |
⌛ Testing commit 578123c2dc180d805077b4cd364988561240bcf2 with merge 52cb406a7b6c756132a5330d739db6cdc82b8b1c... |
💔 Test failed - status-appveyor |
@bors r=alexcrichton |
📌 Commit 303488a has been approved by |
⌛ Testing commit 303488a2643edb358566bd9a66b7a92a66ae4b4e with merge d6a38980c652ebce967585d6eeb8b0a8c23d166f... |
💔 Test failed - status-appveyor |
@bors r=alexcrichton |
📌 Commit eac01f1 has been approved by |
⌛ Testing commit eac01f1 with merge 9f5d7a2b7b43ef29a2161f69b35e48c39afd08c7... |
💔 Test failed - status-appveyor |
@bors r=alexcrichton |
📌 Commit 64e426e has been approved by |
Implement AsRawFd for Stdin, Stdout, and Stderr rust-lang/rfcs#2074
☀️ Test successful - status-appveyor, status-travis |
@alexcrichton This fixes #40007 |
Changelog: Version 1.21.0 (2017-10-12) ========================== Language -------- - [You can now use static references for literals.][43838] Example: ```rust fn main() { let x: &'static u32 = &0; } ``` - [Relaxed path syntax. Optional `::` before `<` is now allowed in all contexts.][43540] Example: ```rust my_macro!(Vec<i32>::new); // Always worked my_macro!(Vec::<i32>::new); // Now works ``` Compiler -------- - [Upgraded jemalloc to 4.5.0][43911] - [Enabled unwinding panics on Redox][43917] - [Now runs LLVM in parallel during translation phase.][43506] This should reduce peak memory usage. Libraries --------- - [Generate builtin impls for `Clone` for all arrays and tuples that are `T: Clone`][43690] - [`Stdin`, `Stdout`, and `Stderr` now implement `AsRawFd`.][43459] - [`Rc` and `Arc` now implement `From<&[T]> where T: Clone`, `From<str>`, `From<String>`, `From<Box<T>> where T: ?Sized`, and `From<Vec<T>>`.][42565] Stabilized APIs --------------- [`std::mem::discriminant`] Cargo ----- - [You can now call `cargo install` with multiple package names][cargo/4216] - [Cargo commands inside a virtual workspace will now implicitly pass `--all`][cargo/4335] - [Added a `[patch]` section to `Cargo.toml` to handle prepublication dependencies][cargo/4123] [RFC 1969] - [`include` & `exclude` fields in `Cargo.toml` now accept gitignore like patterns][cargo/4270] - [Added the `--all-targets` option][cargo/4400] - [Using required dependencies as a feature is now deprecated and emits a warning][cargo/4364] Misc ---- - [Cargo docs are moving][43916] to [doc.rust-lang.org/cargo](https://doc.rust-lang.org/cargo) - [The rustdoc book is now available][43863] at [doc.rust-lang.org/rustdoc](https://doc.rust-lang.org/rustdoc) - [Added a preview of RLS has been made available through rustup][44204] Install with `rustup component add rls-preview` - [`std::os` documentation for Unix, Linux, and Windows now appears on doc.rust-lang.org][43348] Previously only showed `std::os::unix`. Compatibility Notes ------------------- - [Changes in method matching against higher-ranked types][43880] This may cause breakage in subtyping corner cases. [A more in-depth explanation is available.][info/43880] - [rustc's JSON error output's byte position start at top of file.][42973] Was previously relative to the rustc's internal `CodeMap` struct which required the unstable library `libsyntax` to correctly use. - [`unused_results` lint no longer ignores booleans][43728] [42565]: rust-lang/rust#42565 [42973]: rust-lang/rust#42973 [43348]: rust-lang/rust#43348 [43459]: rust-lang/rust#43459 [43506]: rust-lang/rust#43506 [43540]: rust-lang/rust#43540 [43690]: rust-lang/rust#43690 [43728]: rust-lang/rust#43728 [43838]: rust-lang/rust#43838 [43863]: rust-lang/rust#43863 [43880]: rust-lang/rust#43880 [43911]: rust-lang/rust#43911 [43916]: rust-lang/rust#43916 [43917]: rust-lang/rust#43917 [44204]: rust-lang/rust#44204 [cargo/4123]: rust-lang/cargo#4123 [cargo/4216]: rust-lang/cargo#4216 [cargo/4270]: rust-lang/cargo#4270 [cargo/4335]: rust-lang/cargo#4335 [cargo/4364]: rust-lang/cargo#4364 [cargo/4400]: rust-lang/cargo#4400 [RFC 1969]: rust-lang/rfcs#1969 [info/43880]: rust-lang/rust#44224 (comment) [`std::mem::discriminant`]: https://doc.rust-lang.org/std/mem/fn.discriminant.html
rust-lang/rfcs#2074