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. If you find any errors in this week's issue, please submit a PR.
Updates from Rust Community
Newsletters
Project/Tooling Updates
- Fornjot (code-first CAD in Rust) - Weekly Release - Really Shouldn't Be That Hard
- New release – gtk-rs
- rust-analyzer changelog #168
- IntelliJ Rust Changelog #188
- Meilisearch releases v1.0, the first completely stable version of its open-source search engine
- Zenoh-Flow a Rust-based data-flow programming framework build on Zenoh
- Nutype - the newtype with guarantees
- pavex, a new Rust web framework - Progress report #1
Observations/Thoughts
- How Rust went from a side project to the world’s most-loved programming language
- The bottom emoji breaks rust-analyzer
- Rust to WebAssembly the hard way
- From Erlang to Lunatic
- STM32F4 Embedded Rust at the PAC: GPIO Control
- A Case for Rust in Deep Learning
- TrustZone, trials and tribulations
- [video] Rust Releases! 1.67.0 & 1.67.1
- Everything you didn't need to know about
#[track_caller]
Rust Walkthroughs
- [video] Build and deploy a Wasm smart contract with Rust-based language
- [video] Write better parsers with nom_supreme
Miscellaneous
- [video] From cargo to crates.io and back again
- [video] Functional correctness with refinement types for Rust
- [audio] Rust ABI with Aurimas Blažulionis
- [audio] What's New in Rust 1.65, 1.66, and 1.67
- [audio] Open Source Security Podcast: A lesson in Rust from Carol Nichols
Crate of the Week
This week's crate is bkmr, a fast CLI bookmark manager and launcher.
Thanks to sysid 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.
- warp - [Windows] locale and installer
- man-in-the-middle-proxy - custom certificate
- man-in-the-middle-proxy - Filter request by method
- man-in-the-middle-proxy - Request duplication
- man-in-the-middle-proxy - Delete single request
- man-in-the-middle-proxy - modify request with custom fields and headers
If you are a Rust project owner and are looking for contributors, please submit tasks here.
Updates from the Rust Project
387 pull requests were merged in the last week
- add
-Z instrument-xray
flag - add missing normalization for union fields types
- add only modified subcommand for compiletest
- add parentheses properly for borrowing suggestion
- allow multiple candidates with same response in new solver
- allow wasi-libc to initialize its environment variables lazily
- avoid exposing type parameters and implementation details sourced from macro expansions
- disqualify
auto trait
built-in impl in new solver if explicitimpl
exists - do not bring trait alias supertraits into scope
- do not eagerly recover for bad
impl Trait
types in macros - enable new rlib in non stable cases
- fix implied outlives bounds logic for projections
- fix suggestions rendering when the diff span is multiline
- implement
deferred_projection_equality
for erica solver - introduce
-Zterminal-urls
to use OSC8 for error codes - make &mut !Unpin not dereferenceable, and
Box<!Unpin>
not noalias - make
derive_const
derive properly const-if-const impls - mark
'atomic_mut_ptr'
methods const - mir-Opt for copying enums with large discrepancies
- optimize
TyKind::eq
- optimize
query_cache_hit
to reduce code size of the query hot path - reduce interning
- simplify layout calculations in rawvec
- suggest function call on pattern type mismatch
- support
true
andfalse
as boolean flag params - turn projections into copies in
CopyProp
- unused-lifetimes: don't warn about lifetimes originating from expanded code
- implement
AsFd
andAsRawFd
forRc
- implement cursors for BTreeMap
- improve the
array::map
codegen - reverse Timsort scan direction
- speedup heapsort by 1.5x by making it branchless
- stabilize feature
cstr_from_bytes_until_nul
- stop at the first
NULL
argument when iteratingargv
- cargo:
-Zrustdoc-scrape-example
must fail with bad build script - cargo: add '-C' flag for changing current dir before build
- cargo: re-export
cargo_new::NewProjectKind
as public - clippy: make
arithmetic_side_effects
mind constant items - clippy:
cast_possible_truncation
: issue proper help message - clippy:
suspicious_to_owned
: usespan_suggestions
to suggest both intents - clippy: add
suspicious_command_arg_space
lint - clippy:
almost_swapped
: detect almost-swaps usinglet
statements - clippy: negate suggestions when needed in
bool_assert_comparison
- rust-analyzer: add braces assist
- rust-analyzer: add postfix completion for
unsafe
- rust-analyzer: add setting for limiting number of completions
- rust-analyzer: build
i686-pc-windows-msvc
binaries - rust-analyzer: don't include
r#
prefix in filesystem changes - rust-analyzer: don't insert a semicolon when typing = if parse errors are encountered
- rust-analyzer: fix bind pat inlay hints rendering for constant patterns
- rust-analyzer: fix completions after functions with no bodies
- rust-analyzer: fix parsing of nested tuple field accesses in a cursed way
- rust-analyzer: fix proc-macro-server incorrectly stripping delimiters
- rust-analyzer: insert spaces when inlining macros
- rust-analyzer: properly use location links for type hints of impl Future and its assoc type
- rust-analyzer: suppress extra indent after the end of field and function chains
- rust-analyzer: support
DidChangeWorkspaceFolders
notifications
Rust Compiler Performance Triage
Overall a good week for performance with 77 real world crates benchmarks showing an average of nearly 1% performance improvement. Unfortunately, the largest regressions are not yet fully understood and require additional investigation. Of particular interest were some large improvements in doc builds due to storing additional metadata. However, this change might cause some crates to compile slightly slower in incremental check builds, but this is still being investigated.
Triage done by @rylev. Revision range: e4dd9edb..9bb6e60
Summary:
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions ❌ (primary) |
1.4% | [0.4%, 11.0%] | 13 |
Regressions ❌ (secondary) |
0.8% | [0.2%, 1.6%] | 4 |
Improvements ✅ (primary) |
-1.4% | [-7.9%, -0.3%] | 64 |
Improvements ✅ (secondary) |
-2.1% | [-5.6%, -0.3%] | 73 |
All ❌✅ (primary) | -0.9% | [-7.9%, 11.0%] | 77 |
3 Regressions, 4 Improvements, 9 Mixed; 4 of them in rollups 46 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] Drop support for FreeBSD 10 and 11 from std
- [disposition: merge] Stabilize cmpxchg16b_target_feature
New and Updated RFCs
- No New or Updated RFCs were created this week.
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-02-15 - 2023-03-15 🦀
Virtual
- 2023-02-15 | Virtual | MongoDB
- 2023-02-15 | Virtual (Redmond, WA, US; New York, NY, US; San Francisco, CA, US; São Paulo, BR) | Microsoft Reactor Redmond and Microsoft Rector New York and Microsoft Reactor San Francisco and Microsoft Reactor São Paulo
- 2023-02-15 | Virtual (Vancouver, BC, CA) | Vancouver Rust
- 2023-02-16 | Virtual (Stuttgart, DE) | Rust Community Stuttgart
- 2023-02-21 | Virtual (Washington, DC, US) | Rust DC
- 2023-02-23 | Virtual (Charlottesville, VA, US) | Charlottesville Rust Meetup
- 2023-02-23 | Virtual (Kassel, DE) | Java User Group Hessen
- 2023-02-23 | Virtual (México City, MX) | Rust MX
- 2023-02-24 | Virtual (Tunis, TN) | Rust Meetup Tunisia
- 2023-02-28 | Virtual (Berlin, DE) | Open Tech School Berlin
- 2023-02-28 | Virtual (Cardiff, UK) | Rust and C++ Cardiff
- 2023-02-28 | Virtual (Dallas, TX, US) | Dallas Rust
- 2023-02-28 | Virtual (Munich, DE) | Rust Munich
- 2023-03-01 | Virtual (Indianapolis, IN, US) | Indy Rust
- 2023-03-02 | Virtual (Linz, AT) | Rust Linz
- 2023-03-07 | Virtual (Buffalo, NY, US) | Buffalo Rust Meetup
- 2023-03-08 | Virtual (Boulder, CO, US) | Boulder Elixir and Rust
- 2023-03-11 | Virtual | Rust GameDev
- 2023-03-14 | Virtual (Berlin, DE) | Berlin.rs
- 2023-03-15 | Virtual (Cardiff, UK) | Rust and C++ Cardiff
Asia
- 2023-02-20 | Tel Aviv, IL | Rust TLV
- 2023-03-04 | Kyoto, JP | Kansai Rust
Europe
- 2023-02-15 | London, UK | Rust London User Group
- 2023-02-15 | Trondheim, NO | Rust Trondheim
- 2023-02-16, 2023-02-17 | London, UK | Rust Nation UK
- 2023-02-18 | London, UK | Rust London User Group
- 2023-02-21 | Paris, FR | Rust Paris
- 2023-02-21 | Zurich, CH | Rust Zurich
- 2023-02-23 | Bordeaux, FR | DedoTalk
- 2023-02-23 | Copenhagen, DK | Copenhagen Rust Community
- 2023-02-23 | Vienna, AT | Rust Vienna
- 2023-02-28 | Munich, DE + Virtual | Rust Munich
- 2023-02-28 | Nijmegen, NL | Rust Nederland
- 2023-03-09 | Basel, CH | Rust Basel
- 2023-03-09 | Delft, NL | Rust Nederland
- 2023-03-15 | Nürnberg, DE | Rust Nuremberg
North America
- 2023-02-21 | San Francisco, CA, US | San Francisco Rust Study Group
- 2023-02-23 | Mountain View, CA, US | Mountain View Rust Study Group
- 2023-03-01 | Austin, TX, US | Rust ATX
- 2023-03-09 | Lehi, UT, US | Utah Rust
Oceania
- 2023-02-23 | Brisbane, QLD, AU | Rust Brisbane
- 2023-02-28 | Canberra, ACT, AU | Canberra Rust User Group
- 2023-03-01 | Sydney, NSW, AU | Rust Sydney
South America
- 2023-02-22 | Montevideo, UY | Rust Meetup Uruguay
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
All the pro C/C++ arguments seem to come down to "Good drivers don’t need seat belts because they don’t get in accidents"
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