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
Newsletters
Project/Tooling Updates
- Progress report on rustc_codegen_cranelift (Okt 2022)
- Announcing KataOS and Sparrow
- rust-analyzer changelog #151
- A Memory Safe Implementation of the Network Time Protocol
- Zenoh 0.6.0, a Pub/Sub/Query protocol, was released and it is packed with new features.
- GlueSQL v0.13 - FSM based SQL query builder is newly added
- Rust on Espressif chips - 17-10-2022
- Introducing BastionAI, an open-source privacy-friendly AI training framework in Rust
Observations/Thoughts
- Platform Agnostic Drivers in Rust: Publishing to Crates.io
- A first look at Rust in the 6.1 kernel
- Asynchronous programming in Rust
- Why Rust?
- What If LaTeX Had Instant Preview?
- Magical handler functions in Rust
Rust Walkthroughs
- Rust: Type Concealment With Any Trait and FnMut
- Practical Parsing in Rust with nom
- The Little Joys of Code: Proc Macros
- How to Build a Machine Learning Model in Rust
- [video] Building Awesome Desktop App with Rust, Tauri, and SurrealDB
- [video] AsRef/Borrow Traits, and the ?Sized Marker - Rust
- Using Neovim for Rust Development
- [series] Sqlite File Parser Pt 3
Research
Crate of the Week
This week's crate is HyperQueue, a runtime for ergonomic execution of programs on a distributed cluster.
Thanks to Jakub Beránek 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.
- zerocopy - Add defensive programming in FromBytes::new_box_slice_zeroed
- zerocopy - Add tests for compilation failure
- Fornjot - export-validator does not support Windows
- Ockam - Add clap based ockam sub command to create a vault without creating a node
- Ockam - Add clap based ockam sub command to rotate identity keys
- Ockam - Partition rust test jobs with nextest
If you are a Rust project owner and are looking for contributors, please submit tasks here.
Updates from the Rust Project
388 pull requests were merged in the last week
- support casting boxes to dyn*
- support default-body trait functions with return-position
impl Trait
in traits - mark derived
StructuralEq
as automatically derived - allow compiling the
wasm32-wasi
std library with atomics - detect and reject out-of-range integers in format string literals
- drop temporaries created in a condition, even if it's a let chain
- fix
let
keyword removal suggestion in structs - make
dyn*
casts into a coercion, allowdyn*
upcasting - make
overlapping_impls
not generic - point out incompatible closure bounds
- populate effective visibilities in
rustc_resolve
- print return-position
impl Trait
in trait verbosely if-Zverbose
- add suggestion to the "missing native library" error
- suggest
==
to the first expr which hasExprKind::Assign
kind - suggest candidates for unresolved import
- suggest parentheses for possible range method calling
- suppress irrefutable let patterns lint for prefixes in match guards
- unify
tcx.constness
query and param env constness checks - remove type traversal for mir constants
- scoped threads: pass closure through MaybeUninit to avoid invalid dangling references
- never panic in
thread::park
andthread::park_timeout
- use semaphores for thread parking on Apple platforms
- nicer errors from
assert_unsafe_precondition
- optimize TLS on Windows
- stabilize
map_first_last
- constify
Location
methods - add
MaybeUninit
array transposeFrom
impls - add
Box<[T; N]>: TryFrom<Vec<T>>
- add
IsTerminal
trait to determine if a descriptor or handle is a terminal - add
is_empty()
method tocore::ffi::CStr
- panic for invalid arguments of
{integer primitive}::ilog{,2,10}
in all modes - impl
AsFd
andAsRawFd
forio::
{Stdin
,Stdout
,Stderr
}, not the sys versions - prevent UB in child process after calling
libc::fork
- fix
Duration::{try_,}from_secs_f{32,64}(-0.0)
- SIMD: mark more mask functions inline
- futures: fix soundness hole in join macros
- cargo: fix deadlock when build scripts are waiting for input on stdin
- cargo: support 'publish.timeout' config behind '-Zpublish-timeout'
- rustdoc: change default level of
invalid_html_tags
to warning and stabilize it - clippy: add
as_ptr_cast_mut
lint - clippy: add
unused_format_specs
lint - clippy: add a suggestion and a note about orphan rules for
from_over_into
- clippy: add new lint
partial_pub_fields
- clippy: change
uninlined_format_args
into a style lint - clippy: don't lint
ptr_arg
when used as an incompatible trait object - clippy: fix
to_string_in_format_args
in parens - clippy: don't lint
default_numeric_fallback
on constants - clippy: don't lint
unnecessary_cast
on negative hexadecimal literals when cast as floats - clippy:
zero_prefixed_literal
: Do not advise to use octal form if not possible - clippy: add
cast-nan-to-int
lint - clippy: fix
box-default
lintingno_std
non-boxes - clippy: fix:
uninlined_format_args
shouldn't inline panic! before 2021 edition - rust-analyzer: migrate assists to format args captures, part 2
- rust-analyzer: diagnose some incorrect usages of the question mark operator
- rust-analyzer: fix formatting requests hanging when r-a is still starting
Rust Compiler Performance Triage
Overall a fairly busy week, with many improvements and regressions, though the net result ends up being a small regression. Pretty busy week in terms of regressions in rollups as well, which unfortunately mostly were not followed up on prior to the report being put together, despite the relative ease of running perf against individual PRs now.
Triage done by @simulacrum. Revision range: 1e926f06..e0f8e60
2 Regressions, 4 Improvements, 4 Mixed; 4 of them in rollups 47 artifact comparisons made in total
See full report for details.
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:
- 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
- No RFCs entered Final Comment Period this week.
Tracking Issues & PRs
-
- No Tracking Issues or PRs entered Final Comment Period this week.
New and Updated RFCs
Upcoming Events
Rusty Events between 2022-10-19 - 2022-11-16 🦀
Virtual
- 2022-10-19 | Virtual (Boulder, CO, US) | Boulder Elixir and Rust
- 2022-10-19 | Virtual (Chennai, IN) | Techceleration at Toyota Connected
- 2022-10-19 | Virtual (Vancouver, BC, CA) | Vancouver Rust
- 2022-10-19 | Virtual | Boston NoSQL Database Group (ScyllaDB)
- 2022-10-20 | Virtual (Bellingham, WA, US) | bellingham.codes
- 2022-10-20 | Virtual (Buenos Aires, AR) | Nerdearla
- 2022-10-20 | Virtual (México City, MX) | Rust MX
- 2022-10-20 | Virtual (Stuttgart, DE) | Rust Community Stuttgart
- 2022-10-25 | Virtual (Berlin, DE) | OpenTechSchool Berlin
- 2022-10-25 | Virtual (Dallas, TX, US) | Dallas Rust
- 2022-10-26 | Virtual (Redmond, WA, US / New York, NY, US / Toronto, CA / Stockholm, SE / London, UK) | Microsoft Reactor Redmond
- 2022-10-27 | Virtual (Charlottesville, VA, US) | Charlottesville Rust Meetup
- 2022-10-27 | Virtual (Karlsruhe, DE) | The Karlsruhe Functional Programmers Meetup Group
- 2022-10-29 | Virtual (Ludwigslust, DE) | Ludwigslust Rust Meetup
- 2022-11-01 | Virtual (Beijing, CN) | WebAssembly and Rust Meetup (Rustlang)
- 2022-11-01 | Virtual (Buffalo, NY, US) | Buffalo Rust Meetup
- 2022-11-02 | Virtual (Cardiff, UK) | Rust and C++ Cardiff
- 2022-11-02 | Virtual (Indianapolis, IN, US) | Indy Rust
- 2022-11-02 | Virtual (Redmond, WA, US / San Francisco, SF, US / New York, NY, US / Toronto, CA / London, UK) | Microsoft Reactor Redmond
- 2022-11-02 | Virtual (Stuttgart, DE) | Rust Community Stuttgart
- 2022-11-08 | Virtual (Dallas, TX, US) | Dallas Rust
- 2022-11-08 | Virtual (Stockholm, SE) | Func Prog Sweden
- 2022-11-10 | Virtual (Budapest, HU) | HWSW free!
- 2022-11-12 | Virtual | Rust GameDev
- 2022-11-15 | Virtual (Washington, DC, US) | Rust DC
- 2022-11-16 | Virtual (Vancouver, BC, CA) | Vancouver Rust
Europe
- 2022-10-20 | London, UK | Rust London User Group
- 2022-10-25 | Paris, FR | Rust Paris
- 2022-10-25 | Roma, IT | Rust Roma
- 2022-10-26 | London, UK | Rust London User Group
- 2022-10-26 | Bristol, UK | Rust and C++ Cardiff/Rust Bristol
- 2022-10-27 | København, DK | Copenhagen Rust Group
North America
- 2022-10-20 | New York, NY, US | Rust NYC
- 2022-10-20 | New York, NY, US | Cloud Native New York
- 2022-10-25 | Toronto, ON, CA | Rust Toronto
- 2022-10-27 | Lehi, UT, US | Utah Rust
- 2022-11-10 | Columbus, OH, US | Columbus Rust Society
Oceania
- 2022-10-20 | Brisbane, QLD, AU | Rust Brisbane
- 2022-10-20 | Wellington, NZ | Rust Wellington
- 2022-10-25 | Melbourne, VIC, AU | Rust Melbourne
- 2022-11-09 | Sydney, NSW, AU | Rust Sydney
South America
- 2022-11-05 | São Paulo, SP, 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
I think it's worth noting that the fact that this program fails to compile whereas the analogous Python runs but gives the wrong answer is exactly what Rust's ownership and borrowing system is about.
Thanks to Kill The Mule 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, bennyvasquez.
Email list hosting is sponsored by The Rust Foundation