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
- SixtyFPS (GUI crate): Changelog for 31th of October 2021
- MirChecker: Detecting Bugs in Rust Programs via Static Analysis
- apollo-rs: spec-compliant GraphQL tools in Rust
- GCC Rust Monthly Report #11 October 2021
- This week in Fluvio #11: the programmable streaming platform
- This week in Databend #14: an elastic and reliable cloud warehouse
Research Papers
Observations/Thoughts
- The Tree Structure of File Systems
- [ZH] Rust Chinese Magazine Issue 10 has been released!
- [ZH] The first draft of the Rust Secure Coding Specification in Chinese has been released. Everyone is welcome to contribute!
- [ZH] Trojan Source| Hiding invisible vulnerabilities in Rust code
Rust Walkthroughs
- Advanced Serde - Loose type deserialization for non-self-describing protocols
- An Intro to the Rust Programming Language
- Getting Started with Rust on a Raspberry Pi Pico (Part 2)
- Anatomy of a Terminal Emulator
- Working with signals in Rust - some things that signal handlers can't handle
- Beginning Rust: Writing a Small CLI Tool
- Git Internals part 1: The git object model
- Getting started with Rust on RISC-V Linux
- Streaming the Reddit API using Fluvio's WASM ArrayMap
- [video] I'm learning Rust - Setup & fundamentals
- [video] Rust London: Building the Internet Of (Trusted) Things with Ockam and Embedded Rust
- [video] Rust London: Actor Programming with Ockam Workers
- [video] Rust London: How to end-to-end encrypt all application layer communication - with Ockam
- [video] Implementing Hazard Pointers in Rust (part 3)
- [series] [video] Writing a Programming Language (in Rust) 3: List destructuring
- [series] [video] Writing a Programming Language (in Rust) 4: List unspread and list iteration
- [series] [video] Writing a Programming Language (in Rust) 5: Function calls (Part 1)
- [series] [video] Rust Book Club
Miscellaneous
- Rust Editor Experience Survey
- Streaming the Reddit API using Fluvio's WASM ArrayMap
- [video] [IT] Introduzione a Rust
Crate of the Week
This week's crate is roogle, a type-based Rust API search engine inspired by Haskell's Hoogle.
Thanks to Hirochika Matsumoto 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 - Remove/clean up pub extern crate in top level of ockam_core
- ockam - Remove unnecessary core/heapless/hashbrown re-exports from signature_core::lib
If you are a Rust project owner and are looking for contributors, please submit tasks here.
Updates from the Rust Project
316 pull requests were merged in the last week
- fix CVE-2021-42574
- add LLVM Control Flow Integrity support to the Rust compiler
- add
-Z no-unique-section-names
to reduce ELF header bloat - fix: inner attribute followed by outer attribute causing ICE
- skipping verbose diagnostic suggestions when calling
.as_ref()
on type not implementingAsRef
- improve and test cross-crate hygiene
- use
SortedMap
in HIR - stabilize
is_symlink()
forMetadata
andPath
- stabilize
option_result_unwrap_unchecked
- impl
Pattern
forchar
array - make most
std::ops
traitsconst
on numeric types - codegen_gcc: remove unused dependency on object
- codegen_gcc: fix negation operation
- bindgen: don't generate 2^64 byte padding fields on unions
- bindgen: avoid case of a self-referential type alias
- cargo: change
--scrape-examples
flag to-Z rustdoc-scrape-examples
- cargo: scrape code examples from
examples/
directory for rustdoc - rustdoc: fix generics generation in search index
- rustdoc: use better highlighting for
*const
,*mut
, and&mut
- rustdoc: remove flicker during page load
- clippy: move
if_then_panic
to pedantic and rename tomanual_assert
- clippy: fix false positive in
match_overlapping_arm
- clippy: fix
question_mark
false positive on custom error type - clippy: add
unit-hash
lint - clippy: new lint:
string-slice
- clippy: ignore references to type aliases in
ptr_arg
- clippy: fix ICE in
undocumented_unsafe_blocks
- clippy: disable
if_not_else
lints from firing onelse
-if
s - rustfmt: prevent trailing whitespace in where clause bound predicate
- rustfmt: retain trailing comments in module when using
rustfmt::skip
attribute
Rust Compiler Performance Triage
The only significant regressions were 1. two PRs that slowed down doc generation, and 2. some slowdown from the new lints to flag occurrences of Unicode bidirectional control characters. The doc generation regression is being investigated.
Triage done by @pnkfelix. Revision range: 3c8f00..6384dc
6 Regressions, 3 Improvements, 1 Mixed; 4 of them in rollups 39 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
- [disposition: merge] Static async fn in traits
- [disposition: merge] Constrained Naked Functions
Tracking Issues & PRs
- [disposition: merge] stabilize format args capture
- [disposition: merge] Stabilize -Z symbol-mangling-version=v0 as -C symbol-mangling-version=v0
- [disposition: merge] Stabilize -Z strip as -C strip
- [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] GATs: Decide whether to have defaults for
where Self: 'a
New RFCs
Upcoming Events
Online
- November 3, 2021, Indianapolis, IN, US - Indy.rs - with Social Distancing - Indy Rust
- November 9, 2021, San Diego, CA, US - San Diego Rust November 2021 Tele-Meetup - San Diego Rust
- November 9, 2021, Berlin, DE - Rust Hack and Learn - Berline.rs
- November 9, 2021, Seattle, WA, US - Monthly Meetup - Seattle Rust Meetup
- November 10, 2021, Malaysia - Rust Meetup - Rust Malaysia
- November 11, 2021 - Rust For Linux: Writing Safe Abstractions & Drivers - The Linux Foundation
- November 17, 2021, Vancouver, BC, CA - Borrowing and Lifetimes through Metaphors - Vancouver Rust
North America
- November 10, 2021, Atlanta, GA, US - Grab a beer with fellow Rustaceans - Rust Atlanta
- November 10, 2021, Mesa, AZ, US - Booze.rs - Desert Rust
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
System Initiative
AdInMo
Sigma Prime
Metawork
Timescale
Tweet us at @ThisWeekInRust to get your job offers listed here!
Quote of the Week
I always tell myself that code quickly written just to compile looks like Order 66 executed on Christmas day
[...]
Clones and unwrapping as far as the eye can see.
Thanks to UtherII for the suggestion!
Please submit quotes and vote for next week!
This Week in Rust is edited by: nellshamrell, llogiq, and cdmistman.