This Week in Rust 505
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
crates.io Postmortem: Broken Crate Downloads
July 2023 Leadership Council Update
Foundation
My first three months at the Rust Foundation
Project/Tooling Updates
IntelliJ Rust Changelog #199
Fyrox Game Engine 0.31
Writing a Rest HTTP Service with Axum
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
ResourceGauge: Enabling Resource-Aware Software Components (with Rust)
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 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
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
Full Report Here
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
The unreasonable power of combinator APIs
2023-07-27 | Virtual (Charlottesville, NC, US) | Charlottesville Rust Meetup
Crafting Interpreters in Rust Collaboratively
2023-07-28 | Virtual (Tunis, TN) | Rust Meetup Tunisia
Rust Meetup Tunisia - Volume I, Number IV
2023-07-31 | Virtual (Linz, AT) | Rust Linz
Rust Meetup Linz - 31st Edition
2023-08-01 | Virtual (Berlin, DE) | OpenTechSchool Berlin
Rust Hack and Learn
2023-08-01 | Virtual (Buffalo, NY, US) | Buffalo Rust Meetup
Buffalo Rust User Group, First Tuesdays
2023-08-02 | Virtual (Indianapolis, IN, US) | Indy Rust
Indy.rs - with Social Distancing
2023-08-02 | Virtual (Stuttgart, DE) | Rust Community Stuttgart
Rust-Meetup
2023-08-08 | Virtual (Dallas, TX, US) | Dallas Rust
Second Tuesday
2023-08-10 | Virtual (Nuremberg, DE) | Rust Nuremberg
Rust Nürnberg online
2023-08-15 | Virtual (Berlin, DE) | OpenTechSchool Berlin
Rust Hack and Learn
2023-08-15 | Virtual (Washington, DC, US) | Rust DC
Mid-month Rustful
2023-08-16 | Virtual (Vancouver, BC, CA) | Vancouver Rust
Rust Study/Hack/Hang-out
2023-08-22 | Virtual (Dublin, IE) | Rust Dublin
Rust, Serverless and AWS
Asia
2023-07-27 | Seoul, KR | Rust Programming Meetup Seoul
Seoul Rust Meetup
2023-07-27 | Seoul, KR | T-RUST meetup
🦀 7/27(목) T-RUST Meetup 🦀 (+ 현직자 네트워킹 세션)
Europe
2023-07-27 | Copenhagen, DK | Copenhagen Rust Community
Rust metup #38 at Deloitte!
2023-07-27 | Vienna, AT | Rust Vienna
Rust Dojo
2023-08-17 | Reading, UK | Reading Rust Workshop
Reading Rust Meetup at Browns
2023-08-22 | Helsinki, FI | Finland Rust Meetup
Helsink Rustaceans First Gathering
2023-08-24 | Aarhus, DK | Rust Aarhus
Rust Aarhus Hack and Learn at Trifork
North America
2023-07-27 | Mountain View, CA, US | Mountain View Rust Meetup
Rust Meetup at Hacker Dojo
2023-08-01 | Chicago, IL, US | Deep Dish Rust
Rust Happy Hour
2023-08-07 | Minneapolis, MN, US | Minneapolis Rust Meetup
Minneapolis Rust Meetup Happy Hour
2023-08-10 | Mountain View, CA, US | Mountain View Rust Meetup
Rust Meetup at Hacker Dojo
2023-08-10 | Lehi, UT, US | Utah Rust
Building a simplified JVM in Rust
2023-08-15 | San Francisco, CA, US | San Francisco Rust Study Group
Rust Hacking in Person
2023-08-15 | Seattle, WA, US | Seattle Rust User Group Meetup
Seattle Rust User Group - August Meetup
2023-08-17 | Nashville, TN, US | Seattle Rust User Group Meetup
Rust goes where it pleases. Rust on the web and embedded
2023-08-23 | Austin, TX, US | Rust ATX
Rust Lunch - Fareground
Oceania
2023-07-27 | Brisbane, QLD, AU | Rust Brisbane
July Meetup
2023-08-08 | Aukland, NZ | Rust AKL
A Peek into GPU Computing + Safer Code with Code Generation
2023-08-09 | Perth, WA, AU | Rust Perth
August Meetup
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
0 notes