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 X (formerly 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.
Want TWIR in your inbox? Subscribe here.
Updates from Rust Community
Foundation
Project/Tooling Updates
- Announcing axum 0.8.0
- Fish 4.0: The Fish Of Theseus
- Rust and libcosmic in Bottles Next
- gitlab-tokens-exporter 1.0.0 - Exports the status of gitlab tokens as Prometheus metrics
- Danube pub/sub messaging platform - updates v0.2.0
Observations/Thoughts
- Catching up with async Rust
- [audio] Reliable software: An interview with Jon Gjengset
- [audio] Rust in Google with Lars Bergstrom
- [video] 12 months with the Bevy Game Engine - This Year in Bevy 2024
Rust Walkthroughs
Crate of the Week
This week's crate is fake, a library (and recently console utility) to generate fake data of various types.
Thanks to llogiq for the half-self-suggestion!
Please submit your suggestions and votes for next week!
Calls 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.
If you are a Rust project owner and are looking for contributors, please submit tasks here or through a PR to TWiR or by reaching out on X (formerly Twitter) or Mastodon!
CFP - Events
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.
If you are an event organizer hoping to expand the reach of your event, please submit a link to the website through a PR to TWiR or by reaching out on X (formerly Twitter) or Mastodon!
Updates from the Rust Project
331 pull requests were merged in the last week
- enable LSX feature for LoongArch OpenHarmony target
- explicitly set float ABI for all ARM targets
- A couple datalog/borrowck cleanups
rustc_codegen_ssa
: Buffer file writes inlink_rlib
- account for C string literals and
format_args
inHiddenUnicodeCodepoints
lint - account for removal of multiline span in suggestion
- actually print all the relevant parts of a coroutine in verbose mode
- add
--no-capture
/--nocapture
as bootstrap arguments - add a compiler intrinsic to back
bigint_helper_methods
- avoid ICE in borrowck
- compiler: add a statement-of-intent to
rustc_abi
- compute liveness constraints in location-sensitive polonius
- consider arm to diverge if guard diverges
- consider empty-unreachable otherwise branches in MatchBranchSimplification
- default to short backtraces for dev builds of rustc itself
- implement
default_overrides_default_fields
lint - improve default target options for
x86_64-unknown-linux-none
- improve type mutation for certain structures
- make -Csoft-float have an effect on all ARM targets
- make
ty::Error
implement all auto traits - make sure we check the future type is
Sized
inAsyncFn*
- skip parenthesis around tuple
struct
field calls - skip parenthesis if
.
makes statement boundary unambiguous - some random region tweaks
- strip debuginfo from rustc-main and rustdoc
- miri: FD handling: avoid unnecessary dynamic downcasts
- miri: epoll: avoid some clones
- miri: error on some invalid flag combinations
- miri: fix toolchain flag parsing
- miri: socket read/write cleanup
- stabilize
const_alloc_layout
- stabilize
const_swap
- stabilize
style_edition = "2024"
in-tree - make
slice::as_flattened_mut
unstably const - tidy up bigint multiplication methods
- from iterator for more tuples
- add
into_array
conversion destructors forBox
, Rc, and Arc
- avoid short writes in LineWriter
- unify
fs::copy
andio::copy
on Linux - fix forgetting to save statx availability on success
- fix mistake in windows file open
- fix renaming symlinks on Windows
- windows: use WriteFile to write to a UTF-8 console
- windows: use
FILE_ALLOCATION_INFO
for truncation - cargo:
fix(package)
: check dirtiness of path fields in manifest - cargo:
fix(package)
: check dirtiness of symlinks source files - cargo:
fix(package)
: warn if symlinks checked out as plain text files - cargo:
refactor(package)
: splitcargo_package
to modules - cargo: fix: assure possibly blocking non-files (like FIFOs) won't be picked up for publishing
- cargo: moved manifest metadata tracking from fingerprint to dep info
- cargo: test: make path arguments more generic and flexible
- cargo: test: relax
bad_crate_type
to only match error message prefix - cargo: test: relax panic output assertion
- rustdoc: use shorter paths as preferred canonical paths
- unsafe binder support in rustdoc
- clippy:
borrow_interior_mutable_const
ICE into FN - clippy: auto-fix
if_not_else
- clippy: correct suggestion for
manual_div_ceil
lint - clippy: do not remove required parentheses in
borrow_as_ptr
suggestion - clippy: do not trigger
trailing_empty_array
in tests - clippy: fix arguments of
ExprKind::MethodCall
- clippy: fix parentheses when replacing
matches!(…, None)
with.is_none()
- clippy: make
inconsistent_struct_constructor
"all fields are shorthand" requirement configurable - clippy: remove description of known problems in
match_same_arms
that have already been resolved - clippy: remove obsolete comment
- clippy: use the correct
ParamEnv
when checking future's output type - clippy: use the full lifetime name in suggestions
- rust-analyzer: cleanup target fetching for cargo metadata
- rust-analyzer: cleanup toolchain info fetching
- rust-analyzer: decouple proc-macro server protocol from the server implementation
- rust-analyzer: show go-to-type-def actions for subst when hovering
- rust-analyzer: show substitution where hovering over generic things
- rust-analyzer: unify handling of path diagnostics in hir-ty
- rust-analyzer: fix bug of "fill match arm" action in
tokio::main
macro - rust-analyzer: fix missing name
enum
when hovering on fields in variants - rust-analyzer: fix render of literal to be rendered in codeblock
- rust-analyzer: fix replace-if-let-with-match generates non-exhausive match
- rust-analyzer: avoid generating colliding names in
extract_variable
- rust-analyzer: consider
Enum::Variant
even when it comes from a different crate - rust-analyzer: do not merge spans if they have different anchors
- rust-analyzer: fix flycheck diagnostics flickering for binary targets
- rust-analyzer: fix invalid
-O
flag used by cfg discovery - rust-analyzer: fix metrics workflow using the wrong download-artifact version
- rust-analyzer: incorrect
file_id
used for ranges in outgoing calls - rust-analyzer: populate cargo config env vars for crates
- rust-analyzer: implement parameter variance inference
- rust-analyzer: treat ; as a terminator rather part of a glued expression
Rust Compiler Performance Triage
A pretty quiet week, with the exception of a significant improvement due to landing LTO for C / C++ programs compiled as part of the build.
Triage done by @simulacrum. Revision range: 0eca4dd3..93722f7e
0 Regressions, 1 Improvements, 1 Mixed; 0 of them in rollups 53 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
- No RFCs entered Final Comment Period this week.
Cargo
- No Cargo Tracking Issues or PRs entered Final Comment Period this week.
Language Team
- No Language Team Proposals entered Final Comment Period this week.
Language Reference
- No Language Reference RFCs entered Final Comment Period this week.
Unsafe Code Guidelines
- No Unsafe Code Guideline Tracking Issues or PRs entered Final Comment Period this week.
New and Updated RFCs
- [new] RFC:
Foo { .. }
pattern matches non-struct types - [new] RFC: add LLM text version to rustdoc
- [new] RFC: cfg_os_version_min
Upcoming Events
Rusty Events between 2025-01-01 - 2025-01-29 🦀
Virtual
- 2025-01-02 | Virtual (Berlin, DE) | OpenTechSchool Berlin + Rust Berlin
- 2025-01-04 | Virtual (Kampala, UG) | Rust Circle Kampala
- 2025-01-08 | Virtual (Tel Aviv-Yafo, IL) | Code Mavens 🦀 - 🐍 - 🐪
- 2025-01-09 | Virtual (Charlottesville, VA, US) | Charlottesville Rust Meetup
- 2025-01-09 | Miami, FL, US | Rust Miami
- 2025-01-09 | Virtual (Nürnberg, DE) | Rust Nuremberg
- 2025-01-14 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup
- 2025-01-15 | Virtual (Tel Aviv-Yafo, IL) | Code Mavens 🦀 - 🐍 - 🐪
- 2025-01-15 | Virtual (Vancouver, BC, CA) | Vancouver Rust
- 2025-01-16 | Virtual (Berlin, DE) | OpenTechSchool Berlin + Rust Berlin
- 2025-01-21 | Virtual (Tel Aviv-Yafo, IL) | Rust 🦀 TLV
- 2025-01-21 | Virtual (Washington, DC, US) | Rust DC
- 2025-01-22 | Virtual (Rotterdam, NL) | Bevy Game Development
- 2025-01-26 | Virtual (Tel Aviv-Yafo, IL) | Rust 🦀 TLV
Asia
- 2025-01-12 | Virtual (Tel Aviv-Yafo, IL) | Rust 🦀 TLV
Europe
- 2025-01-08 | Girona, ES | Rust Girona
- 2025-01-08 | Reading, UK | Reading Rust Workshop
- 2025-01-09 | Oslo, NO | Rust Oslo
- 2025-01-14 | Mannheim, DE | Hackschool - Rhein-Neckar
- 2025-01-16 | Amsterdam, NL | Rust Developers Amsterdam Group
- 2025-01-16 | Karlsruhe, DE | Rust Hack & Learn Karlsruhe
- 2025-01-21 | Ghent, BE | Systems Programming Ghent
- 2025-01-21 | Leipzig, SN, DE | Rust - Modern Systems Programming in Leipzig
- 2025-01-23 | Barcelona, ES | Barcelona Free Software
- 2025-01-28 | Aarhus, DK | Rust Aarhus
North America
- 2025-01-08 | Austin, TX, US | Rust ATX
- 2025-01-09 | Mountain View, CA, US | Hacker Dojo
- 2025-01-10 | Boston, MA, US | Boston Rust Meetup
- 2025-01-16 | Nashville, TN, US | Music City Rust Developers
- 2025-01-18 | Boston, MA, US | Boston Rust Meetup
- 2025-01-21 | San Francisco, CA, US | San Francisco Rust Study Group
- 2025-01-22 | Austin, TX, US | Rust ATX
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
Hear, hear! Rust is the real deep state. They knew all along that memory-related bugs would dominate the Vulnerability Rating Taxonomy. Coincidence? I think not. 🐛🔧
– @amoghavarsha@infosec.exchange on mastodon
Thanks to llogiq for the suggestion!
Please submit quotes and vote for next week!
This Week in Rust is edited by: nellshamrell, llogiq, cdmistman, ericseppanen, extrawurst, U007D, joelmarcey, mariannegoldin, bennyvasquez, bdillo Email list hosting is sponsored by The Rust Foundation