This Week In Rust 505
2023-07-26
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.
Official
Foundation
Project/Tooling Updates
Observations/Thoughts
Rust Walkthroughs
Research
Miscellaneous
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.
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 when no_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, without assumes
- 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 to iter_instantiated
- restrict recursive opaque type check
- resurrect:
rustc_llvm: Add a -Z print-codegen-stats option to expose LLVM statistics
- reuse
codegen_ssa monomorphization errors in codegen_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 and async
- 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() over features_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 for EncodeUtf16
- 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 of StreamExt::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 lint unsafe or extern fns
- clippy:
manual_filter_map: lint on matches and pattern matching
- clippy:
ptr_arg should ignore extern functions
- clippy:
redundant_pattern_matching: include guard in suggestion
- clippy:
unnecessary_literal_unwrap: fix ICE on None.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! in ifs_same_cond
- clippy: make
comparison_to_empty work on if 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 from cargo 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
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
Europe
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
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
Discuss on r/rust