Hello and welcome to another issue of This Week in Rust! Rust is a programming language empowering everyone to build reliable and efficient software. This is a weekly summary of its progress and community. Want something mentioned? Tag us at @ThisWeekInRust on Twitter or @ThisWeekinRust on mastodon.social, or send us a pull request. Want to get involved? We love contributions.
This Week in Rust is openly developed on GitHub and archives can be viewed at this-week-in-rust.org. If you find any errors in this week's issue, please submit a PR.
Updates from Rust Community
Official
Newsletters
Project/Tooling Updates
- Rust for embedded Linux kernels
- kira - release v0.9.0
- Cushy v0.3: New widgets, offscreen capture, Plotters and Tokio integrations, and more
- bbolt-rs v1.3.8
- Maelstrom: A Hermetic, Clustered Test Runner for Rust (and It’s Fast)
- r3bl_cmdr version v0.0.12 released
- Iroh 0.16 - A Better
Client
Observations/Thoughts
- Long-term Rust Project Maintenance
- Methods Should Be Object Safe
- References are like jumps
- Rust 1.78: Performance Impact of the 128-bit Memory Alignment Fix
- HowTo: Egui with webworkers
- Using build.rs to integrate rust applications with system libraries like a pro
- Rust actors + ArcMutex: handle with care
- Rust through the ages
- Mixing rayon and tokio for fun and (hair) loss
- Long-running backend async tasks in tauri v2
- Blazingly Fast Linked Lists
- Existential types in Rust
- Error Handling for Large Rust Projects - A Deep Dive into GreptimeDB's Practices
Rust Walkthroughs
- Let's build a Load Balancer in Rust - Part 1
- [video] Build with Naz : tokio tracing & OTel and how to use it in Rust
Miscellaneous
Crate of the Week
This week's crate is stated-scope-guard, a library supporting a more flexible RAII pattern for stated resouce management.
Thanks to Evian Zhang for the self-suggestion!
Please submit your suggestions and votes for next week!
Call for Testing
An important step for RFC implementation is for people to experiment with the implementation and give feedback, especially before stabilization. The following RFCs would benefit from user testing before moving forward:
RFCs
- No calls for testing were issued this week.
Rust
- No calls for testing were issued this week.
Rustup
- No calls for testing were issued this week.
If you are a feature implementer and would like your RFC to appear on the above list, add the new call-for-testing
label to your RFC along with a comment providing testing instructions and/or guidance on which aspect(s) of the feature
need testing.
Call for Participation; projects and speakers
CFP - Projects
Always wanted to contribute to open-source projects but did not 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.
- greptimedb - Add more tests for Copy From
- greptimedb - Checksum for manifests
- greptimedb - Adding JSON Type to GreptimeDB*
- greptimedb - Resource Constrained Framework for Embedded Environments*
- GreptimeTeam - Design and implement an evaluation program similar to TPC-DS/TPC-H for time-series scenarios*
"*" = Issues open for student applications via OSPP. Selected students will be assigned a mentor(s), and may receive bonuses. Please register through the OSPP link.
If you are a Rust project owner and are looking for contributors, please submit tasks here.
CFP - Speakers
Are you a new or experienced speaker looking for a place to share something cool? This section highlights events that are being planned and are accepting submissions to join their event as a speaker.
- Rust Argentina June 2024 | Closes 2024-05-31 | Buenos Aires, AR | Event date: 2024-06-04
- EuroRust 2024 | Closes 2024-06-03 | Vienna, Austria & online | Event date: 2024-10-10
- Scientific Computing in Rust 2024 | Closes 2024-06-14 | online | Event date: 2024-07-17 - 2024-07-19
- Conf42 Rustlang 2024 | Closes 2024-07-22 | online | Event date: 2024-08-22
If you are an event organizer hoping to expand the reach of your event, please submit a link to the submission website through a PR to TWiR.
Updates from the Rust Project
329 pull requests were merged in the last week
- analyse visitor: build proof tree in probe
- consolidate obligation cause codes for where clauses
- correct the const stabilization of
last_chunk
for slices - coverage: branch coverage support for let-else and if-let
- coverage: further simplify extraction of mapping info from MIR
- display walltime benchmarks with subnanosecond precision
- do not ICE on
AnonConst
s indiagnostic_hir_wf_check
- do not ICE on foreign malformed
diagnostic::on_unimplemented
- do not add leading asterisk in the
PartialEq
- don't ICE when we cannot eval a const to a valtree in the new solver
- don't call
env::set_var
inrustc_driver::install_ice_hook
- fix error messages for
break
inside coroutines - fix ICE while casting a type with error
- fix
MemCategorization
andExprUse
visitors for new solver (this time it's better) - fix insufficient logic when searching for the underlying allocation
- fix more ICEs in
diagnostic::on_unimplemented
- fix parse error message for meta items
- handle Deref expressions in
invalid_reference_casting
- handle field projections like slice indexing in
invalid_reference_casting
- ignore empty
RUSTC_WRAPPER
in bootstrap - ignore generics args in attribute paths
- implement
as_chunks
withsplit_at_unchecked
- implement lldb formatter for "clang encoded" enums (LLDB 18.1+) (V3)
- improve
rustc_parse::Parser
's debuggability - make
#![feature]
suggestionMaybeIncorrect
- make
Ty::builtin_deref
just return aTy
- make sure we consume a generic arg when checking mistyped turbofish
- make sure we don't deny macro vars w keyword names
- match ergonomics 2024: let
&
patterns eat&mut
- match ergonomics 2024: migration lint
- pretty-print let-else with added parenthesization when needed
- remove braces when fixing a nested use tree into a single item
- rename
Generics::params
toGenerics::own_params
- simplify
use crate::rustc_foo::bar
occurrences - split out
ty::AliasTerm
fromty::AliasTy
- uplift
TraitRef
intorustc_type_ir
- uplift various
*Predicate
types intorustc_type_ir
- use fewer origins when creating type variables
- never patterns: lower never patterns to
Unreachable
in MIR - avoid
alloca
s in codegen for simplemir::Aggregate
statements - interpret/miri: better errors on failing
offset_from
- miri:
io::Error
handling: keep around the fullio::Error
for longer so we can give better errors - miri: a bit of intrinsics organization
- miri: allow test targets to be set via CLI args
- miri: intrinsics: just panic when they get used incorrectly
- miri: make
MIRI_TEST_TARGET
andRUSTC_BLESS
entirely an internal thing - miri: return non-null pointer from
malloc(0)
- miri: support
f*_algebraic
- miri: use non-null pointer for size 0 posix memalign
- codegen: memmove/memset cannot be non-temporal
- codegen-cranelift: translate MIR to clif ir in parallel with parallel rustc
- stabilize
byte_slice_trim_ascii
for&[u8]
/&str
- stabilize
seek_seek_relative
- relax allocator requirements on some Rc/Arc APIs
f16::is_sign_{positive,negative}
were feature-gated on f128io::Write::write_fmt
: panic if the formatter fails when the stream does not failstd::net: Socket::new_raw
now set toSO_NOSIGPIPE
on freebsdstd::rand
: adding solaris/illumos for getrandom support- cargo: add local-only build scripts example in check-cfg docs
- cargo: fix: build only the specified artifact library when multiple types are available
- rustdoc: dedup search form HTML
- rustdoc: use stability, instead of features, to decide what to show
- clippy:
significant_drop_in_scrutinee
: Fix false positives due to false drops of place expressions - clippy: add new lint
doc_lazy_continuation
- clippy: add new lint that disallow renaming parameters in trait functions
- clippy: fix false positive because lack of consideration of mutable caller
- clippy: fix: merge multiple suggestions into a single multi-span suggestion in
needless_late_init
- clippy: fix: use
hir_with_context
to produce correct snippets forassigning_clones
- clippy: handle
rustc_on_unimplemented
induplicated_attributes
- clippy: ignore
_to_string
lints in codefrom_expansion
- clippy: lint direct priority conflicts in
[workspace.lints]
- clippy: make
from_str_radix_10
skip constant context - clippy: new lint:
macro_metavars_in_unsafe
- rust-analyzer: fix OOM caused by term search
- rust-analyzer: fix
source_range
forINT_NUMBER
in completion - rust-analyzer: fix: improve confusing literal hovers
- rust-analyzer: fix: keep parentheses when the precedence of inner expr is lower than the outer one
- rust-analyzer: fix: report all LSP protocol errors with
invalid_data
- rust-analyzer: fix: report both IO errors and
main_loop
errors - rust-analyzer: implement unsafe attribute parsing
- rust-analyzer: use the repository field to link to the repository
Rust Compiler Performance Triage
A pretty quiet week with only a few PRs being flagged for analysis. More improvements than regressions this week, and also several nice binary size reductions caused by generating less LLVM IR.
Triage done by @kobzol. Revision range: 69f53f5e..9105c57b
Summary:
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions ❌ (primary) |
0.4% | [0.2%, 0.9%] | 8 |
Regressions ❌ (secondary) |
0.9% | [0.2%, 2.4%] | 18 |
Improvements ✅ (primary) |
-1.1% | [-2.3%, -0.2%] | 51 |
Improvements ✅ (secondary) |
-0.6% | [-1.4%, -0.3%] | 19 |
All ❌✅ (primary) | -0.9% | [-2.3%, 0.9%] | 59 |
1 Regression, 0 Improvements, 3 Mixed; 0 of them in rollups 75 artifact comparisons made in total
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 entered Final Comment Period this week.
Tracking Issues & PRs
Rust
- [disposition: merge] Tracking Issue for
IpvNAddr::{BITS, to_bits, from_bits}
(ip_bits
) - [disposition: merge] Add
size_of
andsize_of_val
andalign_of
andalign_of_val
to the prelude - [disposition: merge] offset: allow zero-byte offset on arbitrary pointers
- [disposition: merge] Add
-
(stdin) support in rustdoc - [disposition: merge] Warn (or error) when
Self
ctor from outer item is referenced in inner nested item - [disposition: merge] Bump
elided_lifetimes
_in_associated_constant to deny
Unsafe Code Guidelines
- [disposition: merge] Decide on validity for metadata of wide pointer/reference with slice tail
New and Updated RFCs
- [new] [RFC] externally definable statics
- [new] Scoped
impl Trait for Type
- [new] [RFC]
core::marker::Freeze
in bounds - [new] [RFC] externally implementable functions
- [new] RFC for doc_cfg, doc_cfg_auto, doc_cfg_hide and doc_cfg_show features
Upcoming Events
Rusty Events between 2024-05-15 - 2024-06-12 🦀
Virtual
- 2024-05-15 | Virtual (Ankara, TR) | Türkiye Rust Community
- 2024-05-15 | Virtual (Cardiff, UK) | Rust and C++ Cardiff
- 2024-05-15 | Virtual (Vancouver, BC, CA) | Vancouver Rust
- 2024-05-16 | Virtual (Ankara, TR) | Türkiye Rust Community
- 2024-05-16 | Virtual (Charlottesville, VA, US) | Charlottesville Rust Meetup
- 2024-05-17 | Virtual | Training 4 Programmers LLC
- 2024-05-21 | Virtual (Washington, DC, US) | Rust DC
- 2024-05-23 | Virtual (Berlin, DE) | OpenTechSchool Berlin + Rust Berlin
- 2024-05-23 | Virtual (Israel) | Rust in Israel
- 2024-05-28 | Virtual (Dallas, TX, US) | Dallas Rust
- 2024-05-28 & 2024-05-28 | Virtual | Mainmatter
- 2024-05-30 | Virtual + In Person (Barcelona, ES) | Mainmatter & BcnRust
- 2024-05-30 | Virtual (Charlottesville, NC, US) | Charlottesville Rust Meetup
- 2024-06-04 | Virtual (Buffalo, NY) | Buffalo Rust Meetup
- 2024-06-05 | Virtual (Indianapolis, IN, US) | Indy Rust
- 2024-06-06 | Virtual (Berlin, DE) | OpenTechSchool Berlin + Rust Berlin
- 2024-06-11 | Virtual (Dallas, TX, US) | Dallas Rust
Africa
- 2024-06-01 | Kampala, UG | Rust Circle Kampala
Asia
- 2024-05-22 | Singapore, SG | SG Rust Meetup
Europe
- 2024-05-16 | Augsburg, DE | Rust Meetup Augsburg
- 2024-05-16 | Paris, FR | Rust Paris
- 2024-05-21 | Aarhus, DK | Rust Aarhus
- 2024-05-21 | Zurich, CH | Rust Zurich
- 2024-05-22 | Leiden, NL | Future-proof Software Development by FreshMinds
- 2024-05-23 | Bern, CH | Rust Bern
- 2024-05-23 | Łodz, PL | Mobica
- 2024-05-23 | Manchester, UK | Rust Manchester
- 2024-05-24 | Bordeaux, FR | Rust Bordeaux
- 2024-05-25 | Stockholm, SE | Stockholm Rust
- 2024-05-28 - 2024-05-30 | Berlin, DE | Oxidize
- 2024-05-30 | Barcelona, ES | Mainmatter & BcnRust
- 2024-05-30 | Berlin, DE | Rust Berlin
- 2024-05-30 | Copenhagen, DK | Copenhagen Rust Community
- 2024-05-30 | Oslo, NO | Rust Oslo
- 2024-06-05 | Hamburg, DE | Rust Meetup Hamburg
- 2025-06-06 | Vilnius, LT | Rust Vilnius
North America
- 2024-05-16 | Mountain View, CA, US | Mountain View Rust Meetup
- 2024-05-16 | Seattle, WA, US | Seattle Rust User Group
- 2024-05-20 | Somerville, MA, US | Boston Rust Meetup
- 2024-05-21 | San Francisco, CA, US | San Francisco Rust Study Group
- 2024-05-22 | Austin, TX, US | Rust ATX
- 2024-05-25 | Chicago, IL, US | Deep Dish Rust
- 2024-05-30 | Mountain View, CA, US | Mountain View Rust Meetup
- 2024-05-31 | Boston, MA, US | Boston Rust Meetup
- 2024-06-08 | Somerville, MA, US | Boston Rust Meetup
Oceania
- 2024-05-28 | Sydney, NSW, AU | Rust Sydney
South America
- 2024-06-06 | Buenos Aires, AR | Rust en Español | Rust Argentina
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.
Jobs
Please see the latest Who's Hiring thread on r/rust
Quote of the Week
Unfortunately, most people seem to have taken the wrong lesson from Rust. They see all of this business with lifetimes and ownership as a dirty mess that Rust has had to adopt because it wanted to avoid garbage collection. But this is completely backwards! Rust adopted rules around shared mutable state and this enabled it to avoid garbage collection. These rules are a good idea regardless.
Thanks to Jules Bertholet for the last-minute suggestion!
Please submit quotes and vote for next week!
This Week in Rust is edited by: nellshamrell, llogiq, cdmistman, ericseppanen, extrawurst, andrewpollack, U007D, kolharsam, joelmarcey, mariannegoldin, bennyvasquez.
Email list hosting is sponsored by The Rust Foundation