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 newsletters this week.
Official
Tooling
Observations/Thoughts
- Which Parsing Approach?
- Challenging LR Parsing
- What I Learnt from Benchmarking Http4k, Ktor (Kotlin) and Actix v2, v3 (Rust) Microservices
- No Namespaces in Rust is a Feature
- Building devserver: An Ultra-Tiny Rust Server
- Taming nalgebra's Rustdoc
- Rust in Science and ever-changing requirements
- From @Test to #[test]: an essay about testing between Java and Rust
Learn Standard Rust
- Collecting Data from an API
- SQLite File Parser Pt. 1: The Header
- An introduction to Data Oriented Design with Rust
- Rust for Java developers
- Oxidizing portals with zbus
Learn More Rust
- Implementing Records in x7
- Let's build a single binary gRPC server-client with Rust in 2020 - Part 4
- Make A Language - Part Three: Defining variables
- Rust HTTP Testing with httpmock
Project Updates
- Announcing the CCS811 indoor air quality sensor driver.
- OpenPGP in Rust: the Sequoia project
- AssemblyLift v0.2 preview: RPC-based IO modules
- Announcing Actix Web v3.0
Miscellaneous
- Your Language Sucks, It Doesn't Matter
- Rust is #18 in the TIOBE Index for September 2020
- A Few Github Action "Recipes" for Rust
- Writing an x86 bootloader in Rust that can launch vmlinux
- [video] GOTO 2020 - Next-Generation Programming: Rust & Elm - Richard Feldman
Call for Blog Posts
The Rust Core Team wants input from the community! If you haven't already, read the official blog and submit a blog post - it will show up here! Here are the wonderful submissions since the call for blog posts:
Crate of the Week
This week's crate is gitoxide, an idiomatic, modern, lean, fast, safe & pure Rust implementation of git.
Thanks again to Vlad Frolov 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.
No issues were proposed for CfP.
If you are a Rust project owner and are looking for contributors, please submit tasks here.
Updates from Rust Core
336 pull requests were merged in the last week
- add rust-dev component to support rustc development
- properly encode spans with a dummy location and non-root
SyntaxContext
- add
const_item_mutation
lint - more structured suggestions for boxed trait objects instead of impl Trait on non-coerceable tail expressions
- add help note when using type in place of const
- do not promote
&mut
of a non-ZST ever - chalk: simplify lowering
- inliner: emit storage markers for introduced arg temporaries
- enable the
SimplifyArmIdentity
MIR optimization atmir-opt-level=1
- stabilize
doc_alias
- stabilize
core::future::
{pending
,ready
} - add saturating methods for
Duration
- add
slice::array_chunks_mut
- eliminate mut reference UB in
Drop
impl forRc<T>
BTreeMap
mutable iterators should not take any reference to visited nodes during iterationBTreeMap
: move up reference to map's root fromNodeRef
- add
drain_filter
method toHashMap
andHashSet
- arch: AVX512F
- add
MaybeUninit::assume_init_drop
- remove internal and unstable
MaybeUninit::UNINIT
- cargo: fix non-determinism with new feature resolver
Rust Compiler Performance Triage
- 2020-09-15: 1 regression, 2 improvements.
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
- [RFC]: Portable SIMD Libs Project Group
- Get type of an arbitrary expression
- Add generalized arity tuples
Tracking Issues & PRs
- [disposition: merge]Add
[T; N]: TryFrom<Vec<T>>
(insta-stable) - [disposition: merge]Implementation of Write for some immutable ref structs
- [disposition: merge]Permit uninhabited enums to cast into ints
- [disposition: merge]Stabilize some Result methods as const
- [disposition: merge]Stabilize some Option methods as const
- [disposition: merge]Stabilize move_ref_pattern
- [disposition: merge]Explicitly document the size guarantees that Option makes.
- [disposition: merge]Stabilize intra-doc links
- [disposition: merge]target-feature 1.1: should closures inherit target-feature annotations?
- [disposition: merge]might_permit_raw_init: also check aggregate fields
New RFCs
Upcoming Events
Online
- September 16. Vancouver, BC, CA - Vancouver Rust - Rust Study/Hack/Hang-out night
- September 17. Linz, AT - Rust Linz - Rust Meetup Linz - Meaghan Lewis on Rust, Embedded Rust with Roland Ruckerbauer
- September 17. Berlin, DE - Berline.rs - Berlin Rust Hack and Learn
- September 29. Dallas, TX, US - Dallas Rust - Last Tuesday
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
- Backend Engineer - Rust at Kraken (Remote AMER or EMEA)
- Senior Backend Engineer - Rust at Kraken (Remote AMER or EMEA)
- Backend / Quant Developer at Kraken (Remote EMEA)
- Backend Engineer - Crypto/Payments at Kraken (Remote AMER, APAC, EMEA)
- Rust Software Engineer - Backend at ANIXE (Wrocław, PL)
- Senior Blockchain Engineer at PureStake (Boston, MA, US or Madrid, ES, or Remote)
- Senior Embedded Software Engineer at Georg Fischer (El Monte, CA, US)
Tweet us at @ThisWeekInRust to get your job offers listed here!
Quote of the Week
When you have a lifetime
<'a>
on a struct, that lifetime denotes references to values stored outside of the struct. If you try to store a reference that points inside the struct rather than outside, you will run into a compiler error when the compiler notices you lied to it.
Thanks to Tom Phinney for the suggestion!
Please submit quotes and vote for next week!
This Week in Rust is edited by: nellshamrell, llogiq, and cdmistman.