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
- 2020 Event Lineup - Update
- New inline assembly syntax available in nightly
- Announcing RustFest Global 2020 🎉
- RustConf 2020 Registration is Open
- Understanding the Rust Ecosystem
- You Want to Learn Rust but You Don’t Know Where to Start
- 7 Awesome Rust-powered Command-line Utilities
- Rust-Powered Command-Line Utilities to Increase Your Productivity
- Errors in Rust: A Deep Dive
- Hyper Traps
- Getting Started With The STM32 Nucleo-F302R8 and Rust
- Microsoft: Rust is the Industry's 'Best Chance' at Safe Systems Programming
- Tour of Rust: Chapter 7 - Object Oriented Programming
- Rust Analyzer Changelog #29
- Rustls Security Review & Audit Report
- NDArray Index Arrays and Mask Index Arrays
- Two Memory Bugs From Ringbahn
- Dart Meets Rust: a match made in heaven
- C++ Developer Learning Rust!
- Container with Most Water
- Generics and Compile-Time in Rust
- Improve the performances of your Phoenix app with Rust: in both back and front
- Improving the IDE for Rust/WinRT
- My Experiences with Rust Open Source Projects
- Playing Codenames with Rust
- Spend your novelty budget on Rust
- The Rust compiler isn't slow; we are.
- The Story of Tail Call Optimizations in Rust
- [audio] AreWePodcastYet - Interview with Tim McNamara, author of Rust in Action
- [video] Rust Notebooks (Jupyter and Evcxr) - Getting Started
Crate of the Week
This week's crate is safer_ffi, a library to help write safe FFI code.
Thanks to Vlad Frolov 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.
- gooseberry: Add related tags to each page
- gooseberry: General contributing
- rust:
fs::remove_dir_all
rarely succeeds for large directories on windows
If you are a Rust project owner and are looking for contributors, please submit tasks here.
Updates from Rust Core
354 pull requests were merged in the last week
- enable AVR as a Tier 3 target upstream
- enable LVI hardening for x86_64-fortanix-unknown-sgx
- add
-Z span-debug
to allow for easier debugging of proc macros - add methods to go from a null-terminated
Vec<u8>
to aCString
- check for live drops in constants after drop elaboration
- display information about captured variable in
FnMut
error - don't create impl candidates when obligation contains errors
- enforce unwind invariants
- explain move errors that occur due to method calls involving
self
- fix
#[thread_local]
statics asasm!
sym operands - fix trait alias inherent impl resolution
- free
default()
forwarding toDefault::default()
- handle assembler warnings properly
- on recursive ADT, provide indirection structured suggestion
- provide suggestion to convert numeric op LHS rather than unwrapping RHS
- querify whether a type has structural equality
- relate existential associated types with variance Invariant
- suggest including unused asm arguments in a comment to avoid error
- support proc macros in intra doc link resolution
- track span of function in method calls, and use this in
#[track_caller]
- use
min_specialization
in the remaining rustc crates - use shorthand linker strip arguments in order to support MacOS
- expand: more precise locations for expansion-time lints
- extend network support for HermitCore
- fix caller_location intrinsic for Miri
- improper ctypes: normalize return types and transparent structs
- normalize adt fields during structural match checking
- resolve: do not suggest imports from the same module in which we are resolving
- structural_match: non-structural-match ty closures
- chalk: add FnOnce trait, and provide impl for Function type
- chalk: model function ABI in the Rust IR
- chalk: recursive solver factoring and privacy
- chalk: refactor ProgramClauseData to remove Implies variant
- chalk: add
Unsize
trait implementation - miri: avoid tracking current location three times
- remove
RawVec::reserve_in_place
- stabilize
Option::zip
- stabilize
vec::Drain::as_slice
- impl
AsRef<[T]>
forvec::IntoIter<T>
- std: enable atomic.fence emission on wasm32
- stdarch: fix x86 extract_epi{8,16} functions
- implement new gdb/lldb pretty-printers
- cargo: add environment variables to identify the binary and crate name
- cargo: allow passing a registry index url directly to
cargo install
- cargo: fix doctests not running with
--target=HOST
- cargo: support
{prefix}
and{lowerprefix}
markers inconfig.json
dl
key - crates.io: allow configuring the application's domain name
- crates.io: modifiers/highlight-syntax: Disable aggressive whitespace stripping
- doc: make impl block collapsible if it has an associated constant
- docs.rs: add compression for uploaded documentation
- docs.rs: limit the size of served files
- clippy: macro use suggestion
- clippy: let_and_return: avoid "does not live long enough" errors
- rustfmt: pick up comments between visibility modifier and item name
Rust Compiler Performance Triage
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] add Windows system error codes that should map to
io::ErrorKind::TimedOut
- [disposition: merge] impl
PartialEq<Vec<B>> for &[A], &mut [A]
New RFCs
RFC: add the Freeze trait to libcore/libstd
Upcoming Events
Online
- June 18. Zurich, CH - Remote - Embedded Rust Update: probe.rs
- June 18. Turin, IT - Remote - Rust Turin Study Group
- June 25. Edinburgh, UK - Remote - Pirrigator - Growing Tomatoes Free From Memory Errors and Race Conditions
- June 25. Berlin, DE - Remote - Rust Hack and Learn
North America
- June 17. Vancouver, BC, CA - Vancouver Rust - Rust Study/Hack/Hang-out night
- June 18. Durham, NC - Triangle Rustaceans - Project Night & Lightning Talks
- June 30. Dallas, TX - Dallas Rust - Last Tuesday
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
It feels like being part of a village that learns to love the dragon it battles.
– turbinerneiter on Hacker News
Thanks to blonk for the suggestions!
Please submit quotes and vote for next week!
This Week in Rust is edited by: nellshamrell, llogiq, and cdmistman.