Title: This Week in Rust 423
Number: 423
Date: 2021-12-29
Category: This Week in Rust

Hello and welcome to another issue of *This Week in Rust*!
[Rust](http://rust-lang.org) 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](https://twitter.com/ThisWeekInRust) or [send us a pull request](https://github.com/rust-lang/this-week-in-rust).
Want to get involved? [We love contributions](https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md).

*This Week in Rust* is openly developed [on GitHub](https://github.com/rust-lang/this-week-in-rust).
If you find any errors in this week's issue, [please submit a PR](https://github.com/rust-lang/this-week-in-rust/pulls).

## Updates from Rust Community

### Project/Tooling Updates
* [Hello, youki! (low-level container runtime written in Rust)](https://www.utam0k.jp/en/blog/2021/12/27/youki_first_release/)
* [Nushell 0.42](https://www.nushell.sh/blog/2021-12-28-nushell_0_42.html)
* [This Year in Wgpu - 2021](https://gfx-rs.github.io/2021/12/25/this-year.html)
* [SixtyFPS (GUI crate): 2021 in Review](https://sixtyfps.io/blog/2021-in-review.html)
* [BonsaiDb December Update: Finishing up alpha 1](https://community.khonsulabs.com/t/bonsaidb-december-update-finishing-up-alpha-1/88)
* [NAPI-RS 2.0 released](https://napi.rs/blog/announce-v2)
* [This Year in Embedded Rust: 2021 Edition](https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/)
* [Rust Analyzer Changelog #108](https://rust-analyzer.github.io/thisweek/2021/12/27/changelog-109.html)
* [End of year 2021: 20 months of Gitoxide](https://github.com/Byron/gitoxide/discussions/285)
* [This week in Databend #22: an elastic and reliable cloud warehouse](https://weekly.databend.rs/2021-12-29-databend-weekly/)

### Research
* [Deadlock-free asynchronous message reordering in Rust with multiparty session types](https://arxiv.org/abs/2112.12693)

### Observations/Thoughts
* [Thoughts on Context and Capabilities in Rust](https://jam1.re/blog/thoughts-on-contexts-and-capabilities-in-rust)
* [My negative views on Rust](https://chrisdone.com/posts/rust/)
* [Learning Rust – Why now?](https://garrellco.com/?p=1)
* [audio] [What's New in Rust 1.56 and 1.57](https://rustacean-station.org/episode/050-rust-1.56-1.57/)
* [audio] [Code Like a Pro in Rust with Brenden Matthews](https://rustacean-station.org/episode/051-brenden-matthews/)

### Rust Walkthroughs
* [Vange-rs: WebAssembly in Rust](https://caiiiycuk.medium.com/vange-rs-webassembly-in-rust-498e2f960a04)
* [Writing a minimal Lua implementation with a virtual machine from scratch in Rust](https://notes.eatonphil.com/lua-in-rust.html)
* [Bringing Rust to Space - Setting up a Rust ecosystem for the VA108XX MCU family](https://robamu.github.io/post/rust-ecosystem/)
* [Scala and Rust interoperability via JNI](https://engineering.avast.io/scala-and-rust-interoperability-via-jni/)
* [Writing a prometheus exporter in rust from idea to grafana chart](https://mateusfreira.github.io/@mateusfreira-writing-a-prometheus-exporter-in-rust-from-idea-to-grafana-chart/)
* [Futuristic Rust: context emulation](https://haibane-tenshi.github.io/rust-contexts/)
* [Mocking HTTP Services in Rust](https://alexliesenfeld.com/mocking-http-services-in-rust)
* [LLVM Infrastructure and Rust](https://www.bexxmodd.com/log/llvm-infrastrucutre-and-rust/7)
* [Making Games in Rust - Part 6 - Generating a Map](https://dev.to/sbelzile/making-games-in-rust-part-6-generating-a-map-4aic)
* [Procedural Macros: Parsing custom syntax](https://blog.turbo.fish/proc-macro-parsing/)
* [A Data Pipeline for Go Trains Delay Analysis — ML in Action with Rust](https://towardsdatascience.com/a-data-pipeline-for-go-trains-delay-analysis-ml-in-action-with-rust-b294e80eede9)
* [video] [Tetris in Rust from scratch](https://www.youtube.com/playlist?list=PLBNbqulT6FWw9C39_WIT_dcCIj1AdxiAy)
* [video] [Rust Modules - Explained Like I'm 5](https://www.youtube.com/watch?v=969j0qnJGi8)
* [video] [I'm learning Rust - Enums, patterns, and traits](https://www.youtube.com/watch?v=zHpDGeJU7no)
* [FR] [video] [Parlons peu, parlons Rust!](https://www.youtube.com/watch?v=jnLbY7RIH54&list=PLuNjeTqaNojpuaqVboF1vmCRbn1an6sXg&index=5)
* [ZH] [Rust性能评估与调优实践](https://zhuanlan.zhihu.com/p/451184900)

## Crate of the Week

This week's crate is [zoxide](https://github.com/ajeetdsouza/zoxide), a smarter `cd` command.

Thanks to [Ajeet D'Souza](https://users.rust-lang.org/t/crate-of-the-week/2704/993) for the self-suggestion!

[Please submit your suggestions and votes for next week][submit_crate]!

[submit_crate]: https://users.rust-lang.org/t/crate-of-the-week/2704

## 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.

If you are a Rust project owner and are looking for contributors, please submit tasks [here][guidelines].

[guidelines]: https://users.rust-lang.org/t/twir-call-for-participation/4821

## Updates from the Rust Project

188 pull requests were [merged in the last week][merged]

[merged]: https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2021-12-20..2021-12-27

* [miri: provide slightly better notes when tracking a pointer tag](https://github.com/rust-lang/miri/pull/1945)
* [backport LLVM changes to disable deferred inlining](https://github.com/rust-lang/rust/pull/92110)
* [fix duplicate derive clone suggestion](https://github.com/rust-lang/rust/pull/91544)
* [perf: change `Backtrace::enabled` atomic from `SeqCst` to `Relaxed`](https://github.com/rust-lang/rust/pull/92139)
* [perf: eliminate `ObligationCauseData`](https://github.com/rust-lang/rust/pull/91844)
* [fix bad caching of `~const Drop` bounds](https://github.com/rust-lang/rust/pull/92149)
* [constify `core::intrinsics::black_box` and `core::hint::black_box`](https://github.com/rust-lang/rust/pull/92226)
* [make `PTR::as_ref` and similar methods `const`](https://github.com/rust-lang/rust/pull/91823)
* [RawVec: don't recompute capacity after allocating](https://github.com/rust-lang/rust/pull/92220)
* [allow reverse iteration of lowercase'd/uppercase'd chars](https://github.com/rust-lang/rust/pull/88858)
* [stabilise `entry_insert`](https://github.com/rust-lang/rust/pull/90345)
* [suggest adding `#[cfg(test)]` to a test module](https://github.com/rust-lang/rust/pull/91770)
* [cargo: make levenshtein distance case insensitive.](https://github.com/rust-lang/cargo/pull/10224)
* [clippy: add suggestion for `neg_multiply` lint](https://github.com/rust-lang/rust-clippy/pull/8144)
* [clippy: fix `iter_skip_next` false positives](https://github.com/rust-lang/rust-clippy/pull/8133)
* [clippy: improve `unwrap_or_else_default` when handling `unwrap_or_else(XXX::new)`](https://github.com/rust-lang/rust-clippy/pull/8163)
* [clippy: fix `shadow_reuse` false negative for if let bindings](https://github.com/rust-lang/rust-clippy/pull/8165)
* [clippy: fix an ICE on unwrapping a None](https://github.com/rust-lang/rust-clippy/pull/8167)
* [clippy: new lint: `init-numbered-fields`](https://github.com/rust-lang/rust-clippy/pull/8170)
* [rustfmt: fix static async closure qualifier order](https://github.com/rust-lang/rustfmt/pull/5150)
* [rustfmt: retain qualified path when rewriting struct literal expressions](https://github.com/rust-lang/rustfmt/pull/5152)

### Rust Compiler Performance Triage

Relatively quiet week, mostly rustdoc improvements.

Triage done by **@simulacrum**.
Revision range: [3d57c61a..e91ad5fc62](https://perf.rust-lang.org/?start=3d57c61a9e04dcd3df633f41142009d6dcad4399&end=e91ad5fc62bdee4a29c18baa5fad2ca42fc91bf4&absolute=false&stat=instructions%3Au)

2 Regressions, 1 Improvements, 6 Mixed; 0 of them in rollups

26 comparisons made in total

[Full report here](https://github.com/rust-lang/rustc-perf/blob/master/triage/2021-12-28.md)

### [Approved RFCs](https://github.com/rust-lang/rfcs/commits/master)

Changes to Rust follow the Rust [RFC (request for comments) process](https://github.com/rust-lang/rfcs#rust-rfcs). These
are the RFCs that were approved for implementation this week:

* [Amend RFC 2996 to replace `Stream` with  `AsyncIterator`](https://github.com/rust-lang/rfcs/pull/3208)

### Final Comment Period

Every week [the team](https://www.rust-lang.org/team.html) announces the
'final comment period' for RFCs and key PRs which are reaching a
decision. Express your opinions now.

#### [RFCs](https://github.com/rust-lang/rfcs/labels/final-comment-period)

* *No new RFCs entered Final Comment Period this week.*

#### [Tracking Issues & PRs](https://github.com/rust-lang/rust/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc)

* [disposition: merge] [Clarify the guarantees that ThreadId does and doesn't make.](https://github.com/rust-lang/rust/pull/84083)
* [disposition: merge] [Remove effect of `#[no_link]` attribute on name resolution](https://github.com/rust-lang/rust/pull/92034)
* [disposition: merge] [Tracking Issue for Stdin::lines, Stdin::split forwarder methods](https://github.com/rust-lang/rust/issues/87096)
* [disposition: merge] [Tracking issue for Result::cloned, Result::cloned_err, Result::copied, Result::copied_err](https://github.com/rust-lang/rust/issues/63168)
* [disposition: merge] [Remove unnecessary bounds for some Hash{Map,Set} methods](https://github.com/rust-lang/rust/pull/91593)

### [New RFCs](https://github.com/rust-lang/rfcs/pulls)

* *No new RFCs were published this week.*

## Upcoming Events

Rusty Events between 12/29/2021 - 1/31/2022 🦀

### Online

* [January 5, 2022 | Indianapolis, IN, US | **Indy.rs - with Social Distancing** | Indy Rust](https://www.meetup.com/indyrs/events/qwtdjsydccbhb/)
* [January 6, 2022 | Cardiff, UK | **Rust Book Study Session - Automated Tests & Building a Command Line Program** | Rust and C++ Cardiff](https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/282667031/)
* [January 6, 2022 | Nürnberg, DE | **Rust Nürnberg online #8**| Rust Nuremberg](https://www.meetup.com/rust-noris/events/282344613/)
* [January 8, 2022 | Various cities | **Rust GameDev Monthly Meetup** | Rust GameDev](https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com)
* [January 11, 2022 | Dallas, TX, US | **Second Tuesday Meetup**| Dallas Rust](https://www.meetup.com/Dallas-Rust/events/vqtjcsydccbpb/)
* [January 11, 2022 | Seattle, WA, US | **Monthly meetup** | Seattle Rust Meetup](https://www.meetup.com/Seattle-Rust-Meetup/events/gskksrydccbpb/)
* [January 12, 2022 | Boulder, CO, US | **Monthly Meetup** | Boulder Elixir and Rust](https://www.meetup.com/boulder-elixir-rust/events/zvxcsrydccbqb/)
* [January 12, 2022 | Los Angeles, CA, US | **Live Coding Session - Mob Programming a Rust Code Kata [Virtual] Jan. 2022** | Rust Los Angeles](https://www.meetup.com/Rust-Los-Angeles/events/282580016/)
* [January 12, 2022 | Stuttgart, DE | **Rust-Meetup** | Rust Community Stuttgart](https://www.meetup.com/Rust-Community-Stuttgart/events/gjrtqsydccbqb/)
* [January 13, 2022 | Warsaw, PL | **Rust Warsaw #4** | Rust Warsaw](https://www.meetup.com/pl-PL/Rust-Warsaw/events/282879405/)
* [January 18, 2022 | Washington, DC, US| **Mid-month Rustful** | Rust DC](https://www.meetup.com/RustDC/events/vdhxgsydccbxb/)
* [January 19, 2022 | Vancouver, BC, CA | **Rust Study/Hack/Hang-out night** |Vancouver Rust](https://www.meetup.com/Vancouver-Rust/events/nwcmpsydccbzb)
* [January 25, 2022 | Dallas, TX, US | **Last Tuesday Meetup** | Dallas Rust](https://www.meetup.com/Dallas-Rust/events/jqxqwrydccbhc/)

### North America

* [January 6, 2022 | Austin, TX, US | **Rust Lunch** | Rust ATX](https://www.meetup.com/rust-atx/events/282756864/)
* [January 12, 2022 | Atlanta, GA, US | **Grab a beer with fellow Rustaceans** | Rust Atlanta](https://www.meetup.com/Rust-ATL/events/lhpkmsydccbqb/)
* [January 13, 2022 | Columbus, OH, US | **Monthly Meeting** | Columbus Rust Society](https://www.meetup.com/columbus-rs/events/dpkhgrydccbrb/)


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][community] for access.

[calendar]: https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com
[community]: mailto:community-team@rust-lang.org

# Rust Jobs

**The Daily Edit**

* [Rust Developer (Remote)](https://github.com/dailyedit/jobs/blob/master/rust.md)

**Spruce**

* [Software Engineer, Backend (New York, NY, US or Remote)](https://spruce-systems.breezy.hr/p/9fb3b149dc01-software-engineer-backend)
* [Engineering Manager (New York, NY, US or Remote)](https://spruce-systems.breezy.hr/p/495dc657fb6e-engineering-manager)
  
**Parity Technologies**

* [Rust Core Engineer - Solidity Compiler (Solang)](https://grnh.se/a5a5c0a33us)
* [Core Runtime Engineer - Substrate](https://grnh.se/dddd76283us)
* [Multiple other Rust / Blockchain Engineering positions](https://www.parity.io/jobs)

*Tweet us at [@ThisWeekInRust](https://twitter.com/ThisWeekInRust) to get your job offers listed here!*

# Quote of the Week

> One reason we keep certain things as hard errors rather than lints: it establishes a baseline
> that you can safely assume about other people's code, since it can't be turned off. And as a
> result, that baseline can become part of people's mental model of Rust itself, rather than
> something that might or might not be true in any given codebase.
>
> We have to take care to not use that lightly, because that places work on all users of Rust to
> maintain code to that baseline. But there are cases where we do. We don't allow using one integer
> type where another was expected. We don't allow certain operations outside an unsafe block. ...
>
> I think the standard we should apply is asking whether something is part of the baseline that
> people should be able to assume about all Rust code, and if that's worth the tradeoff of requiring
> that baseline of all Rust users.

– [Josh Triplett on rust-internals](https://internals.rust-lang.org/t/lack-of-mut-in-bindings-as-a-deny-by-default-lint/15818/8)

Thanks to [Josh Triplett](https://users.rust-lang.org/t/twir-quote-of-the-week/328/1153) for the self-suggestion!

[Please submit quotes and vote for next week!](https://users.rust-lang.org/t/twir-quote-of-the-week/328)

*This Week in Rust is edited by: [nellshamrell](https://github.com/nellshamrell), [llogiq](https://github.com/llogiq), [cdmistman](https://github.com/cdmistman), [ericseppanen](https://github.com/ericseppanen), [extrawurst](https://github.com/extrawurst), [andrewpollack](https://github.com/andrewpollack), [U007D](https://github.com/U007D), [kolharsam](https://github.com/kolharsam), [joelmarcey](https://github.com/joelmarcey), [mariannegoldin](https://github.com/mariannegoldin).*

*Email list hosting is sponsored by [The Rust Foundation](https://foundation.rust-lang.org/)*

<small>[Discuss on r/rust](https://www.reddit.com/r/rust/comments/rrh9fj/this_week_in_rust_423/)</small>
