Community
This week’s friend of the tree is Jeffrey Seyfried (@jseyfried)!
Jeffrey Seyfried (@jseyfried) has made some awesome contributions to name resolution. He has fixed a ton of bugs, reported previously unknown edge cases, and done some big refactorings, all of which have helped improve a complex and somewhat neglected part of the compiler.
Rust OSCON activity
There are 4 Rust-related talks accepted for OSCON this May, in Austin:
- Emily Dunham’s “How to Learn Rust”.
- Ben Striegel’s “Fearless Systems Programming for the Modern Developer”.
- Steve Klabnik’s “Learn Rust”.
- Josh Matthews’s “Optimizing Your Project for Contribution”, though it’s not Rust-specific.
Compiler
No firm decisions were reached, but we discussed two topics of general interest:
- RFCs #1477 and #1478, which discuss the intrinsics for doing atomic operations. At issue is what the behavior ought to be in the case of attempting to use the intrinsics with unsupported types – the current behavior is an LLVM abort, which seems suboptimal.
- Whether or not to support MIR plugins. Preliminary support landed in a recent PR, but it’s unclear if we will ever want to support MIR plugins long-term (and it’s certainly too early to offer even the faintest of stability promises).
– nmatsakis
Lang
“If you choose not to decide, you still have made a choice.” – Rush
This week we decided to postpone two RFCs that have been lingering in final comment period for some time:
-
RFC #1129, which added a special overload for
map[key] = value
syntax. There were concerns about the implementation complexity and the general proliferation of ways to insert into maps, particularly if emplacement syntax becomes more mainstream. Hence we decided to postpone until we’ve had a chance to push harder on emplacement syntax. -
RFC #1196, which allowed eliding type parameters and which filled
in the results with
_
. Here the concerns were about the interaction with the inference fallbacks that were described in RFC 213 (but never fully implemented). The decision was to postpone the RFC in favor of a broader discussion that tries to capture the full set of constraints.
–nmatsakis
PS. Do not interpret that opening quote as suggesting any sort of endorsement of the band Rush, official or otherwise.
Libs
We had a busy week!
RFC decisions:
-
FCP PR #1415: RFC: Deprecate type aliases in std::os::*::raw
-
FCP PR #1353: Add retain_mut to Vec and VecDeque
- Punted for another week, due to missing several relevant team members.
We are moving a large number of RFCs into final comment period:
-
FCP PR #1218:
RFC: Checked integer conversions
- This RFC has stalled to some degree, but covers important ground; please help us finalize the design!
- FCP PR #1258: Add macros to get the values of configuration flags
-
FCP PR #1353:
Add retain_mut to Vec and VecDeque
- We’re close on this one, modulo bikeshedding on the final name.
-
FCP PR #1393:
Expand
try!
macro with additional case- This RFC and the next both touch on the
try!
macro, and we likely want to postpone action here now that the?
/catch
RFC has been merged.
- This RFC and the next both touch on the
-
FCP PR #1394:
Add
maybe!
macro equivalent totry!
-
FCP PR #1419:
Safe memcpy for slices ([T]::copy_from)
- Some discussion about
Copy
vsClone
that could potentially change the situation for this RFC.
- Some discussion about
- FCP PR #1443: Extend atomic compare_and_swap
-
FCP PR #1461:
Move some net2 functionality into libstd
- We’ve had no feedback here in a month – please take a look!
- FCP PR #1467: Stabilize volatile read and write
We also reached a few decision on outstanding PRs and issues, as usual.
Tools
The past few weeks saw the merging of RFC 1361 which will improve the
target-specific dependencies syntax in Cargo. Additionally, lots of effort has
ramped up on the multirust-rs project in preparation for it taking over
multirust.sh
as well as rustup.sh
.
Notable Rust PRs:
- Support for MIPS MUSL has landed.
- Backtrace support on MSVC has been improved.
- Initial support for Illumos has landed.
- Initial support for emscripten has landed, and ongoing PRs are happening to get more tests passing.
- Rustdoc will now display
since
to show when APIs first became available. - The beginnings of a new build system based on Cargo have landed.
- The compiler flag
-C link-dead-code
was added to aid in generating coverage information.
Notable Cargo PRs:
- The default build target can now be set through
build.target
in.cargo/config
. - The
cargo metadata
subcommand gained a--no-deps
flag to eventually replacecargo read-manifest
. - Cargo on Windows will now ensure that child processes (tests, rustc, etc) will die when Cargo dies (e.g. via ctrl-c)