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
Foundation
Project/Tooling Updates
- Black Hat Rust October Update (now in Beta 🍾)
- SixtyFPS (GUI crate) weekly report for 24th of October 2021
- Releasing Gloo v0.4.0: Gloo is a modular toolkit for building fast, reliable Web applications and libraries with Rust and Wasm
- This week in Fluvio #10: the programmable streaming platform
- This week in Databend #13: an elastic and reliable cloud warehouse
- Rust Analyzer Changelog #100
- IntelliJ Rust Changelog #158
Observations/Thoughts
- Async on Embedded: Present & Future
- No Time for Chrono
- Pointer Fu: An adventure in the Tokio code base
- How actix-web's application state and Data extractor works internally
- Building an Emacs lisp VM in Rust
- Test-Driving the Rust Model Checker (RMC)
- Sayonara, C++, and hello to Rust!
- Writing a Linux-compatible kernel in Rust
- Sustainable growth and visibility
- [audio] What's New in Rust 1.54 and 1.55
- [audio] Rust Web Development with Bastian Gruber
Rust Walkthroughs
- 🦀 How We Built a Cross-Platform Library with Rust
- Custom Logging in Rust using tracing and tracing-subscriber, part 2
- Builder with typestate in Rust
- Starting with Solana, Part 2
- Implementing the Health Check API Pattern with Rust
- Iced.rs tutorial: How to build a simple Rust frontend web app
- Writing a QML Application in Rust (Part 1)
- Use Rust for embedded development
- Supercharge Your NodeJS With Rust
- Implementing the Health Check API Pattern with Rust
- My ideal Rust workflow
- Getting Started with Rust on a Raspberry Pi Pico
- [series] Build Your Text Editor With Rust! Final Part
- [video] Writing a Programming Language (in Rust) 2: Branching, Literals and Addition
- [video] How to Build a Web Application using Rust — Part III
- [video] FLTK Rust: intro into the fltk-evented crate
- [video] Rust Programming - Macros Quick Dev Tips
- [video] Rewriting a C++ project in Rust to learn the language
- [video] rg3d - live coding session #1
- [video] Understand Rust's Borrow Checker in 5 Minutes
Miscellaneous
- Rustc Code Reading Club
- Writing a Programming Language (in Rust): Weekly Stream, Saturdays at 15:00~17:00 GMT+1
- A cool Rust optimization story
- Concordium’s DevX Initiative Launches Rust Maintainers Sponsorship Program
- How Linkerd retries HTTP requests with bodies
- Build a Scalable Trading Bot With Rust Over the Weekend — Part 2
Crate of the Week
This week's crate is cargo-crev, a tool to distribute security review of the crates we all depend on.
As there was no suggestion this week, llogiq is pretty thankful to himself for choosing this crate.
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.
If you are a Rust project owner and are looking for contributors, please submit tasks here.
- wahn/rs_pbrt - [parse_blend_file] Attic Close-up
- kdr-aus/ogma - Implement filter on Str input type
- kdr-aus/ogma - Implement
From<char for Str
- ockam-network/ockam - Compile to WebAssembly
- ockam-network/ockam - Ockam TCP Transport using smoltcp
Updates from the Rust Project
353 pull requests were merged in the last week
- implement
split_array
andsplit_array_mut
- normalize MIR with
RevealAll
before optimizations. - automatic exponential formatting of
f
{32
,64
} inDebug
- reject octal zeros in
IPv4
addresses - add support for artifact size profiling
- remove unnecessary condition in
Barrier::wait()
- make all proc-macro back-compat lints deny-by-default
- stabilise
unix_process_wait_more
, extraExitStatusExt
methods - stabilize feature
saturating_div
for rust 1.58.0 - remove unnecessary bound on
Zip
specialization impl - deduplicate
panic_fmt
- give better error for
macro_rules name
- stabilize
CString::from_vec_with_nul
(_unchecked
) - point at overlapping impls when type annotations are needed
- add rustc lint, warning when iterating over hashmaps
- consider types appearing in const expressions to be invariant
- use the "nice E0277 errors" for
!Send
impl Future
from foreign crate - don't mark
for
loop iter expression as desugared - change
Duration::
(try_
)from_secs_
{f32
,f64
} underflow error - suggest a case insensitive match name regardless of Levenshtein distance
- make
From
impls ofNonZero
integer const - make more
From
implsconst
(libcore) - mark {
array
,slice
}::
{from_ref
,from_mut
} asconst fn
- avoid overflow in
VecDeque::with_capacity_in()
- fix MIRI UB in
Vec::swap_remove
- implement coherence checks for negative trait impls
- make
RSplit<T, P>: Clone
not requireT: Clone
- codegen-gcc: disable strict aliasing
- clippy: warn on structs with a trailing zero-sized array but no
repr
attribute - clippy: cover
Result
forquestion_mark
- clippy: make
useless_format
recognizeformat!("")
- clippy: avoid
eq_op
in test code - clippy: fix FP in
missing_safety_doc
lint - clippy: fix FP: no lint when cast is coming from
signum
method call forcast_possible_truncation
lint - clippy:
missing_safety_doc
: handle 'implementation safety' headers as well - clippy: fix
match_str_case_mismatch
on uncased chars
Rust Compiler Performance Triage
Multiple regressions this week, several of which were in rollups, without much to balance them out on the improvements front.
Triage done by @simulacrum. Revision range: d45ed7..3c8f001d
5 Regressions, 4 Improvements, 3 Mixed; 3 of them in rollups; 35 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
- [disposition: merge] Thread local Cell methods.
- [disposition: merge] Constrained Naked Functions
Tracking Issues & PRs
- [disposition: merge] Update
std::env::temp_dir
to use GetTempPath2 on Windows when available. - [disposition: merge] Stabilize
const_raw_ptr_deref
for*const T
- [disposition: merge] Clarification of default socket flags
- [disposition: merge] use CLOCK_BOOTTIME in
Instant::now
- [disposition: merge] Implement
Termination
forResult<Infallible, E>
- [disposition: close] Port clippy lint
redundant_field_names
to compiler - [disposition: merge] GATs: Decide whether to have defaults for
where Self: 'a
- [disposition: merge] Stabilize
File::options()
- [disposition: merge] Tracking Issue for relaxed struct unsizing rules
- [disposition: merge] Tracking Issue for
option_result_unwrap_unchecked
- [disposition: merge] Tracking Issue for
destructuring_assignment
- [disposition: close] Tracking issue for
slice_concat_ext
stabilization
New RFCs
Upcoming Events
Online
- October 27, 2021, London, UK - Rust London Ockam Takeover - Rust London User Group
- October 27, 2021, Phoenix, AZ - Desert Rust Halloween - Desert Rust
- October 28, 2021, Copenhagen, DK - Hack Night #22 - Copenhagen Rust Group
- November 2, 2021, Buffalo, NY, US - First Tuesdays - Buffalo Rust Meetup
- November 9, 2021, Seattle, WA, US - Monthly Meetup - Seattle Rust Meetup
- November 10, 2021, Malaysia - Rust Meetup - Rust Malaysia
North America
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
Snapview
Quickwit
Seaplane
Little Bear Labs
Kraken
Subspace Labs
Tweet us at @ThisWeekInRust to get your job offers listed here!
Quote of the Week
I think in general "force the user to think about the extra cases, and be explicit about ignoring them" is definitely idiomatic rust.
– Daniel Wagner Hall on rust-internals
Thanks to robin for the suggestion!
Please submit quotes and vote for next week!
This Week in Rust is edited by: nellshamrell, llogiq, and cdmistman.