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
Newsletters
Project/Tooling Updates
- Regex engine internals as a library
- Bevy 0.11
- rustc_codegen_gcc: Progress Report #24
- rust-analyzer changelog #189
- Vector storage is coming to Meilisearch to empower search through AI | Rust SDK
- Rust on Espressif chips - June 30 2023
- esp-rs quarterly planning: Q3 2023
- SQLPage • Build dynamic websites in SQL
Observations/Thoughts
- Deref specialization in const contexts
- How to think about
async
/await
in Rust - Back-end parallelism in the Rust compiler
- bridging fuzzing and property testing
- Mastering Rust: 2 Years of Building Brilliance and Lessons Learned
- Learning Rust - the first month
- Ideas for crafting CLI in Rust
- Beyond Pointers: How Rust outshines C++ with its Borrow Checker
- [audio] Shuttle with Ivan Cernja
Rust Walkthroughs
- [video] Build A Full Stack Chatbot in Rust (feat. Leptos & Rustformers)
- [video] Render the Julia set in 3 dozen lines of Rust code
- How We Generate JavaScript and Python SDKs From Our Canonical Rust SDK
- Put a Pin on That
- Unit-testing a web service in Rust
Miscellaneous
- Docker Desktop 4.21: Support for new Wasm runtimes, Docker Init support for Rust, Docker Scout Dashboard enhancements, Builds view (Beta), and more
- Rust Digger: identify low-hanging fruit improvements to crates
Crate of the Week
This week's crate is dysk, a nice df
like utility to display the fill level of your disks.
Thanks to Denys Séguret 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.
- RustQuant - autodiff module needs re-structure to avoid lifetimes.
- Ockam - Add
sqlite
support as an alternative tolmdb
2 - Ockam - Improve Secure Channel shutdown (make Encryptor and Decryptor shut down each other)
- Ockam - Improve Secure Channel shutdown (make Encryptor or Decryptor remove itself from the Registry) #5323
- Hyperswitch - Implement Code coverage for local system using Makefile
- Hyperswitch - Add scoped error enum for customer error
- Hyperswitch - Add logs for customer routes & functions
If you are a Rust project owner and are looking for contributors, please submit tasks here.
Updates from the Rust Project
378 pull requests were merged in the last week
- add basic types to SMIR
- add flag for enabling global cache usage for proof trees and printing proof trees on error
- add simple markdown formatting to
rustc --explain
output - avoid calling
item_name
for RPITIT - avoid calling
report_forbidden_specialization
for RPITITs - don't ICE in
resolve_bound_vars
when associated return-type bounds are in bad positions - don't ICE for
dyn* Trait: Trait
(built-in object) goals during selection in new trait solver - don't require associated types with Self: Sized bounds in
dyn Trait
objects - effects/keyword generics MVP
- fix the issue of wrong diagnosis for
extern pub fn
- implement
ConstEvaluatable
goals in new solver - llvm ffi: Expose
CallInst->setTailCallKind
- make RPITITs assume/require their parent method's predicates
- prefer object candidates in new selection
- replace RPITIT current impl with new strategy that lowers as a GAT
- require TAITs to be mentioned in the signatures of functions that register hidden types for them
- suggest importing for partial mod path matching in name resolving
- miri: check that assignments do not self-overlap
- miri: better error on missing
#[start]
- miri: restore test filtering by substring
- miri: test and fix return place alias restrictions
- perform
TokenStream
replacement in-place when possible inexpand_macro
- add
Read
,Write
andSeek
impls forArc<File>
where appropriate - additional
io::copy
specializations - regex: automata/nfa/backtrack: fix memory usage
- rewrite the regex crate
- cargo: add profile strip to config docs
- rustfmt: handle
skip_macro_invocations
from config file - clippy:
[significant_drop_tightening]
consider manual aliases of thedrop
function - clippy:
arc_with_non_send_sync
: reword and move tosuspicious
- clippy:
filter_next
: suggest making binding mutable if needed - clippy:
manual_range_patterns
: lint negative values - clippy:
unnecessary_literal_unwrap
: don't lint if binding initializer comes from expansion - clippy: add
needless_pass_by_ref_mut
lint - clippy: fix ICE in
needless_borrow
- clippy: fix regex lints for regex 1.9.0
- clippy: new lint
manual_partial_ord_and_ord_impl
- clippy: new lint:
read_line_without_trim
- clippy: new lints
manual_is_infinite
andmanual_is_finite
- clippy: pass correct substs to
implements_trait
inincorrect_impls
- rust-analyzer: assist: add
enum
toglob_import_expand
- rust-analyzer: assist: generate trait from impl
- rust-analyzer: disable remove unnecessary braces diagnotics for self imports
- rust-analyzer: feature: add a memory layout viewer
- rust-analyzer: fix
size_of_val
and supportmin_align_of_val
- rust-analyzer: fix missing terminator in pattern matching of consts
- rust-analyzer: fix: don't show
unresolved-field
diagnostic for missing names - rust-analyzer: fix: indent after pressing enter on a blank line
- rust-analyzer: implement recursion in mir interpreter without recursion
- rust-analyzer: recover from missing associated items and generic const defaults
- rust-analyzer: stop inserting semicolon when extracting match arm
- rust-analyzer: support GATs in bounds for associated types
- rust-analyzer: support
read_via_copy
intrinsic - rust-analyzer: support getrandom syscall
Rust Compiler Performance Triage
A very quiet week with nearly no changes in compiler performance.
Triage done by @rylev. Revision range: 52d8c49..1d4f5af
Summary:
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions ❌ (primary) |
1.1% | [0.7%, 1.7%] | 8 |
Regressions ❌ (secondary) |
2.1% | [0.4%, 3.7%] | 2 |
Improvements ✅ (primary) |
-0.9% | [-1.2%, -0.5%] | 26 |
Improvements ✅ (secondary) |
-1.2% | [-1.8%, -0.2%] | 16 |
All ❌✅ (primary) | -0.4% | [-1.2%, 1.7%] | 34 |
4 Regressions, 2 Improvements, 2 Mixed; 1 of them in rollups 51 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:
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] Implement RefUnwindSafe for Backtrace
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-07-12 - 2023-08-09 🦀
Virtual
- 2023-07-11 - 2023-07-13 | Virtual (Europe) | Mainmatter
- 2023-07-13 - 2023-07-14 | Virtual | Scientific Computing in Rust
- 2023-07-13 | Virtual (Charlottesville, NC, US) | Charlottesville Rust Meetup
- 2023-07-13 | Virtual (Edinburgh, UK) | Rust Edinburgh
- 2023-07-13 | Virtual (Nuremberg, DE) | Rust Nuremberg
- 2023-07-15 | Virtual (Chandigarh, IN) | Rust Chandigarh
- 2023-07-18 | Virtual (Berlin, DE) | OpenTechSchool Berlin
- 2023-07-19 | Virtual (Vancouver, BC, CA) | Vancouver Rust
- 2023-07-20 | Virtual (Tehran, IR) | Iran Rust Meetup
- 2023-07-24 | Virtual (Toronto, CA) | Programming Languages Virtual Meetup
- 2023-07-25 | Virtual (Dallas, TX, US) | Dallas Rust
- 2023-07-27 | Virtual (Charlottesville, NC, US) | Charlottesville Rust Meetup
- 2023-07-28 | Virtual (Tunis, TN) | Rust Meetup Tunisia
- 2023-08-01 | Virtual (Buffalo, NY, US) | Buffalo Rust Meetup
- 2023-08-08 | Virtual (Dallas, TX, US) | Dallas Rust
Asia
- 2023-07-13 | Tokyo, JP | Tokyo Rust Meetup
Europe
- 2023-07-13 | Berlin, DE | Rust Berlin
- 2023-07-13 | Reading, UK | Reading Rust Workshop
- 2023-07-21 | Nuremberg, DE | Rust Nuremberg
North America
- 2023-07-12 | Austin, TX, US | Rust ATX
- 2023-07-12 | Waterloo, ON, CA | Rust KW
- 2023-07-13 | Lehi, UT, US | Utah Rust
- 2023-07-13 | Mountain View, CA, US | Mountain View Rust Meetup
- 2023-07-13 | Seattle, WA, US | Seattle Rust User Group
- 2023-07-18 | San Francisco, CA, US | San Francisco Rust Study Group
Oceania
- 2023-07-18 | Canberra, ACT, AU | Rust Canberra
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
It's all ducks and sunshine until something starts barking.
Thanks to Patrice Peterson 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