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 #144
- IntelliJ Rust Changelog #177
- Diesel 2.0.0
- Helix editor 22.08 released
- This Month in hyper: August 2022
- Fornjot - Weekly Release - 2022-W35
- Announcing Sycamore v0.8.0
- Announcing finl_unicode 1.0.0
- Slint UI crate weekly updates
- argmin 0.7.0 and argmin-math 0.2.0 released
- Update-informer v0.5.0
- This week in Databend #57: A Modern Cloud Data Warehouse for Everyone
Observations/Thoughts
- Solving The Witness with Z3 (Part 1)
- Static streams for faster async proxies
- Building an authentication system in Rust using session tokens
- OpenTelemetry Distributed Tracing in Rust
- Toward fearless
cargo update
Rust Walkthroughs
- Learning Rust: Combinators
- Integrating Rust With Android Development — Final Part
- Rewriting my blog in Rust for fun and profit
- Building A Gamedev Maths Library In Rust From Scratch – Alex Dixon
- Pattern Matching and Backwards Compatibility
- Writing FreeBSD Kernel Modules in Rust
- [series] Ruxel - Building a Ray Tracer with Rust Part 1
- [series] STM32F4 Embedded Rust at the HAL: Timer Interrupts - Part 2
- [video] Using Rust to understand The Little Schemer
- [video] Building a Rust Multithreaded Web Server (chapter 20 of Rust Book)
Miscellaneous
- The Bombercrab Challenge 💥💣🦀
- [video] Unsafe Rust is not C
- [video] Building a space station in Rust (Simple Rust patterns)
- [video] Arvid Norberg: What C++ engineers can learn from Rust
Crate of the Week
This week's crate is bytehound a memory profiler for Rust.
Thanks to Aleksey Kladov 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.
- Ogma - Alter Expecting enum to be a bitflag
- Artichoke - Add wasi platform support to scolapasta-path
- Blaze-rs - Fixing the lost references issue
- Tool-sync - Support not only 'latest' releases
- Ockam - Improve output of ockam secure-channel list command for formatting, color, and json
- Ockam - Improve output of ockam tcp-connection create command for formatting, color, and json
- Ockam - Rename --node argument of ockam secure-channel list to --at
- Space-craft - Project contributions, migration from amytheyst
If you are a Rust project owner and are looking for contributors, please submit tasks here.
Updates from the Rust Project
412 pull requests were merged in the last week
- add the armv4t-none-eabi target to the supported_targets
- stabilize split debuginfo on linux
- add GDB/LLDB pretty-printers for
NonZero
types - fix const: dynamic checks for accessing statics
- improve const mismatch
FulfillmentError
- provide structured suggestion for
hashmap[idx] = val
- suggest adding a missing semicolon before an item
- suggest alternatives when trying to mutate a
HashMap
/BTreeMap
via indexing - use smaller span for suggestions
- migrate
rustc_attr
crate diagnostics - migrate
rustc_interface
diagnostics - migrate
rustc_lint
errors toSessionDiagnostic
- migrate
rustc_plugin_impl
toSessionDiagnostic
- migrate
rustc_ty_utils
toSessionDiagnostic
- migrate ast lowering to session diagnostic
- migrate part of
rustc_infer
to session diagnostic - migrate
rustc_driver
toSessionDiagnostic
- migrate
rustc_mir_dataflow
to diagnostic structs - miri: adding support for external C functions that have integer (or empty) args and/or returns
- miri: skip field retagging on ZSTs, it can take forever
- miri: strengthen C++20 SC accesses
- avoid cloning a collection only to iterate over it
- reduce code size of
assert_matches_failed
- shrink
FnAbi
- shrink
thir::Expr
- stabilize
#![feature(label_break_value)]
- stabilize
const_ptr_offset_from
- stabilize
std::io::read_to_string
- add a
File::create_new
constructor - add
next_up
andnext_down
forf32
/f64
is_whitespace()
performance improvements- add pointer masking convenience functions
- BTree: evaluate static type-related check at compile time
- fix
Ipv6Addr::is_unicast_global
to check for unicast global scope rebase - windows: optimize
Wtf8Buf::into_string
for the case where it contains UTF-8 - properly forward
ByRefSized::fold
to the inner iterator - make
slice::
{split_at
,split_at_unchecked
}const
functions std::io
: migrateReadBuf
toBorrowBuf
/BorrowCursor
- rustdoc: rewrite error index generator to greatly reduce the size of the pages
- clippy: implemented
suspicious_to_owned
lint to check ifto_owned
is called on aCow
- clippy: new lint: Raw slice pointer cast
- clippy: new
multi_assignment
lint - clippy: don't lint
needless_return
ifreturn
has attrs - clippy: don't lint literal
None
from expansion - clippy: ignore
match_like_matches_macro
when there is comment - clippy: remove parenthesis from
unnecessary_cast
suggestion - clippy: rename
manual_empty_string_creation
and move to pedantic - rust-analyzer: do not substitute
Self
when in same impl block - rust-analyzer: move empty diagnostics workaround back into the server
- rust-analyzer: resolve doc links on impl blocks
- rustc-perf: add a metric containing the size of generated documentation
Rust Compiler Performance Triage
A somewhat difficult week to triage due to the large amount of noise coming from two benchmarks. Hopefully this noise settles down in the future. Other than that, improvements much outweighed regressions with an average of 142 changes to instruction count averaging 0.7% improvement. There were no huge wins this week, however.
Triage done by @rylev. Revision range: 4a24f08b..0631ea5d
Summary:
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions ❌ (primary) |
1.0% | [0.2%, 2.6%] | 4 |
Regressions ❌ (secondary) |
1.3% | [0.3%, 2.6%] | 23 |
Improvements ✅ (primary) |
-0.7% | [-2.8%, -0.2%] | 138 |
Improvements ✅ (secondary) |
-1.3% | [-2.7%, -0.2%] | 71 |
All ❌✅ (primary) | -0.7% | [-2.8%, 2.6%] | 142 |
2 Regressions, 3 Improvements, 10 Mixed; 6 of them in rollups 40 artifact comparisons made in total
Call for Testing
An important step for RFC implementation is for people to experiment with the implementation and give feedback, especially before stabilization. The following RFCs would benefit from user testing before moving forward:
- No RFCs issued a call for testing this week.
If you are a feature implementer and would like your RFC to appear on the above list, add the new call-for-testing
label to your RFC along with a comment providing testing instructions and/or guidance on which aspect(s) of the feature
need testing.
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
- No RFCs entered Final Comment Period this week.
Tracking Issues & PRs
- [disposition: merge] Stabilize raw-dylib for non-x86
New and Updated RFCs
Upcoming Events
Rusty Events between 2022-08-31 - 2022-09-28 🦀
Virtual
- 2022-09-01 | Virtual (PDT Timezone) | Conf42
- 2022-09-01 | Virtual | Google Open Source Live
- 2022-09-02 | Virtual (Nürnberg, DE) | Rust Nuremberg
- 2022-09-03 | Virtual (Bangalore, IN) | Polkadot India
- 2022-09-03 | Virtual (Nürnberg, DE) | Rust Nuremberg
- 2022-09-04 | Virtual (Seattle, WA, US) | Seattle Rust Meetup
- 2022-09-06 | Virtual (Beijing, CN) | WebAssembly and Rust Meetup (Rustlang)
- 2022-09-06 | Virtual (Buffalo, NY, US) | Buffalo Rust Meetup
- 2022-09-07 | Virtual (Indianapolis, IN, US) | Indy Rust
- 2022-09-10 | Virtual | Rust GameDev
- 2022-09-10 | Virtual (Bangalore, IN) | Polkadot India
- 2022-09-12 | Virtual + Dublin, IE | Linux Plumbers Conference
- 2022-09-13 | Virtual (Dallas, TX, US) | Dallas Rust
- 2022-09-13 | Virtual (Rostock, DE) | Altow Academy
- 2022-09-14 | Virtual (Malaysia)| Golang Malaysia
- 2022-09-14 | Virtual (Cardiff, UK) | Rust and C++ Cardiff
- 2022-09-15 | Virtual (Columbus, OH, US) | GDG Columbus
- 2022-09-20 | Virtual (Washington, DC, US) | Rust DC
- 2022-09-21 | Virtual (Vancouver, BC, CA) | Vancouver Rust
- 2022-09-22 | Virtual (Charlottesville, VA, US) | Charlottesville Rust Meetup
- 2022-09-23 | Virtual (Tokyo, JP) | Rust Tokyo
- 2022-09-27 | Virtual (Dallas, TX, US) | Dallas Rust
Europe
- 2022-09-01 | Berlin, DE | Rust Berlin
- 2022-09-12 | Dublin, IE + Virtual | Linux Plumbers Conference
- 2022-09-15 | Paris, FR | Rust Paris
North America
- 2022-08-31 | New York, NY, US | Rust NYC
- 2022-09-01 | Phoenix, AZ, US | Phoenix Android - GDG
Oceania
- 2022-09-14 | Sydney, NSW, AU | Rust Sydney
South America
- 2022-09-10 | São Paulo, BR | Rust São Paulo Meetup
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.
Jobs
Please see the latest Who's Hiring thread on r/rust
Quote of the Week
[W]e reached a tipping point. We decided to move our entire codebase to Rust... . Rust seemed to give us all the capabilities we needed, however, there was still one minor problem - no one on the team knew Rust. ...
We started with a small team of senior engineers and managers learning Rust and developing the skeleton of the DB and dev environment (for others to build on). Then, slowly, others joined in rewriting and contributing different components until we eventually got rid of the old codebase altogether (I still remember the day my original C modules, from the first days of Pinecone, were taken out). Unbeknownst to most Pinecone customers, the new Rust core was deployed in March this year. And in the process of taking over running workloads, we managed not to drop a single API call!
... We all expect[ed] performance and dev processes to improve. Those indeed happened. What we didn’t expect was the extent to which dev velocity increased and operational incidents decreased. Dev velocity ... improved dramatically with Rust. Built-in testing, CI/CD, benchmarking, and an overzealous compiler increased engineers’ confidence in pushing changes, and enabled them to work on the same code sections and contribute simultaneously without breaking the code base. Most impressively though, real time operational events dropped almost to zero overnight after the original release. Sure, there are still surprises here and there but, by and large, the core engine has been shockingly stable and predictable.
– Edo Liberty on the pinecone blog
Thanks to Erich Gubler for the suggestion!
Please submit quotes and vote for next week!
This Week in Rust is edited by: nellshamrell, llogiq, cdmistman, ericseppanen, extrawurst, andrewpollack, U007D, kolharsam, joelmarcey, mariannegoldin.
Email list hosting is sponsored by The Rust Foundation