Hello and welcome to the seventh issue of This Week in Rust, a weekly overview of Rust and its community. Things are calming down quite a bit, in that nothing extraordinarily exciting is happening. Lots of great work is being done everywhere, and good progress is being made in both bugfixes and cleanup. It has been a good week!
What's cooking on master?
Issue churn this week was -15. A total of 59 PRs were merged.
Breaking changes
- The semantics of
range_revhave changed. This will break your code without warning. It is now, to use interval notation,(hi, lo]rather than[hi, lo). pub externandpriv externhave been removed from the language. This matches the previous similar change toimpl. Place the visibility qualifier (pub/priv) on each item in theexternblock instead.&T(besides&'static T) is no longer allowed in@T.- The
ThreadPerCorespawn mode has been removed, as it doesn't make sense with the new scheduler. - The
consumemethods of the hash containers has been replaced with an external iterator. The method name is the same, though. - Moved values can no longer be captured twice. This was a blatant soundness issue.
- The
swap_unwrapmethod of Option has been renamed totake_unwrap. debug!statements generate no code unless you pass--cfg debugtorustc. This should help keep code size down and make your programs a (tiny bit) faster. Now you don't have to feel bad about havingdebug!in hot code.- The
mutate_valuesmethod of HashMap has been removed.
Notable library additions, bugfixes, and cleanup
- An iterator adaptor was added that endlessly repeats the iterator it is called on.
- Generated test runners now have a
-h/--helpoption. - Metric capturing + racheting has been added for benchmarks.
local_datanow has aget_mutfunction.extra::semverhas been updated to SemVer 2.0.0.- Consuming iterators have been added for the hash structures.
extra::ringbufnow implements DoubleEndedIterator.Eqnow has a default implementation ofne.extra::termnow knows how to handle more attributes.- More containers implement
FromIter. This means you can use
.collect()to gather the elements from an iterator into those containers. - Task killing, failure, and exit code propagation in the new runtime has been implemented.
Notable compiler additions, bugfixes, and cleanup
syntax::attrhas been modernized.- Tons of debuginfo work from mw this week!
- Trait data structures have been cleaned up, as well as a default method fix.
- Intrinsics now have much better codegen.
- A
no_implicit_preludeattribute has been added, which prevents prelude injection in the module hierarchy starting at the item which that attribute is added to. - C-style enum variants are now
allowed in
[T, ..n]expressions. - All language items are now optional. The compiler emits an error if a language item is used but not provided.
- The removal of
spanned<T>has begun. - Headers have been removed for
~strand~[T]whereTis unmanaged.
Documentation, tools, and other stuff
- rustpkg now works when you don't give it a package ID. It builds/installs/cleans the package in the current directory, iff the current directory is in a rustpkg workspace.
--quietis no longer passed to git during submodule operations, so you can see the progress of the huge LLVM download.- Documentation of the lint-controlling attributes was added.
- rustpkg now handles cloning from local git repos.
- The GtkSourceView highlighting file was improved.
Meetings
The Tuesday meeting discussed nothing at all of importance.