Hello and welcome to another issue of This Week in Rust! Rust is a systems language pursuing the trifecta: safety, concurrency, and speed. This is a weekly summary of its progress and community. Want something mentioned? Tweet us at @ThisWeekInRust or send us a pull request. Want to get involved? We love contributions.
This Week in Rust is openly developed on GitHub. If you find any errors in this week's issue, please submit a PR.
Updates from Rust Community
News & Blog Posts
- Announcing Rust 1.16.
- A gentle introduction to Rust. Series of tutorials to get you started with Rust.
- Getting started with Piston, a game library for Rust.
- Math with distances in Rust: safety and correctness across units.
- Rendering vector map tiles (Rust + asm.js demo).
- ZeroMQ communication between Python and Rust.
- Announcing the tokio-io crate.
- VSCode adds support for ripgrep in latest nightly. ripgrep is a line oriented search tool written in Rust.
- [video] Jeremy Soller, founder of Redox OS - interview.
- [video] Rust game demo - Box crash. Source code.
- This week in Rust docs 48.
- This week in Servo 95.
Crate of the Week
We don't have a Crate of this Week for lack of suggestions. Sorry.
Submit your suggestions and votes for next week!
Call for Participation
Always wanted to contribute to open-source projects but didn't know where to start? Every week we highlight some tasks from the Rust community for you to pick and get started!
Some of these tasks may also have mentors available, visit the task page for more information.
- Hey crate authors, please start testing your code on Rust's beta branch to find regressions.
- The Underhanded Rust Contest.
- [easy] rustup: Installation failure via the script has bad error message.
- rustup: Build with panic=abort.
- [easy] rustup: Improve indentation of help.
- [easy] rustup: Document the usage of CARGO_HOME and RUSTUP_HOME to install to a custom location.
- [easy] rustup: Document the use of toolchain link.
- [easy] rustup: "update not yet available" message should not error.
- [easy] rustup: Replace custom download crate with reqwest.
- bitflags: Hide @_impl implementation detail from the bitflags! rustdoc.
- [easy] bitflags: Empty bitflags has unhelpful Debug representation.
- [easy] bitflags: "const" items are followed by a semicolon.
- [easy] bitflags: Mention Default trait in the docs.
- [easy] bitflags: Move docs to the crate level.
- [easy] bitflags: Add CI badges to Cargo.toml.
- [easy] bitflags: Add keywords and categories to Cargo.toml.
- [easy] bitflags: Add html_root_url crate attribute.
- [easy] bitflags: Remove mention of stable 'assignment_ops' feature from docs.
- [easy] bitflags: Add an example of what the macro-expanded API looks like.
- [easy] bitflags: Implement Hex, Octal, and Binary.
- [easy] byteorder: Add categories to toml file.
- [easy] byteorder: Add CI badges to toml file.
- [medium] notify-rust: Implement icons and images.
- tempdir: TempDir affected by remove_dir_all unreliability on windows.
- [easy] servo: Looking for something to work on.
If you are a Rust project owner and are looking for contributors, please submit tasks here.
Updates from Rust Core
117 pull requests were merged in the last week.
- 1.17 library stabilizations
0e+10
is now a valid Rust float literal- Rust works again on pre 1.12 macOS
- pass attributes to procedural macros as
TokenStream
(macro plugin-breaking) - fix
include!(_)
regression - add
catch { }
to AST (plugin-breaking) - avoid alignment-related undefined behavior on operand-pair store
TryFrom<Err=_>
is nowTryFrom<Error=_>
, also subsumesFromStr
- new
Utf8Error::error_len
- remove
Default
impl forBox<Path>
- remove a few stray
From<Box<_>>
impls - Fix race condition in
fs::create_dir_all(..)
- LLVM: fix inliner funclet unwind memoization (unbreaks MSVC optimizer)
cargo -vv
now caps lints atwarn
levelcargo
enables default features of dependencies overriding others without those featurescargo
now assumes the--cap-lints
feature is available- rustdoc displays
const
items - docs are now required again
New Contributors
- David Roundy
- Dawid Ciężarkiewicz
- Petr Zemek
- portal
- projektir
- Russell Mackenzie
- ScottAbbey
- z1mvader
Approved RFCs
Changes to Rust follow the Rust RFC (request for comments) process. These are the RFCs that were approved for implementation this week:
- RFC 1860: Include the
ManuallyDrop
wrapper incore::mem
. - RFC 1884: Add unstable sort to libcore.
- RFC 1869: Write to standard error with
eprint!
andeprintln!
.
Final Comment Period
Every week the team announces the 'final comment period' for RFCs and key PRs which are reaching a decision. Express your opinions now. This week's FCPs are:
- [disposition: postpone] Revisiting specialization: Complementary traits.
- [disposition: close] Extend the
Hasher
trait withfn delimit
to support one-shot hashing. - [disposition: postpone] Disjointness based on associated types.
- [disposition: merge] Deprecate anonymous parameters.
- [disposition: merge] Add a
compile_error!
macro to libstd.compile_error!
will unconditionally cause compilation to fail with the given error message when encountered. - [disposition: merge] Extend entry API to work on borrowed keys.
- [disposition: merge] extend
?
to operate over other types. - [disposition: postpone] Add a
#[safe("Reason")]
to annotate why unsafe blocks are actually safe. - [disposition: postpone] Polymorphic Numeric Constants.
New RFCs
- Provide a more explicit way to "clone" a standard reference counted pointer.
- Introduce Cargo schema versioning.
- Expand and stabilize
impl Trait
.
Style RFCs
Style RFCs are part of the process for deciding on style guidelines for the Rust community and defaults for Rustfmt. The process is similar to the RFC process, but we try to reach rough consensus on issues (including a final comment period) before progressing to PRs. Just like the RFC process, all users are welcome to comment and submit RFCs. If you want to help decide what Rust code should look like, come get involved!
Issues in final comment period:
Other significant issues:
Upcoming Events
- Mar 22. OpenTechSchool Berlin - Rust Hack and Learn.
- Mar 22. Rust Community Team Meeting at #rust-community on irc.mozilla.org.
- Mar 22. Rust Documentation Team Meeting at #rust-docs on irc.mozilla.org.
- Mar 23. Rust release triage.
- Mar 29. Neues Rust Meetup in Dresden.
- Mar 29. GNOME+Rust Hackfest 2017, Mexico City.
- Mar 29. South Florida Rust Meetup: Intro to Ownership and Borrowing Part 3.
- Mar 29. Rust Community Team Meeting at #rust-community on irc.mozilla.org.
- Mar 29. Rust Documentation Team Meeting at #rust-docs on irc.mozilla.org.
- Mar 31. Underhanded Rust Contest Submission Deadline.
- Apr 5. Rust User Group Cologne - Crate Polishing.
- Apr 5. Rust Atlanta Meetup.
- Apr 5. Rust Community Team Meeting at #rust-community on irc.mozilla.org.
- Apr 5. Rust Documentation Team Meeting at #rust-docs on irc.mozilla.org.
- Apr 6. Rust DC Learn + Try: tokio.
- Apr 6. Rust release triage.
- Apr 30. RustFest 2017 - Kyiv, Ukraine.
If you are running a Rust event please add it to the calendar to get it mentioned here. Email the Rust Community Team for access.
Rust Jobs
Tweet us at @ThisWeekInRust to get your job offers listed here!
Quote of the Week
#rustlang is a very strange place sans null deref nor data race it has its own styles but once it compiles it will not blow up in your face
— llogiq on Twitter. Check out his Twitter feed for more #rustlang limericks!