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
Project/Tooling Updates
- rust-analyzer Changelog #91
- Apache Arrow Datafusion 5.0.0 release with major new features and performance improvements
- Apache Arrow Ballista 0.5.0 release
- This week in Fluvio #3: the programmable streaming platform
- SixtyFPS 0.1 Release and SixtyFPS Weekly Report
- nailgun: a DNS performance testing client
- nom 7.0 release: fast parser combinators, now without macros! And the new nom-bufreader
- Announcing egui 0.14
- miette: a fancy new diagnostics definition and reporting crate for apps and libraries!
- Rudra: Rust Memory Safety & Undefined Behavior Detection
- SnakeOS v0.1.0 released!
- Pueue v1.0.0 - Manage your shell commands. Reaching stable after 3.5 years
- Announcing Persy 1.0: a simple transactional storage
- This week in Datafuse #4
Observations/Thoughts
- Overview of the Rust cryptography ecosystem
- Using KLEE on Rust-for-Linux (part 1)
- Large Rust Workspaces
- Using Rust with Elixir for code reuse and performance
- Models of Generics and Metaprogramming: Go, Rust, Swift, D and More
- Shaking Off the Rust 2: Ray Tracing in WebAssembly
- Async Overloading
- Scoped Arena Allocator
Rust Walkthroughs
- Rust vectors
- Daily Rust: Iterators
- Getting Started with Systems Programming with Rust (Part 1)
- Getting Started with Systems Programming with Rust (Part 2)
- Optimizing Immutable Strings in Rust
- Rust for Data Science: Tutorial 1
- Rust and WebAssembly Serverless functions in Vercel
- Pin, Unpin, and why Rust needs them
- Rust: How to Unwrap Multiple Required Options
- Hexagonal architecture in Rust #1
- Hexagonal architecture in Rust #2
- Cross compiling Windows binaries from Linux
- Rust Trait Objects Demystified
- End-to-End Encryption through Kafka, with Rust
- [ZH] Formal Concept Analysis with Rust, Part1, Part2, Part3
- [video] Building a small Finite State Machine in Rust
- [video] Rust Community Stuttgart - "Traits and trait objects - more than just interfaces"
Miscellaneous
- An exhaustive list of all Rust resources regarding automated or semi-automated formalization efforts in any area, constructive mathematics, formal algorithms, and program verification.
- Aggregate streaming data in real-time with WebAssembly
- I re-implemented the legendary "Typing the technical interview" article using only Rust types!
- Chromium adds a Rust toolchain as a potential dependency
- New very promising Linux syscall for creating secret memory even the kernel can't read. I'll be working for creating a crate for using it out
- [picture] Field Init Shorthand in Rust
Crate of the Week
This week's crate is kube-leader-election, a crate to implement leader election for Kubernetes workloads.
Thanks to hendrikmaus 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 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.
- rust-lang/cargo - "error: binary xxx already exists in destination" should print the full destination path
- ockam-network/ockam - Like ngrok, but using Ockam
- ockam-network/ockam - Forwarder in Rust
- andreev-io/little-raft - New Contributors Wanted
If you are a Rust project owner and are looking for contributors, please submit tasks here.
Updates from Rust Core
293 pull requests were merged in the last week
- upgrade to LLVM 13
- introduce
hir::ExprKind::Let
- Take 2 - enable compiler consumers to obtain
mir::Body
with Polonius facts - force warn improvements
- account for tabs when highlighting multiline code suggestions
- use more accurate spans when proposing adding lifetime to item
- add notes to macro-not-found diagnostics to point out how things with the same name were not a match
- improve wording of the
drop_bounds
lint - improve NLL's "higher-ranked subtype error"s
- suggest importing the right kind of macro
- improve error reporting for closure return type mismatches
- canonicalize consts before calling
try_unify_abstract_consts
query - reenable
RemoveZsts
- I/O safety (RFC #3128)
- stabilize
arbitrary_enum_discriminant
- constified implementations of
Default
- optimize unnecessary check in
VecDeque::retain
- where available use
AtomicU
{64
,128
} instead of mutex forInstant
backsliding protection - add fast path for
Path::cmp
that skips over long shared prefixes - cargo: fix panic with build-std of a proc-macro
- clippy: add new lints
negative_feature_names
andredundant_feature_names
- clippy: move
branches_sharing_code
to nursery - clippy: remove stderr limit
Rust Compiler Performance Triage
A few regressions but largely an improvement this week, mostly due to the upgrade to LLVM 13.
Triage done by @simulacrum. Revision range: aa8f27b..33fdb79
2 Regressions, 1 Improvements, 2 Mixed; 0 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
Tracking Issues & PRs
- [disposition: merge] Stabilize std::os::unix::fs::chroot
- [disposition: merge] Stabilize reserved prefixes
- [disposition: merge] stabilize disjoint capture in closures (RFC 2229)
- [disposition: merge] BTree: remove Ord bound from new
- [disposition: merge] Update Windows Argument Parsing
- [disposition: merge] Support #[track_caller] on closures and generators
- [disposition: merge] Stabilize "force warn" option
- [disposition: merge] Extend -Cdebuginfo with new options and named aliases
- [disposition: merge] Allow writing of incomplete UTF-8 sequences to the Windows console via stdout/stderr
- [disposition: merge] Tracking Issue for Iterator::intersperse
- [disposition: merge] Provide an API to extract fields from Command builder
New RFCs
Upcoming Events
Online
- August 31, 2021, Dallas, TX, US - Last Tuesday - Dallas Rust
- September 2, 2021, Zurich, CH - Exciting new Rustdoc features landing in 1.55.0 - Hybrid Meetup (Livestream!) - Rust Zurich
- September 2, 2021, Berlin, DE - Rust Hack and Learn - Berline.rs
- September 8, 2021, Denver, CO, US - Rust Q&A - Rust Denver
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
Apple
Wingback
PolarFox Network
Stealth Startup
Dusk Network
ChainSafe
Bitfury
Kollider
NZXT
Parity Technologies
Subspace Labs
Tweet us at @ThisWeekInRust to get your job offers listed here!
Quote of the Week
Code doesn't deal with resources until it does. Similarly with everything else that forces you to reason about control flow - you don't care about thread management until you do, you don't care about action logs until you do, you don't care about performance until you do... and from the other side, code doesn't need to be exception-safe until it does. The trouble with this kind of "magic" language feature is that correctness becomes non-compositional: you can take two working pieces of code and put them together and get something that doesn't work.
– Mickey Donaghy on Hacker News
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.