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
Official
- Announcing Rustup 1.24.1
- [Inside] Rustup 1.24.0 release incident report for 2021-04-27
- [Inside] 1.52.0 pre-release testing
- [Inside] Core Team Update: May 2021
- [Foundation] Q12021 Membership Update
Newsletters
Project/Tooling Updates
- One Third Of 2021
- This Week In TensorBase 1
- gfx/wgpu releases 0.8
- Last Month in Flott (Motion Control Toolkit in Rust) - May 2021
- rust-analyzer Changelog #75
- GCC Rust Monthly Report #5 April 2021
- RustCrypto Release Announcements (
aead
,cipher
,crypto
,elliptic-curve
,ecdsa
, and more)
Observations/Thoughts
- How Rust makes Rayon's data parallelism magical
- An Incomplete Explanation of the Proc Macro That Saved Me 4000 Lines of Rust
- The most underrated but useful Rust standard library type
- Guaranteed unique; Or, why dogfooding can be taxing.
- The Great Rewriting in Rust
- A story about async Rust and using !Send types
- Compilers as Teachers
- Making Generative Art with Rust: interview with Alexis André
- Building on the Shoulders of Giants: Combining TensorFlow and Rust
- Let's make everything iterable - Iterate over pagination result in the Rest API
- [video] Interview with Niko Matsakis, Co-lead of the Rust language team
Rust Walkthroughs
- Introduction to gRPC in Rust
- I2C on the Pinephone
- Late Night Confessions - Building a Website Using Rust, Rocket, Diesel, and Askama - Part 3
- Rust ownership and borrows - Fighting the borrow-checker
- Running Rust on Android
- Using GDB and defmt to debug embedded programs
- Data Modelling in Rust
- Data Modelling in Rust Continued
- Embedding Rust code in Java Jar for distribution
- Make a Counter and Calculator with KAS GUI
- [ZH] [series] Build GraphQL services based on Async Rust using tide + async-graphql + mongodb (基于 Async Rust 构建 GraphQL 服务,使用 tide + async-graphql + mongodb) - Part 3
- [ZH] [series] Build GraphQL services based on Async Rust using actix-web + async-graphql + rbatis + postgresql / mysql (基于 actix-web + async-graphql + rbatis + postgresql / mysql 构建异步 Rust GraphQL 服务) - Part 2
- [video] Crust of Rust: Dispatch and Fat Pointers
- [video] Ockam | OSS Community Call | April 2021
Papers/Research Projects
- New Variant of Buer Loader Written in Rust
- Is it possible to write overhead-free cyclic data-structures in safe, stable Rust?
Miscellaneous
- Rust's Most Unrecognized Contributor
- Facebook Joins the Rust Foundation
- A brief history of Rust at Facebook
- rustc performance improvement from rust 1.46 to 1.51
- Microsoft joins Bytecode Alliance to advance WebAssembly - aka the thing that lets you run compiled C/C++/Rust code in browsers
- Using GDB and
defmt
to debug embedded programs
Crate of the Week
This week's crate is display_utils, a library with Display
able structs to make string manipulation easier.
Thanks to kangalioo for the nomination
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
322 pull requests were merged in the last week
- adds feature-gated
#[no_coverage]
function attribute, to fix derived Eq0
coverage - give a better error when
std
orcore
are missing - suggestion for unit enum variant when matched with a pattern
- avoid generating
QueryMap::extend
for each key type - remove dead code in
rustc_session::Options
- move
iter_results
todyn FnMut
rather than a generic - miri: throw UB if f*_fast intrinsic called with non-finite value
- miri: use
harness = false
instead of#![feature(custom_test_frameworks)]
- LLVM: don't merge thread_local constants with non-thread_local constants
- be stricter about rejecting LLVM reserved registers in asm!
- stabilize
vec_extend_from_within
- stabilize
ordering_helpers
- override
clone_from
method forPathBuf
andOsString
- simplify
Mutex::into_inner
i8
andu8::to_string()
specialisation- reuse
sys::unix::cmath
on other platforms - add
ErrorKind::OutOfMemory
- add
std::os::unix::fs::chroot
to change the root directory of the current process - inline most raw socket, fd and handle conversions
- socket2: allow for niche optimization on Unix platforms
- regex: fix lazy DFA false quits on ASCII text
- regex: update to latest memchr + upgrade to Rust 2018 + bump MSRV to Rust 1.41
- cargo: add report subcommand
- cargo: show transfer rate when fetching/updating registry index
- rustdoc: remove unnecessary
provided_trait_methods
field from Impl - rustdoc: shrink
doctree::Module
- datafrog: micro-optimize
binary_search
- clippy: fix a false-positive inside const fn in
comparison_chain
- clippy:
implicit_return
improvements - clippy:
while_immutable_cond
: check condition for mutation - clippy: fix false negative in
iter_cloned_collect
with a large array
Rust Compiler Performance Triage
Quiet week, no significant changes.
Triage done by @simulacrum. Revision range: 537544..7a0f178
Approved RFCs
Changes to Rust follow the Rust RFC (request for comments) process. These are the RFCs that were approved for implementation 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
- [disposition: merge] A new prelude for the 2021 edition (trait-only edition)
Tracking Issues & PRs
- [disposition: merge] FCP poll for ErrorKind::OutOfMemory
- [disposition: merge] impl FromStr for proc_macro::Literal
- [disposition: merge] rustdoc: Make "rust code block is empty" and "could not parse code block" warnings a lint (
INVALID_RUST_CODEBLOCKS
) - [disposition: merge] Uplift the invalid_atomic_ordering lint from clippy to rustc
- [disposition: merge] Stabilize "RangeFrom" patterns
- [disposition: merge] Stabilize extended_key_value_attributes
New RFCs
Upcoming Events
Online
- May 6, New York, NY, US - Rust Lightning Talks - Rust NYC
- May 11, Seattle, WA, US - Monthly meetup - Seattle Rust Meetup
- May 11, Saarbücken, Saarland, DE - Meetup: 11u16 (virtual) - Rust Saar
- May 12, Online - Rust Meetup May 2021 - Rust Malaysia
- May 15 - June 7, Online - Solana Season Hackathon - Registration open now
- May 17, 2021, Cardiff, UK - Rust and Cpp Cardiff :: v2.0 - Rust and C++ Cardiff
- May 20, 2021, Online - Go vs Rust | Round table discussion
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
Fiberplane
Paige
Netlify
e.ventures
ConsenSys
Spacemesh
DEX Labs
Kollider
Ockam
Kraken
Tweet us at @ThisWeekInRust to get your job offers listed here!
Quote of the Week
Using R or Numpy is like driving around in a sports car. You just turn the wheel, press the pedals, and burn rubber. Rust (and other systems languages) are like getting a spaceship. You can go places and do things that you never dreamt of in a car. They are harder to pilot, but the possibilities seem unlimited! With the Rust ecosystem still in development, it feels like parts of your spaceship come in boxes of parts labeled "some assembly required".
Thanks to Phlopsi for the suggestion!
Please submit quotes and vote for next week!
This Week in Rust is edited by: nellshamrell, llogiq, and cdmistman.