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
Foundation
Project/Tooling Updates
- This month in Servo: upcoming events, new browser UI, and more!
- Pagefind v1.0.0 — Stable static search at scale
- Open sourcing the Grafbase Engine
- Announcing Arroyo 0.6.0
- rust-analyzer changelog #199
- rumqttd 0.18.0
Observations/Thoughts
- Stability without stressing the !@#! out
- The State of Async Rust
- NFS > FUSE: Why We Built our own NFS Server in Rust
- Breaking Tradition: Why Rust Might Be Your Best First Language
- The Embedded Rust ESP Development Ecosystem
- Sifting through crates.io for malware with OSSF Package Analysis
- Choosing a more optimal
String
type - Changing the rules of Rust
- Follow up to "Changing the rules of Rust"
- When Zig Outshines Rust - Memory Efficient Enum Arrays
- Three years of Bevy
- Should I Rust or should I go?
- [audio] What's New in Rust 1.68 and 1.69
- [audio] Pitching Rust to decision-makers, with Joel Marcey
Rust Walkthroughs
- 🤗 Calling Hugging Face models from Rust
- Rust Cross-Compilation With GitHub Actions
- tuify your clap CLI apps and make them more interactive
- Enhancing ClickHouse's Geospatial Support
- [video] All Rust string types explained
Research
- A Grounded Conceptual Model for Ownership Types in Rust
- Debugging Trait Errors as Logic Programs
- REVIS: An Error Visualization Tool for Rust
Miscellaneous
Crate of the Week
This week's crate is RustQuant, a crate for quantitative finance.
Thanks to avhz for the self-suggestion!
Please submit your suggestions and votes for next week!
Call for Participation
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.
- r3bl_rs_utils - [tuify] Use nice ANSI symbols instead of ">" to decorate what row is currently selected
- r3bl_rs_utils - [all] Use nu shell scripts (not just or fish) and add Github Actions to build & test on mac & linux
- r3bl_rs_utils - [tuify] Use offscreen buffer from r3bl_tui to make repaints smooth
- Ockam - make building of
ockam_app
create behind a feature flag - Ockam - Use the Terminal to print out RPC response instead of printlns
- Hyperswitch - add domain type for client secret
- Hyperswitch - separate payments_session from payments core
- Hyperswitch - move redis key creation to a common module
If you are a Rust project owner and are looking for contributors, please submit tasks here.
Updates from the Rust Project
342 pull requests were merged in the last week
#[diagnostic::on_unimplemented]
without filtersrepr(transparent)
: it's fine if the one non-1-ZST field is a ZST- accept additional user-defined syntax classes in fenced code blocks
- add
explicit_predicates_of
to SMIR - add
i686-pc-windows-gnullvm
triple - add diagnostic for raw identifiers in format string
- add source type for invalid bool casts
- cache
reachable_set
on disk - canonicalize effect vars in new solver
- change
unsafe_op_in_unsafe_fn
to bewarn
-by-default from edition 2024 - closure field capturing: don't depend on alignment of packed fields
- consistently pass
ty::Const
through valtrees - coverage: simplify internal representation of debug types
- disabled socketpair for Vita
- enable varargs support for AAPCS calling convention
- extend rustc -Zls
- fallback effects even if types also fallback
- fix
std::primitive
doc: homogenous → homogeneous - fix the error message for
#![feature(no_coverage)]
- fix: return early when has tainted in mir pass
- improve Span in smir
- improve
PadAdapter::write_char
- improve invalid let expression handling
- inspect: closer to proof trees for coherence
- llvm-wrapper: adapt for LLVM API changes
- make
.rmeta
file indep-info
have correct name (lib
prefix) - make
ty::Const
debug printing less verbose - make
useless_ptr_null_checks
smarter about some std functions - move
required_consts
check to general post-mono-check function - only suggest turbofish in patterns if we may recover
- properly consider binder vars in
HasTypeFlagsVisitor
- read from non-scalar constants and statics in dataflow const-prop
- remove
verbose_generic_activity_with_arg
- remove assert that checks type equality
- resolve: mark binding is determined after all macros had been expanded
- rework
no_coverage
tocoverage(off)
- small wins for formatting-related code
- some ConstValue refactoring
- some inspect improvements
- treat host effect params as erased in codegen
- turn custom code classes in docs into warning
- visit
ExprField
for lint levels - store a index per dep node kind
- stabilize the
Saturating
type - stabilize
const_transmute_copy
- make
Debug
impl forascii::Char
match that ofchar
- add
minmax{,_by,_by_key}
functions tocore::cmp
- specialize count for range iterators
- impl
Step
for IP addresses - add implementation for
thread::sleep_until
- cargo: cli: Add '-n' to dry-run
- cargo: pkgid: Allow incomplete versions when unambigious
- cargo: doc: differentiate defaults for split-debuginfo
- cargo: stabilize credential-process and registry-auth
- cargo: emit a warning for
credential-alias
shadowing - cargo: generalise suggestion on abiguous spec
- cargo: limit cargo add feature print
- cargo: prerelease candidates error message
- cargo: consolidate clap/shell styles
- cargo: use
RegistryOrIndex enum
to replace two booleans - rustfmt: Style help like cargo nightly
- clippy: ignore
#[doc(hidden)]
functions in clippy doc lints - clippy: reuse rustdoc's doc comment handling in Clippy
- clippy:
extra_unused_type_parameters
: Fix edge case FP for parameters in where bounds - clippy:
filter_map_bool_then
: include multiple derefs from adjustments - clippy:
len_without_is_empty
: follow type alias to find inherentis_empty
method - clippy:
used_underscore_bindings
: respect lint levels on the binding definition - clippy:
useless_conversion
: don't lint if type parameter has unsatisfiable bounds for.into_iter()
receiver - clippy: fix FP of
let_unit_value
on async fn args - clippy: fix ICE by
u64::try_from(<u128>)
- clippy: trigger
transmute_null_to_fn
on chain of casts - clippy: fix
filter_map_bool_then
with a bool reference - clippy: ignore closures for some type lints
- clippy: ignore span's parents in
collect_ast_format_args
/find_format_args
- clippy: add
redundant_as_str
lint - clippy: add extra
byref
checking for the guard's local - clippy: new
unnecessary_map_on_constructor
lint - clippy: new lint:
path_ends_with_ext
- clippy: split
needless_borrow
into two lints - rust-analyzer: field shorthand overwritten in promote local to const assist
- rust-analyzer: don't skip closure captures after let-else
- rust-analyzer: fix lens location
"above_whole_item"
breaking lenses - rust-analyzer: temporarily skip decl check in derive expansions
- rust-analyzer: prefer stable paths over unstable ones in import path calculation
Rust Compiler Performance Triage
A pretty quiet week, with relatively few statistically significant changes, though some good improvements to a number of benchmarks, particularly in cycle counts rather than instructions.
Triage done by @simulacrum. Revision range: 7e0261e7ea..af78bae
3 Regressions, 3 Improvements, 2 Mixed; 2 of them in rollups
56 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: Unicode and escape codes in literals
Tracking Issues & PRs
- [disposition: merge] stabilize combining +bundle and +whole-archive link modifiers
- [disposition: merge] Stabilize
impl_trait_projections
- [disposition: merge] Tracking Issue for
option_as_slice
- [disposition: merge] Amend style guide section for formatting where clauses in type aliases
- [disposition: merge] Add allow-by-default lint for unit bindings
New and Updated RFCs
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:
- No RFCs issued a call for testing 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.
Upcoming Events
Rusty Events between 2023-09-20 - 2023-10-18 🦀
Virtual
- 2023-09-20 | Virtual (Cardiff, UK)| Rust and C++ Cardiff
- 2023-09-20 | Virtual (Vancouver, BC, CA) | Vancouver Rust
- 2023-09-21 | Virtual (Charlottesville, NC, US) | Charlottesville Rust Meetup
- 2023-09-21 | Virtual (Cologne, DE) | Cologne AWS User Group #AWSUGCGN
- 2023-09-21 | Virtual (Linz, AT) | Rust Linz
- 2023-09-21 | Virtual (Stuttgart, DE) | Rust Community Stuttgart
- 2023-09-25 | Virtual (Dublin, IE) | Rust Dublin
- 2023-09-26 | Virtual (Berlin, DE) | OpenTechSchool Berlin
- 2023-09-26 | Virtual (Dallas, TX, US) | Dallas Rust
- 2023-09-26 | Virtual (Melbourne, VIC, AU) | Rust Melbourne
- 2023-10-03 | Virtual (Buffalo, NY, US) | Buffalo Rust Meetup
- 2023-10-04 | Virtual (Stuttgart, DE) | Rust Community Stuttgart
- 2023-10-04 | Virtual (Various) | Ferrous Systems
- 2023-10-05 | Virtual (Charlottesville, NC, US) | Charlottesville Rust Meetup
- 2023-10-07 | Virtual (Kampala, UG) | Rust Circle Kampala
- 2023-10-10 | Virtual (Berlin, DE) | OpenTechSchool Berlin
- 2023-10-10 | Virtual (Dallas, TX, US) | Dallas Rust
- 2023-10-11| Virtual (Boulder, CO, US) | Boulder Elixir and Rust
- 2023-10-11 - 2023-10-13 | Virtual (Brussels, BE) | EuroRust
- 2023-10-12 | Virtual (Nuremberg, DE) | Rust Nuremberg
- 2023-10-18 | Virtual (Vancouver, BC, CA) | Vancouver Rust
Asia
- 2023-09-25 | Singapore, SG | Metacamp - Web3 Blockchain Community
- 2023-09-26 | Singapore, SG | Rust Singapore
- 2023-10-03 | Taipei, TW | WebAssembly and Rust Meetup (Wasm Empowering AI)
Europe
- 2023-09-21 | Aarhus, DK | Rust Aarhus
- 2023-09-21 | Bern, CH | Rust Bern
- 2023-09-28 | Berlin, DE | React Berlin
- 2023-09-28 | Madrid, ES | MadRust
- 2023-09-28 | Paris, FR | Paris Scala User Group (PSUG)
- 2023-09-30 | Saint Petersburg, RU | Rust Saint Petersburg meetups
- 2023-10-10 | Berlin, DE | OpenTechSchool Berlin
- 2023-10-12 | Reading, UK | Reading Rust Workshop
- 2023-10-17 | Leipzig, DE | Rust - Modern Systems Programming in Leipzig
North America
- 2023-09-21 | Lehi, UT, US | Utah Rust
- 2023-09-21 | Mountain View, CA, US | Mountain View Rust Meetup
- 2023-09-21 | Nashville, TN, US | Music City Rust Developers
- 2023-09-26 | Mountain View, CA, US | Rust Breakfast & Learn
- 2023-09-26 | Pasadena, CA, US | Pasadena Thursday Go/Rust
- 2023-09-27 | Austin, TX, US | Rust ATX
- 2023-09-28 | Boulder, CO, US | Solid State Depot - The Boulder Makerspace
- 2023-10-11 | Boulder, CO, US | Boulder Rust Meetup
- 2023-10-12 | Lehi, UT, US | Utah Rust
- 2023-10-17 | San Francisco, CA, US | San Francisco Rust Study Group
Oceania
- 2023-09-26 | Canberra, ACT, AU | Rust Canberra
- 2023-09-26 | Melbourne, VIC, AU | Rust Melbourne
- 2023-09-28 | Brisbane, QLD, AU | Rust Brisbane
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
This is the first programming language I've learned that makes it so easy to make test cases! It's actually a pleasure to implement them.
Thanks to Moy2010 for the 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