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
No newsletters this week.
Official
Tooling
Observations/Thoughts
- Benchmarking vol. 2: Pitting Actix against Rocket v0.4 and v0.5-dev
- Optimization - Making Rust Code Go Brrrr
- Revisiting a 'smaller Rust'
- A Future for Rust Debugging
- Learning Rust the Open Source Way
- So you want to live-reload Rust
- Drop order in Rust: It's tricky
Learn Simple Rust
- What’s new in Rust 1.46.0 about const_fn?
- Rust: expression vs statement
- To Box or not to Box -- My First Real Rust Refactor
- Bevy #2: Space Shooter - The Player
- Cucumber in Rust - Beginner's Tutorial
- Data Types in Rust
- [video] Rust 101
Learn More Rust
- Are we observable yet? An introduction to Rust telemetry - Zero To Production #4
- A Fistful of States: More State Machine Patterns in Rust
- Build a Discord Bot with Rust and Serenity
- Porting EBU R128 audio loudness analysis from C to Rust – Porting Details
- Building a runtime reflection system for Rust 🦀️ (Part 1)
- Rusty-PID: Porting the TSic sensor from C to Rust
- Playing Codenames in Rust with word vectors
- Type-level Programming in Rust
- Multi-threading with Wgpu and Rayon
- Flicker free fireworks (or how I accidentally rediscovered the regen buffer)
- [audio] The Rustacean Station Podcast - WebAssembly on the Server with Krustlet
- [video] RIOT Summit 2020 - Safer & Simpler Embedded Programs with Rust on RIOT
- [video] One Day Build - Anachro SPI pt 2
- [video] Rusty USB Gadgets Make Barking BeagleBones
Project Updates
- Krustlet v0.5.0 Release
- oso, an open-source policy engine for authorization written in Rust, added a Rust library for implementing authorization for Rust projects!
- Rust on the ESP32 & ESP8266 - Building an ecosystem
- What (not so) recently happened in Miri
- Progress report on rustc_codegen_cranelift (Sep 2020)
Miscellaneous
- Supercharge your Electron apps with Rust
- How to Make a 💡?
- Towards principled reactive UI
- Building even faster interpreters in Rust
- AMD Is Hiring To Work On New Radeon Driver Tooling Written In Rust
- Rust programming language exploit mitigations
- Custom Literals in Rust
Call for Blog Posts
The Rust Core Team wants input from the community! If you haven't already, read the official blog and submit a blog post - it will show up here! Here are the wonderful submissions since the call for blog posts:
- Rust 2021: GUI
- Rust 2021: maintain dominance on the web, easy funding, easier learning
- Rust 2021: Easier to integrate into existing codebases
- Rust 2021: Continue
- Rust 2021 | Features and Trait Bounds in Macros
- Rust 2021: Quality, frictionless tooling
- My Rust 2021 roadmap: crates, concision, and community
- Rust 2021 Roadmap Wishlist
- Rust in 2021: We've done a lot, more to be done
- Rust in 2021: Leveraging the Type System for Infallible Message Buffers
- Rust 2021
- Rust 2021: Minor major improvements
- Rust 2021
- My Rust 2021
Crate of the Week
This week's crate is fs-err, a library to make filesystem errors usable.
Thanks to Emerentius 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!
- time-rs: support #![no_std] targets without global allocation
- time-rs: OffsetDateTime::replace_time?
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
370 pull requests were merged in the last week
- return values up to 128 bits in registers
- add
asm!
support for MIPS - diagnostics: improve closure/generic parameter mismatch
- avoiding unnecesary allocations at
rustc_errors
- add fast path for match checking
- cache types during normalization
- fix the performance regression of #76244
- encode less metadata for proc-macro crates
- invalidate local LLVM cache less often
- introduce a new flag to enable experimental/unsound mir opts
- MIR pass to remove unneeded drops on types not needing drop
- add optimization to avoid load of address
- miri: more informative deallocation error messages
- miri: add API for capturing backtrace
DroplessArena
: allocate objects from the end of memory chunk- unstably allow
assume
intrinsic in const contexts - add
array::from_ref
- add
#[track_caller]
to more panickingCell
functions - make some methods of
Pin
unstably const - revert
const_type_id
stabilization - revert adding
Atomic::from_mut
- add
cfg(target_has_atomic_equal_alignment)
and use it forAtomic::from_mut
- make
[].as_
[mut_
]ptr_range()
(unstably) const - log: implement
Log
forBox<Log>
Rust Compiler Performance Triage
- 2020-09-28: 0 Regressions, 1 Improvements, 3 Mixed
Most significant changes this week came in response to regressions discussed in last week's triage report. Curious readers may be interested in #77058, in which the removal of a single field from a struct caused a 25% decrease in wall-times for one seemingly unrelated benchmark, or #76986, an ABI change that should be a pretty clear win but seems to have mixed results.
See the full report for more.
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
- Destructuring assignment
- RFC: impl-only glob imports
- Fetching cargo registry tokens from external processes
- RFC: Permit _ in type aliases
Tracking Issues & PRs
- [disposition: merge] Stabilize slice_ptr_range.
- [disposition: merge] Make RawFd implement the RawFd traits
- [disposition: merge] Fix Debug implementations of some of the HashMap and BTreeMap iterator types
- [disposition: merge] Tracking issue for slice_partition_at_index
New RFCs
- [RFC] A new stack-based vector
- RFC: Add
target
configuration - RFC: Add
target_abi
configuration - adds async stream rfc
Upcoming Events
Online
- October 1. Berlin, DE - Berline.rs - Rust Hack and Learn
- October 7. Johannesburg, ZA - Johannesburg Rust Meetup - Monthly Joburg Rust Chat!
- October 7. Dublin, IE - Rust Dublin - October Remote Meetup
- October 7. Indianapolis, IN, US - Indy.rs - Indy.rs - with Social Distancing
- October 8. Linz, AT - Rust Linz - Rust Meetup Linz
- October 8. San Diego, CA, US - San Diego Rust - San Diego Rust October 2020 Tele-Meetup
- October 13. Saabrücken, DE - Rust-Saar Meetup -
4u16
- October 12 - 18. RustLab
Asia Pacific
North America
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!
- 3D Driver Development Engineer - Rust tooling for GPUs at AMD (Boxborough, MA, USA)
- Backend Engineer - Rust at Kraken (Remote)
- Backend Egineer, Kraken Futures - Rust at Kraken (Remote)
- Rust Engineer, Desktop GUI - Cryptowatch at Kraken (Remote)
- Senior Backend Engineer - Rust at Kraken (Remote)
- Backend / Quant Developer at Kraken (Remote)
- Senior Software Engineer (New IDE Platform) at JetBrains (Amsterdam, NL)
Quote of the Week
Rust has a curse (it has many, but this one is critical): inefficient code is generally visible. Experienced developers hate to notice that their code is inefficient. They will recoil at seeing
Arc<RefCell<T>>
, but won't bat an eye at using Python.
Thanks to Jon G Stødle for the suggestion!
Please submit quotes and vote for next week!
This Week in Rust is edited by: nellshamrell, llogiq, and cdmistman.