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? Tweet us at @ThisWeekInRust 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
Official
RustConf 2021
- Project Update: Lang Team by Niko Matsakis
- Project Update: Libs Team by Mara Bos
- Move Constructors: Is it Possible? by Miguel Young de la Sota
- The Importance of Not Over-Optimizing in Rust by Lily Mara
- Identifying Pokemon Cards by Hugo Peixoto
- Fuzz Driven Development by Midas Lambrichts
- Writing the Fastest GDBT Library in Rust by Isabella Tromba
- Whoops! I Rewrote it in Rust by Brian Martin
- How I Used Rust to Become Extremely Offline by Luke Westby
- Supercharging Your Rust Code With Five Little-Known Attributes by Jackson Lewis
- Compile-Time Social Coordination by Zac Burns
- Hacking rustc: Contributing to the Compiler by Esteban Kuber
- This Week in Rust: 400 Issues and Counting! by This Week in Rust's very own Lead Editor Nell Shamrell-Harrington!
Project/Tooling Updates
- rust-analyzer Changelog #95
- Rome will be rewritten in Rust
- SixtyFPS (GUI crate) weekly report 19th of September
- Introducing SeaORM: An async & dynamic ORM for Rust
- wgpu alliance with Deno
- Experimenting Is Underway For Rust Code Within Mesa
- Goscript is now language feature complete
- An update on Memory Safety in Chrome
- This week in Databend #8
Observations/Thoughts
- New project: Wheel of Fortune solver! (and Rust is still faster than Python)
- Rustacean Principles
- Rustacean Principles, Continued
- Full Stack Rust
- Learnability of Rust
- The Rust Programming Language for Game Tooling
- Reality Check for Cloudflare Wasm Workers and Rust
- Rust on the MOS 6502: Beyond Fibonacci
- Rocket: A Web Framework for Rust
- Oxidizing Kraken: Improving Kraken Infrastructure Using Rust
- Tricky compatibility issue - recent changes to
std::io::ErrorKind
- [audio] Flutter/Rust Roundtable - Flying High with Flutter #24
- [audio] Rustacean Station: From Zero to Production with Luca Palmieri
- [audio] AreWePodcastYet 08 with Jon Ferdinand Ronge Gjenset
- [audio] Rustacean Station: Rust Code Coverage with Daniel McKenna
- [video] rust4ml @ Rust DC w/ Vlad Orlov
- [video] In-kernel, fast-path packet processing with AF_XDP @ Rust DC w/ Collins Huff
Rust Walkthroughs
- How to end-to-end encrypt all application layer communication
- Rust on ESP32
- How to compile Rust and LLVM for ESP32 on a Raspberry Pi
- Optimize Rust binaries size with cargo and Semver
- Combining Axum, Hyper, Tonic, and Tower for hybrid web/gRPC apps: Part 2
- Combining Axum, Hyper, Tonic, and Tower for hybrid web/gRPC apps: Part 3
- Combining Axum, Hyper, Tonic, and Tower for hybrid web/gRPC apps: Part 4
- First steps with an Arduino board and Rust
- Full-stack Rust: A complete tutorial with examples
- Designing state machines in Rust
- Optimizing a JavaScript library with WebAssembly, a failed attempt!
- [series] URL Shortener with Rust, Svelte, & AWS
- [CN] String in Rust
- [video] From Python to Rust - all episodes
- [video] 1 Problem, 16 Programming Languages (C++ vs Rust vs Haskell vs Python vs APL...)
- [video] Explaing Rust Analyzer 15: Error Resilient Parsing
- [video] Getting started with Rust 🦀 2021: 6. Library API design overhaul, async and more
- [video] [series] Rust for Java Developers
Miscellaneous
- Do Developers Read Compiler Error Messages?
- Alpine: System change proposal: Rust in main
- Rust Adds Support For The Motorola M68000 Processors
- Godbolt assembly exploring without crate limitations, in Visual Studio Code
- What libraries do you miss from other languages?
- Rust for Rustaceans is off to the printer!
- GCC codegen now under rust-lang organization
- Rust in Qemu, host support matrix
- Chrome - Borrowing Trouble: The Difficulty Of A C++ Borrow Checker
- [picture] My Rust project was featured in one of Europe's biggest computer magazines (heise c't)
- [video] Wrote a neat little maze solver. Largest solved so far is 125k x 125k. Here's a smaller 512x512
Crate of the Week
This week's crate is flowistry, a VS code extension to visualize data flow in Rust code.
Thanks to Willi Kappler for the suggestion!
Please submit your suggestions and votes for next week!
Call for Participation
Always wanted to contribute to open-source projects but didn't 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-network/ockam - Ockam TCP Transport using smoltcp
- ockam-network/ockam - File Transfer over end-to-end encrypted secure channels
If you are a Rust project owner and are looking for contributors, please submit tasks here.
Updates from Rust Core
256 pull requests were merged in the last week
- ARMv6K Nintendo 3DS Tier 3 target added
- add initial support for m68k
- disable the evaluation cache when in intercrate mode
- use a separate interner type for
UniqueTypeId
- accept
m!{ .. }.method()
andm!{ .. }?
statements - recover from
Foo(a: 1, b: 2)
- emit clearer diagnostics for parens around for loop heads
- make diagnostics clearer for
?
operators - improve error message for type mismatch in generator arguments
- improve error message for missing trait in trait impl
- add a separate error for
dyn Trait
inconst fn
- suggest replacing an inexisting field for an unmentioned field
- suggest better place to add call parentheses for method expressions wrapped in parentheses
- suggest removing bad parens in
(recv.method)()
- suggest removing
#![feature]
for library features that have been stabilized - don't lint about missing code examples in derived traits
- point at argument instead of call for their obligations
- reuse existing shared
Lrc
forMatchImpl
parent - fast reject for
NeedsNonConstDrop
- simplify lazy
DefPathHash
decoding by using an on-disk hash table - avoid codegen for
Result::into_ok
inlang_start
- use
<[T; N]>::map
inSharded
instead ofSmallVec
and unsafe code - introduce a fast path that avoids the
debug_tuple
abstraction when derivingDebug
for unit-like enum variants - make
UnsafeCell::get_mut
const const
drop
- don't inline
OnceCell
initialization closures - allow
panic!("{}", computed_str)
inconst fn
- fix potential race in
AtomicU64
time monotonizer - futures: fix Unusable
Sink
implementation onScan
- clippy: change
while_let_on_iterator
suggestion to useby_ref()
- clippy: improve accuracy of
mut_key
- clippy: new lint:
same_name_method
Rust Compiler Performance Triage
A nice week: more improvements than regressions.
Triage done by @pnkfelix. Revision range: 9f85cd6f2..7743c9f
2 Regressions, 4 Improvements, 8 Mixed; ??? of them in rollups
44 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 are currently in the final comment period.
Tracking Issues & PRs
- [disposition: merge] Stabilize RFC 2345: Allow panicking in constants
- [disposition: merge] Perform type inference in range pattern
- [disposition: close] Disable unused_must_use for statically known bools
- [disposition: merge] Decide whether asm! and/or global_asm! should be exported from the prelude.
- [disposition: merge] Make #[derive(A, B, ...)] cfg-eval its input only for A, B, ... and stabilize feature(macro_attributes_in_derive_output)
- [disposition: merge] Make
*const (), *mut ()
okay for FFI
New RFCs
- [Help wanted] First draft of patchfile RFC
- Multiple artifact deps on the same crate with different names, for different targets
Upcoming Events
Online
- September 28, 2021, Dallas, TX, US - Last Tuesday - Dallas Rust
- October 2, 2021 - Rust Graphics meetup
- October 5, 2021, Buffalo, NY, US - Buffalo Rust User Group, First Tuesdays - Buffalo Rust Meetup
North America
Europe
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.
Rust Jobs
Kollider
Subspace Labs
Oxford Ionics
ChainSafe
Tweet us at @ThisWeekInRust to get your job offers listed here!
Quote of the Week
the strains of the project have hurt a lot of people over the years and I think maybe the only path to recovery involves getting some distance from it.
Thanks to mmmmib for the suggestion!
Please submit quotes and vote for next week!
This Week in Rust is edited by: nellshamrell, llogiq, and cdmistman.