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
Project/Tooling Updates
Observations/Thoughts
- 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
Rust Walkthroughs
- 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!
Miscellaneous
- 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.
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
340 pull requests were merged in the last week
- parser: fix panic in 'const impl' recovery
- fix derived
PartialOrd
operators - borrowck: refactor visited map to a bitset
- add suggest
mut
method for loop - miri: Remove non-power-of-two SIMD vectors
- chalk: add Movability to Generator
- try
fast_reject::simplify_type
in coherence before doing full check - fix suggestion to introduce explicit lifetime
- make suggestion of changing mutability of arguments broader
- optimize
Vec::retain
- make
Vec::split_at_spare_mut
public BTreeMap
: disentangleDrop
implementation fromIntoIter
- initialize
BTree
nodes directly in the heap - stabilize the
partition_point
feature - add
Box::into_inner
- stdsimd: add SIMD shuffles for
SimdType
{2
,4
,8
,16
,32
,64
} - stdsimd: add bitmasks and simplify mask API
- libtest: allow multiple filters
- cargo: change git dependencies to use
HEAD
by default - cargo: emit warning on env variable case mismatch
- crates.io: add
COM0
andLPT0
to the list of reserved crate names (Windows users rejoice) - clippy: fix suggestions that need parens in
from_iter_instead_of_collect
lint - clippy: fix
missing_panics_doc
warning onunreachable!
- clippy: fix
vec_init_then_push
false positives - clippy: downgrade
trivial_regex
to nursery - clippy: new lint:
bytes_nth
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
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
- Adds
must_not_suspend_lint
RFC - RFC: Checking conditional compilation at compile time
- RFC: add the Freeze trait to libcore/libstd
- Generic Pointer to Field
Tracking Issues & PRs
- [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
unsafe_op_in_unsafe_fn
lint - [disposition: merge] Add
NotSupported
tostd::io::ErrorKind
- [disposition: merge] [librustdoc] Only split lang string on
,
,, and
\t
- [disposition: merge] Lint for unused borrows as part of
UNUSED_MUST_USE
- [disposition: merge] Tracking Issue for str_split_once
- [disposition: merge] Tracking Issue for ASCII methods on OsStr
- [disposition: close] Tracking issue for
Option::expect_none(msg)
andunwrap_none()
New RFCs
Upcoming Events
Online
- 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
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
- 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.
– /u/OS6aDohpegavod4 on /r/rust
Thanks to Jacob Pratt for the suggestion.
Please submit quotes and vote for next week!
This Week in Rust is edited by: nellshamrell, llogiq, and cdmistman.