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
Observations/Thoughts
- Totality
- Why the “Null” Lifetime Does Not Exist
- First report: More than 80% of the crates link to their public VCS
- [video] Aram Drevekenin – Zellij - A terminal workspace with batteries included
Rust Walkthroughs
- Make invalid states unrepresentable
- A visual tree iterator in Rust
- A gentle introduction to IMAP
- ESP32 Standard Library Embedded Rust: UART Communication
- Shuttle Launchpad #3: Sudoku, Ownership and Error Handling
- [video] Pragmatic Intro to Rust Web Development: Overview
Research
Miscellaneous
- How to speed up the Rust compiler: data analysis assistance requested!
- Programming language popularity: Rust
- Llama2.rs - Inference Llama 2 in one file of pure Rust
Crate of the Week
This week's crate is tower-async, a currently nightly-only async library to build network servers, based on tower.
Thanks to Glen De Cauwsemaecker 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.
- Ockam - Investigate if the macOS toggle is possible in system tray app build with Tauri
- Ockam - Avoid setting an embedded node as default for
ockam project enroll
- Ockam -
ockam project ticket
should return a proper error message - Hyperswitch - Migrate to enum_dispatch to reduce runtime overhead
- Hyperswitch - Add Create Merchant and Create Merchant Key Store in a DB transaction
- Hyperswitch - Use proxy exclusion instead of a separate proxied client
- Hyperswitch - Add scoped error enum for customer error
If you are a Rust project owner and are looking for contributors, please submit tasks here.
Updates from the Rust Project
406 pull requests were merged in the last week
- add mips64r6 and mips32r6 as
target_arch
values - add
riscv64gc-unknown-hermit
target - add
x86_64-unknown-linux-ohos
target - enable chkstk/alloca intrinsics on
x86_64-unknown-uefi
- Support
.comment
section like GCC/Clang (!llvm.ident
) - add Alias to smir
- add BITS,
from_bits, to_bits
to IP addresses - add FnPtr ty to SMIR
- add Foreign, Never, FnDef, Closure and Generator tys to SMIR
- add
#[inline]
to core debug assertion helpers - add dynamic for smir
- add the
no-builtins
attribute to functions whenno_builtins
is applied at the crate level - add ty convs for smir refs and ptrs
- allow opaques to be defined by trait queries, again
- always const-prop scalars and scalar pairs
- avoid tls access while iterating through mpsc thread entries
- better diagnostics for dlltool errors
- comment stuff in the new solver
- don't translate compiler-internal bug messages
- encode shorthands for spans in metadata
- error/E0691: include alignment in error message
- fix
#[inline(always)]
on closures with target feature 1.1 - fix
inline_const
with interpolated block - fix invalid display of inlined re-export when both local and foreign items are inlined
- fix removal span calculation of
unused_qualifications
suggestion - fix results search alias display
- fix rustc-args passing issue in bootstrap
- get
!nonnull
metadata on slice iterators, withoutassume
s - get rid of subst-relate incompleteness in new solver
- improve error message when closing bracket interpreted as formatting fill character
- inline overlap based CGU merging
- lint/ctypes: only try normalize
- new solver: add a separate cache for coherence
- new solver: don't consider blanket impls multiple times
- on nightly, dump ICE backtraces to disk
- permit pre-evaluated constants in
simd_shuffle
- prototype: add unstable
-Z reference-niches
option - querify unused trait check
- refactor vtable encoding and optimize it for the case of multiple marker traits
- remove
Scope::Elision
from bound-vars resolution - rename
arg_iter
toiter_instantiated
- restrict recursive opaque type check
- resurrect:
rustc_llvm
: Add a -Zprint-codegen-stats
option to expose LLVM statistics - reuse
codegen_ssa
monomorphization errors incodegen_gcc
- reuse the MIR validator for MIR inlining
- revert "Prototype: Add unstable
-Z reference-niches
option" - safe Transmute: Fix ICE (due to UnevaluatedConst)
- substitute types before checking inlining compatibility
- support
--print KIND=PATH
command line syntax - support interpolated block for
try
andasync
- turn copy into moves during DSE
- tweak spans for self arg, fix borrow suggestion for signature mismatch
- use SHA256 source file checksums by default when targeting MSVC
- use
features()
overfeatures_untracked()
where possible - use erased self type when autoderefing for trait error suggestion
- use the correct span for displaying the line following a derive sugge…
- miri: make full field retagging the default
- remove redundant clones
- fix
size_hint
forEncodeUtf16
- allow limited access to
OsString
bytes - make
{Rc,Arc}::allocator
associated functions - stabilize chown functions (
unix_chown
) - remove an allocation in
Path::with_extension
- remove the unstable
core::sync::atomic::ATOMIC_*_INIT
constants - remove lifetime bound for A for
impl Extend<&'a T> for Vec<T, A>
- hashbrown: publicly re-export
Equivalent
from the crate root - futures: add
TryStreamExt::try_ready_chunks
as failable version ofStreamExt::ready_chunks
- codegen_gcc: add instructions on how to generate GIMPLE format
- codegen_gcc: add support for
"ffi_const"
function attribute - cargo: git: respect scp-like URL for nested submodules
- cargo: credential provider implementation
- cargo: fix "cargo doc --open" crash on WSL2
- cargo: fix: encode URL params correctly for SourceId in Cargo.lock
- cargo: fix: only skip mtime check on
~/.cargo/{git,registry}
- rustdoc: strip impl if not re-exported and is
doc(hidden)
- rustdoc: fix position of
default
in method rendering - rustdoc: handle cross-crate RPITITs correctly
- clippy:
significant_drop_tightening
don't lint literal-returning functions - clippy:
significant_drop_tightening
fix tuple drop recognition - clippy:
inherent_to_string
: Don't lintunsafe
orextern
fns - clippy:
manual_filter_map
: lint onmatches
and pattern matching - clippy:
ptr_arg
should ignore extern functions - clippy:
redundant_pattern_matching
: include guard in suggestion - clippy:
unnecessary_literal_unwrap
: fix ICE onNone.unwrap_or_default()
- clippy:
unused_async
: don't lint if paths reference async fn without immediate call - clippy:
unwrap_or_else_default
→unwrap_or_default
and improve resulting lint - clippy: allow
Self::cmp(self, other)
as a correct impl - clippy: check for fully qualified paths in
unnecessary_cast
- clippy: check that the types are equal in
SpanlessEq::eq_expr
- clippy: fix
unwrap_or_else_default
false positive - clippy: fix async functions handling for
needless_pass_by_ref_mut
lint - clippy: fix: false positive for
option_env!
inifs_same_cond
- clippy: make
comparison_to_empty
work onif let
/let
chains - clippy: new lints:
absolute_paths
,error_impl_error
,four_forward_slashes
,iter_skip_zero
,needless_return_with_try
,redundant_guards
,string_lit_chars_any
,redundant_locals
- clippy: refactor some of
dereference.rs
to util functions - clippy: remove
#![allow(unused)]
and--crate-name
fromcargo dev new_lint
generated tests - clippy: rewrite
tuple_array_conversions
- rust-analyzer: editor/code: Use notification command links for debugger installation
- rust-analyzer: fix highlighting of byte escape sequences
- rust-analyzer: fix: don't follow raw pointer derefs when considering method receiver candidates
- rust-analyzer: fix: lookup super traits in
is_dyn_method
- rust-analyzer: fix: normalize expected ty in call arguments
- rust-analyzer: fix: report
incorrect-ident-case
for inner items - rust-analyzer: limit
change_visibility
assist to applicable items - rustfmt: prevent ICE when formatting an empty-ish macro arm
- rustfmt: support non-lifetime binders
Rust Compiler Performance Triage
A relatively light week with respect to performance changes. The one major
regressing PR was reverted (for other reasons), and we saw some very nice gains
on compile-times from (1.) changes to our codegen-unit merging logic and from
(2.) changes to the stdlib slice iterators encoding its non-null guarantees
directly, allowing the removal of a call to the assume
intrinsic.
Triage done by @pnkfelix. Revision range: 6b9236ed..0308df23
1 Regressions, 1 Improvements, 4 Mixed; 1 of them in rollups 35 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
- [disposition: merge] make
noop_method_call
warn by default - [disposition: merge] Infer type in irrefutable slice patterns with fixed length as array
New and Updated RFCs
- [new] Add "crates.io Policy Update" RFC
- [new] RFC: Generic member access for dyn Error trait objects
- [new] Error Display (std::error::Error::fmt_error)
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-07-26 - 2023-08-23 🦀
Virtual
- 2023-07-26 | Virtual (Cardiff, UK)| Rust and C++ Cardiff
- 2023-07-27 | Virtual (Charlottesville, NC, US) | Charlottesville Rust Meetup
- 2023-07-28 | Virtual (Tunis, TN) | Rust Meetup Tunisia
- 2023-07-31 | Virtual (Linz, AT) | Rust Linz
- 2023-08-01 | Virtual (Berlin, DE) | OpenTechSchool Berlin
- 2023-08-01 | Virtual (Buffalo, NY, US) | Buffalo Rust Meetup
- 2023-08-02 | Virtual (Indianapolis, IN, US) | Indy Rust
- 2023-08-02 | Virtual (Stuttgart, DE) | Rust Community Stuttgart
- 2023-08-08 | Virtual (Dallas, TX, US) | Dallas Rust
- 2023-08-10 | Virtual (Nuremberg, DE) | Rust Nuremberg
- 2023-08-15 | Virtual (Berlin, DE) | OpenTechSchool Berlin
- 2023-08-15 | Virtual (Washington, DC, US) | Rust DC
- 2023-08-16 | Virtual (Vancouver, BC, CA) | Vancouver Rust
- 2023-08-22 | Virtual (Dublin, IE) | Rust Dublin
Asia
- 2023-07-27 | Seoul, KR | Rust Programming Meetup Seoul
- 2023-07-27 | Seoul, KR | T-RUST meetup
Europe
- 2023-07-27 | Copenhagen, DK | Copenhagen Rust Community
- 2023-07-27 | Vienna, AT | Rust Vienna
- 2023-08-17 | Reading, UK | Reading Rust Workshop
- 2023-08-22 | Helsinki, FI | Finland Rust Meetup
- 2023-08-24 | Aarhus, DK | Rust Aarhus
North America
- 2023-07-27 | Mountain View, CA, US | Mountain View Rust Meetup
- 2023-08-01 | Chicago, IL, US | Deep Dish Rust
- 2023-08-07 | Minneapolis, MN, US | Minneapolis Rust Meetup
- 2023-08-10 | Mountain View, CA, US | Mountain View Rust Meetup
- 2023-08-10 | Lehi, UT, US | Utah Rust
- 2023-08-15 | San Francisco, CA, US | San Francisco Rust Study Group
- 2023-08-15 | Seattle, WA, US | Seattle Rust User Group Meetup
- 2023-08-17 | Nashville, TN, US | Seattle Rust User Group Meetup
- 2023-08-23 | Austin, TX, US | Rust ATX
Oceania
- 2023-07-27 | Brisbane, QLD, AU | Rust Brisbane
- 2023-08-08 | Aukland, NZ | Rust AKL
- 2023-08-09 | Perth, WA, AU | Rust Perth
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
A rustacean is a programmer that dislikes being told "yes" in situations where they'll regret it later.
– Predrag Gruevski on mastodon
Thanks to Kevin Mehall 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