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.
Updates from Rust Community
No newsletters this week.
- The XDG base directory specification and Rust
- Zero dependency images (of chaos) in Rust
- Examples of declarative style in Rust
- Rust 2030 Christmas list: Better cfg
- For the Love of Macros
- The Tokio Upgrade from 0.2 to 1.x
- Cranelift, Part 2: Compiler Efficiency, CFGs, and a Branch Peephole Optimizer
- [audio] Building with Rust: Luca Palmieri on TrueLayer and Zero to Production
- [audio] Chats with James 008 - Yoshua Wuyts
- [video] Rust 1.50 Patch Review
- Actors with Tokio
- Building a microservice with Rust
- Rust is cool - Enums
- Rust CLI Game of Life tutorial - Part 2
- Calling Rust from a Cloudflare Worker
- Validating JSON input with Rust web services
- What would SQLite look like if written in Rust? -- Part 1
- Generalizing over Generics in Rust (Part 1) - AKA Higher Kinded Types in Rust
- Procedural Macros: The Basics
- Building an OpenStreetMap app in Rust, Part II
- Look, Ma! No JS! - Compiling Rust to WebAssembly
- Simple ray tracer written in Rust from scratch
- Short Circuit Sum in Rust
- Zero to Production in Rust, Part 7.1 - Skeleton And Principles For A Maintainable Test Suite
- CCSS Devclub Rust Workshop
- [video] Graphs in Rust: Let's Build a Maze!
- Cleora - an ultra fast graph embedding tool written in Rust
- Cost-based query optimizations in multithreaded environments
- Writing our own Cheat Engine: Exact Value scanning
Crate of the Week
Despite having no nominations, this week's crate is firestorm, a fast intrusive flamegraph profiling library.
llogiq is pretty pleased anyway with the suggestion.
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
340 pull requests were merged in the last week
- parser: fix panic in 'const impl' recovery
- fix derived
- borrowck: refactor visited map to a bitset
- add suggest
mutmethod for loop
- miri: Remove non-power-of-two SIMD vectors
- chalk: add Movability to Generator
fast_reject::simplify_typein coherence before doing full check
- fix suggestion to introduce explicit lifetime
- make suggestion of changing mutability of arguments broader
BTreenodes directly in the heap
- stabilize the
- stdsimd: add SIMD shuffles for
- stdsimd: add bitmasks and simplify mask API
- libtest: allow multiple filters
- cargo: change git dependencies to use
- cargo: emit warning on env variable case mismatch
- crates.io: add
LPT0to the list of reserved crate names (Windows users rejoice)
- clippy: fix suggestions that need parens in
- clippy: fix
- clippy: fix
- clippy: downgrade
- clippy: new lint:
Rust Compiler Performance Triage
A mostly quiet week, though with an excellent improvement in bootstrap times, shaving off a couple percent off the total and 10% off of rustc_middle due to changes in the code being compiled.
Triage done by @simulacrum. Revision range: ea09825..f1c47c7
1 Regressions, 2 Improvements, 1 Mixed
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.
- RFC: Checking conditional compilation at compile time
- RFC: add the Freeze trait to libcore/libstd
- Generic Pointer to Field
- [disposition: merge] Make char and u8 methods const
- [disposition: merge] Demote x86_64-rumprun-netbsd target
- [disposition: merge]
impl PartialEq<Punct> for char; symmetry for #78636
- [disposition: merge] Make rustdoc lints a tool lint instead of built-in
- [disposition: merge] Stabilize
- [disposition: merge] Add
- [disposition: merge] [librustdoc] Only split lang string on
- [disposition: merge] Lint for unused borrows as part of
- [disposition: merge] Tracking Issue for str_split_once
- [disposition: merge] Tracking Issue for ASCII methods on OsStr
- [disposition: close] Tracking issue for
- February 18, Berlin, DE - Rust Hack and Learn - Berline.rs
- February 23, Dallas, TX, US - Last Tuesday - Dallas Rust
- March 2, Dublin, IE - March Remote Meetup - Luca Palmieri - Rust Dublin
- March 9, Saarbücken, Saarland, DE - Meetup: 9u16 (virtual) - Rust Saar
- Rust Core Engineer at The Zcash Foundation (Remote)
- Rust Cryptography Engineer at The Zcash Foundation (Remote)
- Senior Software Engineer [Rust] at Fuel (Toronto, ON, CA or Remote)
- Backend Engineer - Rust - Core Backend at Kraken (Remote)
- Backend Engineer, Kraken Futures - Rust (Remote) at Kraken (Remote)
- Rust API SDET at Kraken (Remote)
- Rust Engineer, Desktop GUI - Cryptowatch at Kraken (Remote)
- Senior Backend Engineer - Rust - Core Backend at Kraken (Remote)
- Senior Banking Engineer - Rust at Kraken (Remote)
- Site Reliability Engineer - Rust Core Backend at Kraken (Remote)
- Software Engineer - Trading Technology (Rust) at Kraken (Remote)
- Head of Developer Relations at Ockam (US, Mountain or Pacific Timezones)
- Lead Software Developer, Rust at BlockGen Corp (US & Canada remote only)
Tweet us at @ThisWeekInRust to get your job offers listed here!
Quote of the Week
Have you seen someone juggle several items with one hand? That's the point of async. Blocking (non-async) it like writing - it requires constant work from each hand. If you want to write twice as fast you'll need two hands and write with both at the same time. That's multithreading. If you juggle, the moment the item leaves your hand and is in the air, you have it left with nothing to do. That's similar to network IO - you make a request and are just waiting for the server to respond. You could be doing something in the meantime, like catching another item and throwing it back up again. That's what "await" does - it says I threw and item into the air, so I want my current thread / hand to switch over to catch something else now.
Thanks to Jacob Pratt for the suggestion.