Friend of the tree
We’d like to nominate @eddyb for Friend of the Tree. Eddy has been on a role lately: first, he authored PR #31710, which fixed a longstanding bug in how the compiler was handling functions. In typical eddyb style, the PR not only achieves its goals, but also cleans up a lot of crufty code along the way. As if that was not enough, he also implemented PR #32080, which pushes the new MIR-based backend to the point where it can bootstrap and mostly pass the test suite. As before, it also manages to leave the code a lot cleaner: for example, we can now translate fns with non-Rust ABIs without the use of a shim. No doubt about it, eddyb is truly a Friend of the Tree!
Note: eddyb was also named a FOTT once before, on 2014-01-14.
Compiler
The biggest news is that eddyb has been pushing hard on improving the backend of the compiler lately. PRs #31710 and #32080 have simultaneously cleaned up a lot of the compiler code, closed some long-standing bugs, and pushed MIR almost to the point of viability. For this reason, I am nominating @eddyb for Friend of the Tree this week!
–nmatsakis
Lang
It was a busy week this week for FCP. We decided to promote four RFCs to FCP:
- RFC #1201: Add support for naked functions. This RFC allows functions to be declared as “naked”, meaning that the compiler will generate no prologue or epilog. This is a low-level feature that can be useful when writing kernels or other such software.
- RFC #1422: pub(restricted) item. An extension to our privacy system that allows a wider range of public/private declarations. Instead of merely declaring items as “public to everyone” or "private to the current module", one can now declare items as "public to the current crate" (but not other crates) or “public to some module M” (where M is some enclosing module). This helps in particular to alleviate “private type in public API” errors.
-
RFC #1346: unsafe expressions. The proposal is to
permit
unsafe expr
(without braces) rather than justunsafe { block }
. - RFC #1321: unstable visibility. The proposal is to change how unstable methods interact with method dispatch.
In addition, the following unstable language feature is being placed in FCP. As a reminder, FCPs for unstable language features last an entire release cycle, at the end of which we will typically decide to either remove the language feature, or else stabilize it (though we may elect to defer a final decision):
-
#29638: The
#[macro_reexport]
attribute, which allows you to take macros from anextern crate
and re-export them. This is roughly the equivalent of apub use
from the other crate, but for macros.
Thanks!
– nmatsakis
Libs
This week was focused on selecting APIs for stabilization/deprecation in the Rust 1.9 release cycle. These are the APIs entering their six week final comment period:
-
panic::recover
- stabilize -
std::raw
- deprecate the slice-related bits -
the
str_char
feature - mixture of stabilization/deprecation -
ptr::as_ref
- stabilization pending a good name -
char
encoding methods - stabilization with a tweaked API - ascii into methods - needs discussion
-
CommandExt::session_leader
- deprecate - utf-16 decoding iterators - stabilize
- set recovery methods - stabilize
-
OsString
capacity/length methods - stabilize -
pthread_t
fromJoinHandle
- stabilize (but some open questions) -
the
#[deprecated]
attribute - stabilize -
OpenOptions::create_new
- stabilize (but some open questions) -
panic::propagate
- stabilize -
getting hashers from
HashMap
andHashSet
- stabilize -
CommandExt::{exec, before_exec}
- stabilize, maybebefore_exec
too -
File::try_clone
- stabilize -
SocketAddr::set_*
methods - stabilize -
copy_from_slice
- stabilize -
ptr::{read,write}_volatile
- stabilize pending an LLVM assertion fix
Tools
The major highlight of this week was Multirust 0.8 was released with cross-std installation support! The multirust-rs project is also rapidly approaching parity and will likely soon outpace multirust.sh in terms of features, more info on this over the next few weeks!
Some other notable PRs against Rust and Cargo were:
- The rustbuild build system can now bootstrap non-build-triple
compilers, for example meaning an
arm-unknown-linux-gnueabihf
compiler can easily be built. - Work continues on the emscripten port and it now sports rustbuild support!
- Cargo now only downloads what’s required to complete a build.
- Cargo now supports
--limit
to thecargo search
command to show more or fewer search results.