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.
Check out this week's This Week in Rust Podcast
Updates from Rust Community
News & Blog Posts
- Announcing Rust 1.44.1
- Writing Non-Trivial Macros in Rust
- Diving into Rust with a CLI
- Rust for Data-Intensive Computation
- 3K, 60fps, 130ms: achieving it with Rust
- Rust concurrency: the archetype of a message-passing bug.
- How to Design For Panic Resilience in Rust
- GitHub Action for binary crates installation
- Managing Rust bloat with Github Actions
- A multiplayer board game in Rust and WebAssembly
- Im bad at unsafe {}
- SIMD library plans
- Tips for Faster Rust Compile Times
- Rust Analyzer Changelog #30
- Building A Blockchain in Rust & Substrate: A Step-by-Step Guide for Developers
- Dart and Rust: the async story
- Decode a certificate
- Four Years of Rust At OneSignal
- How Rust Lets Us Monitor 30k API calls/min
- How to use C++ polymorphism in Rust
- Implementing a Type-safe printf in Rust
- Introduction to Rust for Node Developers
- The programming language that wants to rescue the world from dangerous code
- Property-based testing in Rust with Proptest
- Rust at CNCF
- Rust's Huge Compilation Units
- RustHorn: CHC-Based Verification for Rust Programs
- Shipping Linux binaries that don't break with Rust
- Some examples of Rust Lifetimes in a struct
- Static PIE and ASLR for the x86_64-unknown-linux-musl Target
- Three bytes to an integer
- Using Rust to Delete Gitignored Cruft
- Tour of Rust - Chapter 8 - Smart Pointers
- Thread-local Storage - Part 13 of Making our own executable packer
- RISC-V OS using Rust - Chapter 11
- Zero To Production #2: Learn By Building An Email Newsletter
- [video] Crust of Rust: Smart Pointers and Interior Mutability
- [video] CS 196 at Illinois
- [video] Ask Me Anything with Felix Klock
- [video] Rust Stream: The Guard Pattern and Interior Mutability
Crate of the Week
This week's crate is diskonaut, a disk usage explorer.
Thanks to Aram Drevekenin for the suggestion!
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.
If you are a Rust project owner and are looking for contributors, please submit tasks here.
Updates from Rust Core
325 pull requests were merged in the last week
- add
asm!()
support for hexagon - enable LLVM zlib
- add methods to go from a nul-terminated
Vec<u8>
to aCString
- allow multiple
asm!
options groups and report an error on duplicate options - diagnose use of incompatible sanitizers
- disallow loading crates with non-ascii identifier name
- export
#[inline]
fns with extern indicators - fix up autoderef when reborrowing
- further tweak lifetime errors involving
dyn Trait
andimpl Trait
in return position - implement crate-level-only lints checking.
- implement new gdb/lldb pretty-printers
- improve diagnostics for
let x += 1
- make
need_type_info_err
more conservative - make all uses of ty::Error delay a span bug
- make new type param suggestion more targetted
- make novel structural match violations not a
bug
- only display other method receiver candidates if they actually apply
- prefer accessible paths in 'use' suggestions
- prevent attacker from manipulating FPU tag word used in SGX enclave
- projection bound validation
- report error when casting an C-like enum implementing Drop
- specialization is unsound
- use min_specialization in the remaining rustc crates
- add specialization of
ToString for char
- suggest
?Sized
when applicable for ADTs - support sanitizers on aarch64-unknown-linux-gnu
- test that bounds checks are elided when slice len is checked up-front
- try to suggest dereferences on trait selection failed
- use track caller for bug! macro
- forbid mutable references in all constant contexts except for const-fns
- linker: MSVC supports linking static libraries as a whole archive
- linker: never pass
-no-pie
to non-gnu linkers - lint: normalize projections using opaque types
- add a lint to catch clashing
extern
fn declarations. - memory access sanity checks: abort instead of panic
- pretty/mir: const value enums with no variants
- store
ObligationCause
on the heap - chalk: add closures
- chalk: ignore auto traits order
- fix asinh of negative values
- stabilize Option::zip
- stabilize vec::Drain::as_slice
- use
Ipv4Addr::from<[u8; 4]>
when possible - core/time: Add Duration methods for zero
- deprecate wrapping_offset_from
impl PartialEq<Vec<B>>
for&[A]
,&mut [A]
- hashbrown: avoid creating small tables with a capacity of 1
- stdarch: add AVX 512f gather, scatter and compare intrinsics
- cargo: adding environment variable CARGO_PKG_LICENSE
- cargo: cut down on data fetch from git dependencies
- cargo: fix doctests not running with --target=HOST
- cargo: fix order-dependent feature resolution.
- cargo: fix overzealous
clean -p
for reserved names - cargo: support linker with -Zdoctest-xcompile.
- rustfmt: avoid using Symbol::intern
- rustfmt: ensure idempotency on empty match blocks
Rust Compiler Performance Triage
- 2020-06-23. Lots of improvements this week, and no regressions, which is good. But we regularly see significant performance effects on rollups, which is a concern.
Approved RFCs
Changes to Rust follow the Rust RFC (request for comments) process. These are the RFCs that were approved for implementation this week:
No RFCs were approved this week.
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.
RFCs
No RFCs are currently in the final comment period.
Tracking Issues & PRs
- [disposition: merge] impl
From<char>
for String - [disposition: merge] stabilize leading_trailing_ones
- [disposition: merge] Add
TryFrom<{int}>
forNonZero{int}
- [disposition: merge] Stabilize
#[track_caller]
- [disposition: merge] add Windows system error codes that should map to
io::ErrorKind::TimedOut
- [disposition: merge] Tracking issue for RFC 2344, "Allow
loop
in constant evaluation" - [disposition: merge] Tracking issue for
Option::deref
,Result::deref
,Result::deref_ok
, andResult::deref_err
New RFCs
Upcoming Events
Online
- June 24. Wroclaw, PL - Remote - Rust Wroclaw Meetup #22
- June 25. Edinburgh, UK - Remote - Pirrigator - Growing Tomatoes Free From Memory Errors and Race Conditions
- June 25. Berlin, DE - Remote - Rust Hack and Learn
- July 1. Johannesburg, ZA - Remote - Monthly Joburg Rust Chat!
North America
- June 30. Dallas, TX, US - Dallas Rust - Last Tuesday
- July 1. Indianapolis, IN, US - Indy Rust - Indy.rs
Asia Pacific
If you are running a Rust event please add it to the calendar to get it mentioned here. Please remember to add a link to the event too. Email the Rust Community Team for access.
Rust Jobs
Tweet us at @ThisWeekInRust to get your job offers listed here!
Quote of the Week
Rust's beauty lies in the countless decisions made by the development community that constantly make you feel like you can have ten cakes and eat all of them too.
– Jake McGinty et al on the tonari blog
Thanks to llogiq for the suggestions!
Please submit quotes and vote for next week!
This Week in Rust is edited by: nellshamrell, llogiq, and cdmistman.