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
No official blog posts or newsletters this week.
Project/Tooling Updates
- Rust Analyzer Changelog #56
- Knurling-rs Changelog #11
- Bevy 0.4
- Announcing Tokio 1.0
- hyper 0.14
- RustFFT 5.0.0.experimental-1: Now faster than FFTW!
- Allsorts Font Shaping Engine Year in Review
Observations/Thoughts
- Looking back on 2020
- I rewrote a Clojure tool in Rust
- 🦀 Rust Reviewed: Is the hype justified? 🦀
- Three things I wish I'd known learning Rust
- Rust in a KDE Project
- First 3 Months of Rust
- How rust changed and saved my life
- Problems with building backend app in Rust in 2020
- Reaching the (current) limits of Rust's type system with asynchronous programming
- [audio] Rust GameDev Podcast - Interview with Fedor Logachev
Rust Walkthroughs
- Build your own async primitive
- Make A Language - Part Sixteen: Refactoring
- Make A Language - Part Seventeen: Crates
- Make A Language - Part Eighteen: Errors
- A Simple Neural Network (<200LoC, Rust)
- Rocket Tutorial 05: Enforcing uniqueness of emails
- How to write a Terminal Multiplexer with Rust, Async, and Actors - Part 2
- Learning Rust: static trait bounds
- Async: What is blocking?
- [video] Generic Associated Types - Learn Rust
- [video] [series] Rust Tutorial
Miscellaneous
- A Potential Rust Learning Project Group
- Watch all of RustFest Global
- When to use Rust?
- Hyper support is merged to curl master
- Just wanted to say thanks to the Rust community!
Crate of the Week
This week's crate is RustFFT, a Fast Fourier transformation library that lives up to the name.
Thanks to Willi Kappler 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.
If you are a Rust project owner and are looking for contributors, please submit tasks here.
Updates from Rust Core
292 pull requests were merged in the last week
- skip
dsymutil
by default for compiler bootstrap - implement if-let match guards
- or_patterns: implement
:pat
edition-specific behavior - improve and fix diagnostics of exhaustiveness checking
- gracefully handle mistyping
->
as=>
in function return type - handle desugaring in impl trait bound suggestion
- enhance error message when misspelled label to value in break expression
- always run intrinsics lowering pass
- mir-opt: allow debuginfo to be generated for a constant or a Place
- turn quadratic time on number of impl blocks into linear time
MaybeUninit::copy
/clone_from_slice
- stabilize
unsafe_cell_get_mut
- move {
f32
,f64
}::clamp
tocore
- stabilize all stable methods of
Ipv4Addr
,Ipv6Addr
andIpAddr
as const - stabilize
or_insert_with_key
- add fast futex-based thread parker for Windows
- optimization for
bool
'sPartialOrd
impl - fix overflow when converting ZST
Vec
toVecDeque
- use pointer type in
AtomicPtr::swap
implementation - stdarch: move code out of constify macros
- stabilize cargo's new feature resolver
Rust Compiler Performance Triage
- 2020-12-15: 6 Regressions, 1 Improvements, 2 Mixed
This week was fairly quite with lots of small regressions. Most of the regressions were either for fixes to changes that yielded large performance wins in previous weeks or small performance losses where there is already a plan for how to gain those losses back.
Triage done by @rylev.
See the full report for more.
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
- [disposition: merge] Infallible promotion
- [disposition: postpone] Opt-in Stable Trait VTables
- [disposition: merge] RFC: Serve crates-io registry over HTTP as static files
Tracking Issues & PRs
- [disposition:merge] Stabilize Arc::{increment,decrement}_strong_count
- [disposition:merge] stabilize
#![feature(min_const_generics)]
- [disposition:merge] Add
impl Div<NonZeroU{0}> for u{0}
which cannot panic
New RFCs
Upcoming Events
Online
- December 29, Dallas, TX, US - Last Tuesday - Dallas Rust
- January 5, Buffalo, NY, US - Buffalo Rust User Group
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
Tweet us at @ThisWeekInRust to get your job offers listed here!
- Distributed Systems (Rust) Developer at Signal (Remote)
- Architect - Rust Library Design at Ockam (Remote)
- Senior Software Engineer (Rust & C++) at NZXT (Remote)
- Lead Backend Engineer - Rust or C/C++ at Signavio (Berlin, DE)
Quote of the Week
It took me sometime to let go and embrace getting things working before optimizing. It was a major breakthrough on that journey when I realized that ALL my python variables are
Rc<RefCell<_>>
, so any chance I had to make a variable that was less complicated than that was already a big optimization. If 1/10 Rust variables had to be that complicated it would not feel good, but it would already be 90% better. So if 1/50 make the code ezere to read and maintain then do it!
Thanks to Stephan Sokolow for the suggestion.
Please submit quotes and vote for next week!
This Week in Rust is edited by: nellshamrell, llogiq, and cdmistman.