Hello and welcome to another issue of This Week in Rust! Rust is a systems language pursuing the trifecta: safety, concurrency, and speed. 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
Project/Tooling Updates
- Linux Rust Support Patches
- Intellij Rust Changelog #150
- Rust Analyzer Changelog #84
- GCC Rust Monthly Report #7 June 2021
- The future of Buck
- ChainSafe's Rust implementation of Mina spec Community Spotlight (video)
- MoonZoon Dev News (5): Chat example, MoonZoon Cloud
- Fluvio: The Programmable Data Platform
- butido - a Linux Package Building Tool in Rust
- Knurling-rs changelog #28
fcp
0.2.0 released - A significantly faster alternative tocp
- Announcing Sycamore v0.5.0 - SSR + Routing
- This Week In TensorBase 10
Observations/Thoughts
- Walking through "The Java Tutorials" with Rust - 'What Is an Interface?' and specialization
- Rust and Tinyverse
- Speeding Up the Webcola Graph Viz Library with Rust + WebAssembly
- Rust closures: How a closure can implement more than one trait
Rust Walkthroughs
- Rust on the front-end
- Deploy a Rust Web App With Rocket
- A TCP Proxy in 30 lines of Rust
- Manage WebAssembly Apps in WasmEdge Using Docker Tools
- Rust Concept Clarification: Deref vs AsRef vs Borrow vs Cow
- Thread safety and Learning in Rust
- REST API Wrapper with Rust
- [video] Building a Web Application with Rust - Part VII - Auth Middleware
- [video] Building a Web Application with Rust - Part VIII - Containerization
- [video] Rust & Bevy Tutorial - Building a Game From Scratch (Part 1)
- [video] Creating a Chat Server with async Rust and Tokio
- [video] 1Password Developer Fireside Chat: Dive into Async & Futures in Rust
Miscellaneous
Crate of the Week
This week's crate is css-inline, a crate to inline CSS into style
tags.
Thanks to Dmitry Dygalo for the suggestion.
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.
Synth
- Feature: Scheduler / Topological sorting namespaces
- Use parameterized Statements for Postgres export
- Feature: Doc template generator
- XML export / import
- Feature: CSV import/export
Sycamore
If you are a Rust project owner and are looking for contributors, please submit tasks here.
Updates from Rust Core
297 pull requests were merged in the last week
- make
ForceWarn
a lint level - change vtable memory representation to use
tcx
allocated allocations - support allocation failures when interpreting MIR
- avoid byte to char position conversions in
is_multiline
- fix pretty print for
loop
- pretty-print macro matchers instead of using source code
- fix ICE when main is declared in an extern block
- ignore inference variables in certain queries
- check the number of generic lifetime and const parameters of intrinsics
- check node kind to avoid ICE in
check_expr_return()
- deny using default function in impl const Trait
- fix garbled suggestion for missing lifetime specifier
- fix misleading "impl Trait" error
- alloc:
no_global_oom_handling
: disablenew()
s,pin()
s, etc. - add linked list cursor end methods
- stabilize
str::from_utf8_unchecked
as const - stabilize
string_drain_as_str
- stabilize
Bound::cloned()
- stabilize
Seek::rewind()
- when using
process::Command
on Windows, environment variable names must be case-preserving but case-insensitive - add
track_path::path
fn for usage inproc_macro
s - libm: optimize
round
androundf
- cargo: adjust error message with
offline
andfrozen
- clippy: stabilize
cargo clippy --fix
- clippy: downgrade
nonstandard_macro_braces
to nursery - clippy: don't suggest
doc(hidden)
or unstable variants in wildcard lint - clippy: fix emitting in nested (
proc_
)macro
s fornonstandard_macro_braces
lint - clippy: fix
doc_markdown
false positive - clippy: new lint:
rc_mutex
- clippy: new lint:
strlen_on_c_strings
- clippy: new lint:
disallowed_script_idents
Rust Compiler Performance Triage
A fairly mixed week with improvements and regressions mostly balancing themselves out. The highlight of this week is we have now started to adopt a new performance triage process which will label PRs that introduce performance regressions with the perf-regression
label. Authors and/or reviewers are expected to justify their performance regression either by a short summary of why the change is worth it despite the regression or by creating an issue to follow-up on the regression.
We hope this process will lead to better compiler performance in the long term.
Triage done by @rylev. Revision range: 5a78340..9a27044
2 Regressions, 3 Improvements, 2 Mixed 1 of them in rollups
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] RFC: let-else statements
- [disposition: merge] RFC: I/O Safety
- [disposition: merge]
#[derive(Default)]
on enums with a#[default]
attribute
Tracking Issues & PRs
- [disposition: merge] Stabilize const_fn_transmute, const_fn_union
- [disposition: merge] Stabilize bindings_after_at
- [disposition: close] Add expr202x macro pattern
- [disposition: merge] Stabilize
impl From<[(K, V); N]>
for HashMap (and friends) - [disposition: merge] Stabilize "RangeFrom" patterns in 1.55
- [disposition: merge] Remove P: Unpin bound on impl Future for Pin
- [disposition: merge] Tracking Issue for IntoInnerError::into_parts etc. (io_into_inner_error_parts)
- [disposition: merge] Tracking Issue for array_map
- [disposition: merge] Tracking issue for #![feature(maybe_uninit_extra)]
New RFCs
No new RFCs were proposed this week.
Upcoming Events
Online
- July 7, 2021, Denver, CO, US - End-to-end Encrypted Messaging in Rust, with Ockam by Mrinal Wadhwa - Rust Denver
- July 8, 2021, Berlin, DE - Rust Hack and Learn - Berline.rs
- July 13, 2021, Seattle, WA, US - Monthly meetup - Seattle Rust Meetup
- July 14, 2021, Malaysia - Rust Meetup July 2021 - Golang Malaysia, feat Rustlang, Erlang, Haskelllang and
.*-?(lang|script)\
- July 14, 2021, Dublin, IE - Rust Dublin July Remote Meetup - Rust Dublin
- July 21, 2021, Vancouver, BC, CA - Rust Adoption at Huawei - Vancouver Rust
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
StructionSite
ChainSafe Systems
InfinyOn
Merantix
NORICS GmbH
NZXT
Parity Technologies
Esturary
Kraken
Subspace Network
Tweet us at @ThisWeekInRust to get your job offers listed here!
Quote of the Week
One thing I like about Rust is that it filters out lazy/sloppy thinkers. Even when I disagree with another Rust programmer, there is a certain level of respect that comes from knowing that they thought about the problem deeply enough to pass the borrow checker.
Thanks to Jonah for the self-suggestion!
Please submit quotes and vote for next week!
This Week in Rust is edited by: nellshamrell, llogiq, and cdmistman.