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
Official
Newsletters
Project/Tooling Updates
- Announcing Nio: an async runtime for Rust
- Announcing rust-query
- "pigg" (the Raspberry Pi GPIO GUI) 0.5.0 release, now with Pi Pico W support via rust and embassy
- Hello flourish! - Intuitive signals in Rust
- Ferrocene 24.11.0 with medical and QNX qualification now available!
Observations/Thoughts
- A Novel Idea About
Functor
In Rust? - Optimizing a Rust GPU matmul kernel
- Map Keys and Lifetimes
- Rustlantis: Randomized Differential Testing of the Rust Compiler
- Undroppable Types
- 40-year-old hacker group prefers Rust
- Cursed Linear Types In Rust
- Unsafe for work
- Aligning with rust's Guiding Principle: my path to finding my 'Why'
Rust Walkthroughs
- [video] Build with Naz - TLS in Rust with tokio, rustls, CFSSL
- Optimization adventures: making a parallel Rust workload 10x faster with (or without) Rayon
- Building Thread-safe Async Primitives in 150 lines of Rust
- Securely sending DHT22 sensor data from an ESP32 board to PostgreSQL
- Writing a mark-and-sweep tracing GC in Rust
Miscellaneous
Crate of the Week
This week's crate is postcard, a battle-tested, well-documented #[no_std]
compatible serializer/deserializer geared towards use in embedded devices.
Thanks to Reto Trappitsch for the 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.
RFCs
Rust
Rustup
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.
- Diesel - Add support for currently unsupported postgres json/jsonb functions
- Diesel - Add missing sqlite json/jsonb functions and operators
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.
- Rust in Paris 2025 | Deadline: 30 November 2024 | Paris, FR | 15 March 2025
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!
- FOSDEM 2025 Rust devroom | Deadline: 1 December 2024 | Brussels, BE | 1 February 2025
Updates from the Rust Project
405 pull requests were merged in the last week
lints_that_dont_need_to_run
: never skip future-compat-reported lints- aarch64 softfloat target: always pass floats in int registers
- account for
wasm32v1-none
when exporting TLS symbols - add
visit
methods to ast nodes that already havewalk
s on ast visitors - add specific diagnostic for using
macro_rules
macro as attribute/derive - add visits to nodes that already have
flat_maps
inast::MutVisitor
- allow disabling ASan instrumentation for globals
- bail in effects in old solver if self ty is ty var
- btree: don't leak value if destructor of key panics
- constify the
Deref
/DerefMut
traits, too - continue
ParamEnv
toTypingEnv
transition - correct the tier listing of
wasm32-wasip2
- default-enable
llvm_tools_enabled
when noconfig.toml
is present - distinguish overflow and unimplemented in
Step::steps_between
- don't allow
-Zunstable-options
to take a value - drop debug info instead of panicking if we exceed LLVM's capability to represent it
- emscripten: link with
-sWASM_BIGINT
- fix LLVM target triple for
x86_64-win7-windows-msvc
- fix asm goto with outputs and move it to a separate feature gate
- fix closure arg extraction in
extract_callable_info
, generalize it to async closures - implement
~const Destruct
effect goal in the new solver - implement
~const Fn
trait goal in the new solver - implement
~const
item bounds in RPIT - implement the unsafe-fields RFC
- make
PointerLike
opt-in instead of built-in - make asm label blocks safe context
- merge
-Zhir-stats
into-Zinput-stats
- point at
const
definition when used instead of a binding in alet
statement - pretty print async fn sugar in opaques and trait bounds
- reduce false positives of tail-expr-drop-order from consumed values (attempt #2)
- refactor
where
predicates, and reserve for attributes support - remove
is_trivially_const_drop
- remove legacy bitcode for iOS
- report the
unexpected_cfgs
lint in external macros - rustc: fail fast when compiling a source file larger than 4 GiB
- show
abi_unsupported_vector_types
lint in future breakage reports - stop being so bail-y in candidate assembly
- store resolution for self and crate root module segments
- unstable feature usage metrics
- use
ConstArgKind::Path
for all single-segment paths, not just params undermin_generic_const_args
- use
confstr(_CS_DARWIN_USER_TEMP_DIR, ...)
as aTMPDIR
fallback on Darwin - use arc4random of libc for RTEMS target
- use attributes for
dangling_pointers_from_temporaries
lint - interpret: do not ICE when a promoted fails with OOM
- miri: added epoll and eventfd for Android
- miri: eventfd: comment tweaks
- miri: fill out windows io error mapping table
- miri: follow-up on #4052, making a miri evaluation context fn for
strerror_r
- miri: implement square root without relying on host floats
- miri: refactor
AnonSocket::read/write
for blocking socketpair - miri: simplify thread blocking tests
- miri: sysconf adding few more constants
- miri: sysconf interception fix for solarish systems
- miri: trophy case: add
RwLock::downgrade
bug - miri: use
PathBuf
APIs to correctly do some path manipulation cross-platform - resolve tweaks
- finish
Reveal
removal - stabilize the 2024 edition
- stabilize
Ipv6Addr::is_unique_local
andIpv6Addr::is_unicast_link_local
- stabilize
const_float_methods
- stabilize
const_pin_2
- minimally constify
Add
- mark
<[T; N]>::as_mut_slice
with theconst
specifier - mark
get_mut
andset_position
instd::io::Cursor
as const - reduce integer
Display
implementation size - std: allow after-main use of synchronization primitives
- implement
OsString::truncate
- add
AsyncFn*
to the prelude in all editions - add
BorrowedBuf::into_filled{,_mut}
methods to allow returning buffer with original lifetime - add
std::thread::add_spawn_hook
- add
vec_deque::Iter::as_slices
and friends - support
each_ref
andeach_mut
in[T; N]
in constant expressions - support input/output in vector registers of s390x inline assembly (under
asm_experimental_reg
feature) - support s390x z13 vector ABI
- uefi: process: add args support
- hashbrown: release v0.15.2
- cargo:
test(rustflags)
: Verify -Cmetadata directly, not through -Cextra-filename - cargo: allow registries to omit empty/default fields in JSON
- cargo: check build target supports std when building with -Zbuild-std=std
- cargo: docs for optional registry JSON fields
- cargo: feat: stabilize Edition 2024
- cargo: improve error handling when PathSource is relative
- cargo: test: address test output nondeterminism
- cargo: test: switch from
'exec_with_output'
to 'run' - rustdoc: do not call
to_string,
it's already impl Display - bindgen: add
raw_ref_macros
feature - clippy: add new lint
doc_include_without_cfg
- clippy: add note about caveat for
cfg(doc)
- clippy: don't consider lifetimes in bounded types unused (fix
extra_unused_lifetimes
FP) - clippy: sync and Release automation
- clippy: use a better message for
unnecessary_map_or
lint - rust-analyzer: convert
add_braces
to SyntaxFactory SyntaxEditor abstraction - rust-analyzer: use snippet placeholders for generated match arms
- rust-analyzer: fix a stack overflow when computing the sizedness of a
struct
that includes itself as the tail field - rust-analyzer: improve selection handling for the
merge_match_arms
assist - rust-analyzer: migrate
reorder_impl_items
Assist to UseSyntaxFactory
Rust Compiler Performance Triage
This week saw more regressions than improvements, mostly due to three PRs that performed internal refactorings that are necessary for further development and modification of the compiler.
Triage done by @kobzol. Revision range: 7d40450b..7db7489f
Summary:
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions ❌ (primary) |
0.6% | [0.1%, 3.6%] | 57 |
Regressions ❌ (secondary) |
0.6% | [0.0%, 2.7%] | 100 |
Improvements ✅ (primary) |
-0.5% | [-1.5%, -0.2%] | 11 |
Improvements ✅ (secondary) |
-0.4% | [-0.5%, -0.3%] | 7 |
All ❌✅ (primary) | 0.4% | [-1.5%, 3.6%] | 68 |
4 Regressions, 2 Improvements, 3 Mixed; 3 of them in rollups 40 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
- [disposition: merge] [RFC] Explicit ABI in extern
Tracking Issues & PRs
Rust
- [disposition: merge] Tracking Issue for
sub_ptr
(featureptr_sub_ptr
) - [disposition: merge] Stabilize unsigned and float variants of `num_midpoint` feature
- [disposition: merge] Tracking issue for Vec::extract_if and LinkedList::extract_if
- [disposition: merge] Stabilize noop_waker
- [disposition: merge] Stabilize const_maybe_uninit_write
- [disposition: merge] Tracking Issue for Path::file_prefix
- [disposition: merge] Stabilize `#[diagnostic::do_not_recommend]`
- [disposition: merge] Make missing_abi lint warn-by-default.
- [disposition: merge] Tracking Issue for ptr::fn_addr_eq
- [disposition: merge] Fix and undeprecate home_dir()
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] crates.io: Remove version deletions from the "crate deletions" RFC
- [new] RFC: Add a semantically non-blocking lint level
Upcoming Events
Rusty Events between 2024-11-27 - 2024-12-25 🦀
Virtual
- 2024-11-28 | Virtual (Charlottesville, NC, US) | Charlottesville Rust Meetup
- 2024-11-28 | Virtual (Nürnberg, DE) | Rust Nuremberg
- 2024-11-29 | Virtual (Jersey City, NJ, US)| Jersey City Classy and Curious Coders Club Cooperative
- 2024-12-02 | Virtual (London, UK) | Women in Rust
- 2024-12-03 | Virtual (Buffalo, NY, US) | Buffalo Rust Meetup
- 2024-12-03 | Virtual (San Francisco, CA, US) | Blockchain Center SF
- 2024-12-04 | Virtual (Indianapolis, IN, US) | Indy Rust
- 2024-12-05 | Virtual (Berlin, DE) | OpenTechSchool Berlin + Rust Berlin
- 2024-12-05 | Virtual (Miami, FL) | Miami Java User Group Events
- 2024-12-06 | Virtual (Jersey City, NJ, US)| Jersey City Classy and Curious Coders Club Cooperative
- 2024-12-07 | Virtual (Kampala, UG) | Rust Circle Kampala
- 2024-12-08 | Virtual (Tel Aviv-Yafo, IL) | Rust 🦀 TLV
- 2024-12-10 | Virtual (Dallas, TX, US) | Dallas Rust
- 2024-12-11 | Virtual (Vancouver, BC, CA) | Vancouver Rust
- 2024-12-12 | Virtual (Charlottesville, NC, US) | Charlottesville Rust Meetup
- 2024-12-12 | Virtual (Nürnberg, DE) | Rust Nuremberg
- 2024-12-12 | Hybrid: In-Person and Virtual (Seattle, WA, US) | Seattle Rust Meetup
- 2024-12-13 | Virtual (Jersey City, NJ, US)| Jersey City Classy and Curious Coders Club Cooperative
- 2024-12-17 | Virtual (San Francisco, CA, US) | Blockchain Center SF
- 2024-12-17 | Virtual (Washington, DC, US) | Rust DC
- 2024-12-19 | Virtual (Berlin, DE) | OpenTechSchool Berlin + Rust Berlin
- 2024-12-19 | Virtual (Mexico City, DF, MX) | Rust MX
- 2024-12-20 | Virtual (Jersey City, NJ, US)| Jersey City Classy and Curious Coders Club Cooperative
- 2024-12-24 | Virtual (Dallas, TX, US) | Dallas Rust
Africa
- 2024-12-10 | Johannesburg, ZA | Johannesburg Rust Meetup
Asia
- 2024-11-28 | Bangalore/Bengaluru, IN | Rust Bangalore
- 2024-11-30 | Tokyo, JP | Rust Tokyo
- 2024-12-03 | Ra'anana, IL | Abra R&D Meetups
Europe
- 2024-11-27 | Dortmund, DE | Rust Dortmund
- 2024-11-28 | Aarhus, DK | Rust Aarhus
- 2024-11-28 | Augsburg, DE | Rust Meetup Augsburg
- 2024-11-28 | Berlin, DE | OpenTechSchool Berlin + Rust Berlin
- 2024-11-28 | Copenhagen, DK | Copenhagen Rust Community
- 2024-11-28 | Gdansk, PL | Rust Gdansk
- 2024-11-28 | Hamburg, DE | Rust Meetup Hamburg
- 2024-11-28 | Manchester, UK | Rust Manchester
- 2024-11-28 | Prague, CZ | Rust Prague
- 2024-11-30 | Stockholm, SE | Stockholm Rust
- 2024-12-03 | Copenhagen, DK | Copenhagen Rust Community
- 2024-12-04 | Girona, ES | Rust Girona
- 2024-12-04 | Köln, DE | Rust Cologne
- 2024-12-04 | Oxford, UK | Oxford Rust Meetup Group
- 2024-12-04 | Paris, FR | Rust Paris
- 2024-12-05 | Gdansk, PL | Rust Gdansk
- 2024-12-05 | Zlin, CZ | Rust Moravia
- 2024-12-06 | Moscow, RU | RustCon RU
- 2024-12-11 | Reading, UK | Reading Rust Workshop
- 2024-12-12 | Amsterdam, NL | Rust Developers Amsterdam Group
- 2024-12-17 | Leipzig, DE | Rust - Modern Systems Programming in Leipzig
North America
- 2024-11-27 | Austin, TX, US | Rust ATX
- 2024-12-05 | Montréal, QC, CA | Rust Montréal
- 2024-12-05 | St. Louis, MO, US | STL Rust
- 2024-12-10 | Ann Arbor, MI, US | Detroit Rust
- 2024-12-12 | Mountain View, CA, US | Hacker Dojo
- 2024-12-12 | Hybrid: In-Person and Virtual (Seattle, WA, US) | Seattle Rust User Group
- 2024-12-16 | Minneapolis, MN, US | Minneapolis Rust Meetup
- 2024-12-17 | San Francisco, CA, US | San Francisco Rust Study Group
- 2024-12-23 | Ferndale, MI, US | Detroit Rust
Oceania
- 2024-12-04 | Sydney, AU | Rust Sydney
- 2024-12-08 | Canberra, AU | Canberra Rust User Group
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
Will never stop being positively surprised by clippy
text error: hypothenuse can be computed more accurately: --> src/main.rs:835:5 | 835 | (width * width + height * height).sqrt() / diag | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `width.hypot(height)` | help: for further information, visit https://rust-lang.github.io/rust-clippy/master/index.html#imprecise_flops
llogiq is quite self-appreciative regarding his 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