Rust <h2>Official Resources</h2> <ul> <li><a href="https://www.rust-lang.org">Official Website</a></li> <li><a href="https://blog.rust-lang.org/">Official Blog</a></li> <li><a href="https://this-week-in-rust.org/">This Week In Rust</a></li> <li><a href="https://www.rust-lang.org/install.html">Installers</a></li> <li><a href="https://github.com/rust-lang/">Source Code</a></li> <li><a href="https://github.com/rust-lang/rust/issues">Bug Tracker</a></li> </ul> http://127.0.0.1:3001/inn/2 2023-03-28T00:00:00+00:00 Announcing Rust 1.68.2 freedit 2023-03-28 2023-03-28 46 <p>The Rust team has published a new point release of Rust, 1.68.2. Rust is a programming language that is empowering everyone to build reliable and efficient software.</p> <p>If you have a previous version of Rust installed via rustup, you can get 1.68.2 with:</p> <pre><code>rustup update stable </code></pre> <p>If you don't have it already, you can <a href="https://www.rust-lang.org/install.html">get <code>rustup</code></a> from the appropriate page on our website, and check out the <a href="https://github.com/rust-lang/rust/blob/stable/RELEASES.md#version-1682-2023-03-28">detailed release notes for 1.68.2</a> on GitHub.</p> <h2><a href="#whats-in-1682-stable" aria-hidden="true" class="anchor" id="whats-in-1682-stable"></a>What's in 1.68.2 stable</h2> <p>Rust 1.68.2 addresses <a href="https://github.blog/2023-03-23-we-updated-our-rsa-ssh-host-key/">GitHub's recent rotation of their RSA SSH host key</a>, which happened on March 24th 2023 after their previous key accidentally leaked:</p> <ul> <li> <p><a href="https://github.com/rust-lang/cargo/pull/11883">GitHub's RSA key bundled in Cargo has been updated</a>, to ensure systems that haven't interacted with GitHub yet won't connect trusting the leaked key.</p> </li> <li> <p><a href="https://github.com/rust-lang/cargo/pull/11889">The leaked key has been hardcoded as revoked in Cargo</a>, to ensure the key won't be used by Cargo even on systems that still trust the key.</p> </li> </ul> <p><a href="https://github.com/rust-lang/cargo/pull/11635">Support for <code>@revoked</code> entries in <code>.ssh/known_hosts</code></a> (along with a better error message when the unsupported <code>@cert-authority</code> entries are used) is also included in Rust 1.68.2, as that change was a pre-requisite for backporting the hardcoded revocation.</p> <p>If you cannot upgrade to Rust 1.68.2, we recommend <a href="https://github.blog/2023-03-23-we-updated-our-rsa-ssh-host-key/#what-you-can-do">following GitHub's instructions</a> on updating the trusted keys in your system. Note that the keys bundled in Cargo are only used if no trusted key for <code>github.com</code> is found on the system.</p> <h3><a href="#contributors-to-1682" aria-hidden="true" class="anchor" id="contributors-to-1682"></a>Contributors to 1.68.2</h3> <p>Many people came together to create Rust 1.68.2. We couldn't have done it without all of you. <a href="https://thanks.rust-lang.org/rust/1.68.2/">Thanks!</a></p> Announcing Rust 1.68.1 freedit 2023-03-23 2023-03-23 42 <p>The Rust team has published a new point release of Rust, 1.68.1. Rust is a programming language that is empowering everyone to build reliable and efficient software.</p> <p>If you have a previous version of Rust installed via rustup, you can get 1.68.1 with:</p> <pre><code>rustup update stable </code></pre> <p>If you don't have it already, you can <a href="https://www.rust-lang.org/install.html">get <code>rustup</code></a> from the appropriate page on our website, and check out the <a href="https://github.com/rust-lang/rust/blob/stable/RELEASES.md#version-1681-2023-03-23">detailed release notes for 1.68.1</a> on GitHub.</p> <h2><a href="#whats-in-1681-stable" aria-hidden="true" class="anchor" id="whats-in-1681-stable"></a>What's in 1.68.1 stable</h2> <p>Rust 1.68.1 stable primarily contains a change to how Rust's CI builds the Windows MSVC compiler, no longer enabling LTO for the Rust code. This led to a <a href="https://github.com/rust-lang/rust/issues/109067">miscompilation</a> that the Rust team is debugging, but in the meantime we're reverting the change to enable LTO.</p> <p>This is currently believed to have no effect on wider usage of ThinLTO. The Rust compiler used an unstable flag as part of the build process to enable ThinLTO despite compiling to a dylib.</p> <p>There are a few other regression fixes included in the release:</p> <ul> <li><a href="https://github.com/rust-lang/rust/pull/109111/">Fix building the compiler with <code>--enable-local-rust</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/109156">Treat <code>$prefix-clang</code> as <code>clang</code> in linker detection code</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108162">Fix a panic in the compiler</a></li> </ul> <h3><a href="#contributors-to-1681" aria-hidden="true" class="anchor" id="contributors-to-1681"></a>Contributors to 1.68.1</h3> <p>Many people came together to create Rust 1.68.1. We couldn't have done it without all of you. <a href="https://thanks.rust-lang.org/rust/1.68.1/">Thanks!</a></p> This Week in Rust 487 freedit 2023-03-22 2023-03-22 41 <p>Hello and welcome to another issue of <em>This Week in Rust</em>! <a href="https://www.rust-lang.org/">Rust</a> 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? Tag us at <a href="https://twitter.com/ThisWeekInRust">@ThisWeekInRust</a> on Twitter or <a href="https://mastodon.social/@thisweekinrust">@ThisWeekinRust</a> on mastodon.social, or <a href="https://github.com/rust-lang/this-week-in-rust">send us a pull request</a>. Want to get involved? <a href="https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md">We love contributions</a>.</p> <p><em>This Week in Rust</em> is openly developed <a href="https://github.com/rust-lang/this-week-in-rust">on GitHub</a>. If you find any errors in this week's issue, <a href="https://github.com/rust-lang/this-week-in-rust/pulls">please submit a PR</a>.</p> <h3 id="foundation"><a class="toclink" href="#foundation">Foundation</a></h3> <ul> <li><a href="https://foundation.rust-lang.org/news/welcoming-software-engineer-adam-harvey-to-the-rust-foundation-team/">Welcoming Software Engineer Adam Harvey to the Rust Foundation Team</a></li> <li><a href="https://foundation.rust-lang.org/news/new-slsa-survey-reveals-real-world-developer-approaches-to-software-supply-chain-security/">New SLSA++ Survey Reveals Real-World Developer Approaches to Software Supply Chain Security</a></li> </ul> <h3 id="newsletters"><a class="toclink" href="#newsletters">Newsletters</a></h3> <ul> <li><a href="https://rust-osdev.com/this-month/2023-02/">This Month in Rust OSDev: February 2023 | Rust OSDev</a></li> </ul> <h3 id="projecttooling-updates"><a class="toclink" href="#projecttooling-updates">Project/Tooling Updates</a></h3> <ul> <li><a href="https://fiberplane.com/blog/autometrics-rs-0-3-defining-service-level-objectives-in-rust-source-code">autometrics 0.3: Defining Service-Level Objectives (SLOs) in Rust Source Code</a></li> <li><a href="https://typst.app/blog/2023/beta-oss-launch">Typst starts its public beta test and goes open source</a></li> <li><a href="https://www.memorysafety.org/blog/gary-guo-klint-rust-tools/">Klint: Compile-time Detection of Atomic Context Violations for Kernel Rust Code</a></li> <li><a href="https://rust-analyzer.github.io/thisweek/2023/03/20/changelog-173.html">rust-analyzer changelog #173</a></li> <li><a href="https://blog.gitea.io/2023/03/gitea-1.19.0-is-released/">Gitea 1.19.0 is released</a></li> <li><a href="https://www.fornjot.app/blog/weekly-release/2023-w12/">Fornjot (code-first CAD in Rust) - Weekly Release - Finished!</a></li> <li><a href="https://docs.rs/activitypub_federation">activitypub-federation 0.4.0: Major rewrite with improvements to usability and documentation</a></li> <li><a href="https://quickwit.io/blog/quickwit-0.5">Quickwit 0.5: Distributed tracing with Open Telemetry and Jaeger, VRL, Pulsar support, and more...!</a></li> <li><a href="https://www.lpalmieri.com/posts/pavex-progress-report-02/">pavex, a new Rust web framework - Progress report #2</a></li> </ul> <h3 id="observationsthoughts"><a class="toclink" href="#observationsthoughts">Observations/Thoughts</a></h3> <ul> <li><a href="https://smallcultfollowing.com/babysteps/blog/2023/03/15/temporary-lifetimes/">Temporary lifetimes</a></li> <li><a href="https://smallcultfollowing.com/babysteps/blog/2023/03/16/must-move-types/">Must move types</a></li> <li><a href="https://www.ncameron.org/blog/defer-blocks-and-async-drop/">Defer blocks and async drop</a></li> <li><a href="https://tim.mcnamara.nz/post/711821310255349760/template-proposal-to-adopt-rust">A template proposal for adopting Rust at work</a></li> <li><a href="https://without.boats/blog/patterns-and-abstractions/">Patterns &amp; Abstractions</a></li> <li><a href="https://without.boats/blog/const-as-an-auto-trait/">Const as an auto trait</a></li> <li><a href="https://blog.nilstrieb.dev/posts/item-patterns-and-struct-else/">Item Patterns And Struct Else</a></li> <li><a href="https://blog.adamchalmers.com/why-rust-on-backend/">Why use Rust on the backend?</a></li> <li><a href="https://www.thecodedmessage.com/posts/logging/">The Importance of Logging</a></li> <li><a href="https://rusty-ferris.pages.dev/blog/asref-vs-borrow-trait/">AsRef vs Borrow trait (ft. ChatGPT)</a></li> <li>[audio] <a href="https://rustacean-station.org/episode/alexander-lopatin/">Cargo Limit with Alexander Lopatin :: Rustacean Station</a></li> <li>[video] <a href="https://www.youtube.com/watch?v=4KtotxNAwME">The Truth about Rust/WebAssembly Performance</a></li> </ul> <h3 id="rust-walkthroughs"><a class="toclink" href="#rust-walkthroughs">Rust Walkthroughs</a></h3> <ul> <li><a href="https://blog.logrocket.com/using-cow-rust-efficient-memory-utilization/">Using Cow in Rust for efficient memory utilization</a></li> <li><a href="https://apollolabsblog.hashnode.dev/stm32f4-embedded-rust-at-the-pac-creating-hardware-abstractions">STM32F4 Embedded Rust at the PAC: Creating Hardware Abstractions</a></li> <li><a href="https://apollolabsblog.hashnode.dev/stm32f4-embedded-rust-at-the-pac-gpio-interrupts">STM32F4 Embedded Rust at the PAC: GPIO Interrupts</a></li> <li><a href="https://www.arunma.com/2023/03/19/build-your-own-counting-bloom-filter-in-rust/">Build your own Counting Bloom Filter</a></li> <li>[video] <a href="https://www.youtube.com/watch?v=xUH-4y92jPg">Setting up CI and property testing for a Rust crate</a></li> </ul> <h3 id="research"><a class="toclink" href="#research">Research</a></h3> <ul> <li><a href="https://arxiv.org/abs/2303.05491">Verus: Verifying Rust Programs using Linear Ghost Types</a></li> <li><a href="https://arxiv.org/abs/2303.10515">Ownership guided C to Rust translation</a></li> <li><a href="https://tweedegolf.nl/en/blog/88/data-oriented-design">Optimizing a parser/compiler with data-oriented design: a case study</a></li> </ul> <h3 id="miscellaneous"><a class="toclink" href="#miscellaneous">Miscellaneous</a></h3> <ul> <li><a href="https://xcp-ng.org/blog/2023/03/17/bringing-rust-to-the-xen-project/">Bringing Rust to the Xen Project</a></li> <li><a href="https://ochagavia.nl/blog/the-birth-of-a-package-manager/">The birth of a package manager [written in Rust ;)]</a></li> </ul> <h2 id="crate-of-the-week"><a class="toclink" href="#crate-of-the-week">Crate of the Week</a></h2> <p>This week's crate is <a href="https://github.com/QuantumBadger/Speedy2D">Speedy2D</a>, a crate offering cross-platform Hardware-accelerated drawing of shapes, images, and text, with an easy to use API.</p> <p>Thanks to <a href="https://users.rust-lang.org/t/crate-of-the-week/2704/1169">Aleksey Kladov</a> for the suggestion!</p> <p><a href="https://users.rust-lang.org/t/crate-of-the-week/2704">Please submit your suggestions and votes for next week</a>!</p> <h2 id="call-for-participation"><a class="toclink" href="#call-for-participation">Call for Participation</a></h2> <p>Always wanted to contribute to open-source projects but did not know where to start? Every week we highlight some tasks from the Rust community for you to pick and get started!</p> <p>Some of these tasks may also have mentors available, visit the task page for more information.</p> <ul> <li><a href="https://github.com/opeolluwa/racoon">racoon - Open Source IAM call for contributors</a></li> <li><a href="https://github.com/build-trust/ockam/issues/4439">Ockam - create clap command to show the details of a secure-channel listener on a node</a></li> <li><a href="https://github.com/build-trust/ockam/issues/4437">Ockam - create clap command to delete an existing Forwarder on a node</a></li> <li><a href="https://github.com/build-trust/ockam/issues/4479">Ockam - ockam run - a single command to run many ockam “create” commands</a></li> </ul> <p>If you are a Rust project owner and are looking for contributors, please submit tasks <a href="https://users.rust-lang.org/t/twir-call-for-participation/4821">here</a>.</p> <h2 id="updates-from-the-rust-project"><a class="toclink" href="#updates-from-the-rust-project">Updates from the Rust Project</a></h2> <p>321 pull requests were <a href="https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2023-03-13..2023-03-20">merged in the last week</a></p> <ul> <li><a href="https://github.com/rust-lang/rust/pull/109181"><code>inherit_overflow</code>: adapt pattern to also work with v0 mangling</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109022"><code>read_buf_exact</code>: on error, all read bytes are appended to the buffer</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108991">add <code>enable-warnings</code> flag for llvm, and disable it by default</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109003">add <code>useless_anonymous_reexport</code> lint</a></li> <li><a href="https://github.com/rust-lang/rust/pull/105793">add note for mismatched types because of circular dependencies</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109222">do not ICE for unexpected lifetime with ConstGeneric rib</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109105">don't ICE for late-bound consts across <code>AnonConstBoundary</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/109212">don't suggest similar method when unstable</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109301">fix ICE in <code>custom-test-frameworks</code> feature</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109370">fix ClashingExternDeclarations lint ICE</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109116">emit diagnostic when calling methods on the unit type in method chains</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109035">ensure <code>ptr::read</code> gets all the same LLVM <code>load</code> metadata that dereferencing does</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109102">erase escaping late-bound regions when probing for ambiguous associated types</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109158">error-msg: expand suggestion for <code>unused_def</code> lint</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108971">error-msg: impl better suggestion for <code>E0532</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/109101">fall back to old metadata computation when type references errors</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108815">fast path for <code>process_obligations</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/109277">fix <code>generics_of</code> for impl's RPITIT (Return Position Impl Trait In Trait) synthesized associated type</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109238">fix generics mismatch errors for RPITITs on -Zlower-impl-trait-in-trait-to-assoc-ty</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109198">install projection from RPITIT to default trait method opaque correctly</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108923">make fns from other crates with RPITIT work for <code>-Zlower-impl-trait-in-trait-to-assoc-ty</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/108909">fix object safety checks for new RPITITs</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109156">fix linker detection for clang with prefix</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106824">flatten/inline <code>format_args!()</code> and (string and int) literal arguments into <code>format_args!()</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/109324">implement <code>FixedSizeEncoding</code> for <code>UnusedGenericParams</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/108282">implement checked <code>Shl</code>/<code>Shr</code> at MIR building</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109364">only expect a GAT const param for <code>type_of</code> of GAT const arg</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109248">pass the right HIR back from <code>get_fn_decl</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/104833">remove <code>identity_future</code> indirection</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108958">remove box expressions from HIR</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107270">replace ZST operands and debuginfo by constants</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109136">simplify proc macro signature validity check</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109171">some cleanups in our normalization logic</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109251">suggest surrounding the macro with <code>{}</code> to interpret as a statement</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109109">use <code>unused_generic_params</code> from crate metadata</a></li> <li><a href="https://github.com/rust-lang/miri/pull/2787">miri: move reject with isolation logic in fcntl</a></li> <li><a href="https://github.com/rust-lang/miri/pull/2785">miri: tree borrows</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106505">properly allow macro expanded <code>format_args</code> invocations to use captures</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108524">optimize dep node backtrace and ignore fatal errors</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109235">fallback to lstat when stat fails on Windows</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109288">stabilise <code>unix_socket_abstract</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/108419">stabilize <code>atomic_as_ptr</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/109085">use index based drop loop for slices and arrays</a></li> <li><a href="https://github.com/rust-lang/rust/pull/104100">allow using <code>Range</code> as an <code>Iterator</code> in const contexts</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11839">cargo: accurately show status when downgrading dependencies</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11859">cargo: add <code>--ignore-rust-version</code> flag to cargo install</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11713">cargo: add more information to wait-for-publish</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11855">cargo: align semantics of generated vcs ignore files</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11824">cargo: handle case mismatches when looking up env vars in the Config snapshot</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109266">rustdoc: correctly merge import's and its target's docs in one more case</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109139">rustdoc: docFS: replace rayon with threadpool and enable it for all targets</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109331">rustdoc: implement bag semantics for function parameter search</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10481">clippy: add <code>allow_attribute</code> lint</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10483">clippy: new lint to detect <code>&amp;std::path::MAIN_SEPARATOR.to_string()</code></a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10350">clippy: enhance <code>ifs_same_cond</code> to warn same immutable method calls as well</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10499">clippy: fix <code>almost_swapped</code> false positive (<code>let mut a = b; a = a</code>)</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10502">clippy: fix <code>almost_swapped</code>: Ignore external macros</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10456">clippy: issue function modifiers in the right order in <code>manual_async_fn</code> lint</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14281">rust-analyzer: add an autofix for inserting an unsafe block to missing unsafe diagnostic</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/13789">rust-analyzer: prioritize missing variants in match pattern completions</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14337">rust-analyzer: allow the status bar item to be clicked again</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14355">rust-analyzer: fix reference completions being emitted in places other than argument lists</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14348">rust-analyzer: fix rustc proc-macro handling being broken on the rustc workspace itself</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14349">rust-analyzer: fix visibility resolution not respecting parent blocks</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14338">rust-analyzer: only skip adjustment hints for block, if and match expressions for reborrows</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/13994">rust-analyzer: lint incoherent inherent impls</a></li> </ul> <h3 id="rust-compiler-performance-triage"><a class="toclink" href="#rust-compiler-performance-triage">Rust Compiler Performance Triage</a></h3> <p>A mixed week, with some nice wins, but also at least two PR's that were subsequently reverted, such as the upgrade to LLVM 16. We do want to note PR <a href="https://github.com/rust-lang/rust/pull/108944">#108944</a>, which cut down on crate metadata, binary sizes, and was an overall win on execution time for many benchmarks.</p> <p>Triage done by <strong>@pnkfelix</strong>. Revision range: <a href="https://perf.rust-lang.org/?start=0058748944abb3282aba0e0a74823c6411703565&amp;end=ef03fda339923e659d3d3ca3321de887316d2807&amp;absolute=false&amp;stat=instructions%3Au">00587489..ef03fda3</a></p> <p>1 Regressions, 4 Improvements, 11 Mixed; 2 of them in rollups 37 artifact comparisons made in total</p> <p><a href="https://github.com/rust-lang/rustc-perf/blob/master/triage/2023-03-21.md">Full report here</a></p> <h3 id="approved-rfcs"><a class="toclink" href="#approved-rfcs"><a href="https://github.com/rust-lang/rfcs/commits/master">Approved RFCs</a></a></h3> <p>Changes to Rust follow the Rust <a href="https://github.com/rust-lang/rfcs#rust-rfcs">RFC (request for comments) process</a>. These are the RFCs that were approved for implementation this week:</p> <ul> <li><em>No RFCs were approved this week.</em></li> </ul> <h3 id="final-comment-period"><a class="toclink" href="#final-comment-period">Final Comment Period</a></h3> <p>Every week, <a href="https://www.rust-lang.org/team.html">the team</a> announces the 'final comment period' for RFCs and key PRs which are reaching a decision. Express your opinions now.</p> <h4 id="rfcs"><a class="toclink" href="#rfcs"><a href="https://github.com/rust-lang/rfcs/labels/final-comment-period">RFCs</a></a></h4> <ul> <li>[disposition: merge] <a href="https://github.com/rust-lang/rfcs/pull/3391">RFC: result_ffi_guarantees</a></li> </ul> <h4 id="tracking-issues-prs"><a class="toclink" href="#tracking-issues-prs"><a href="https://github.com/rust-lang/rust/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc">Tracking Issues &amp; PRs</a></a></h4> <ul> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/109010">Initial support for return type notation (RTN)</a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/108629">rustdoc: add support for type filters in arguments and generics</a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/108576">rustdoc: run more HIR validation to mirror rustc</a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/108080">Add a builtin FnPtr trait that is implemented for all function pointers</a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/104299">Clarify stability guarantee for lifetimes in enum discriminants</a></li> </ul> <h3 id="new-and-updated-rfcs"><a class="toclink" href="#new-and-updated-rfcs"><a href="https://github.com/rust-lang/rfcs/pulls">New and Updated RFCs</a></a></h3> <ul> <li><em>No New or Updated RFCs were created this week.</em></li> </ul> <h3 id="call-for-testing"><a class="toclink" href="#call-for-testing"><a href="https://github.com/rust-lang/rfcs/issues?q=label%3Acall-for-testing">Call for Testing</a></a></h3> <p>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:</p> <ul> <li><em>No RFCs issued a call for testing this week.</em></li> </ul> <p>If you are a feature implementer and would like your RFC to appear on the above list, add the new <code>call-for-testing</code> label to your RFC along with a comment providing testing instructions and/or guidance on which aspect(s) of the feature need testing.</p> <h2 id="upcoming-events"><a class="toclink" href="#upcoming-events">Upcoming Events</a></h2> <p>Rusty Events between 2023-03-22 - 2023-04-19 🦀</p> <h3 id="virtual"><a class="toclink" href="#virtual">Virtual</a></h3> <ul> <li>2023-03-22 | Virtual (Richmond, VA, US) | <a href="https://www.meetup.com/rustaceans-rva/">Rustaceans RVA</a><ul> <li><a href="https://www.meetup.com/rustaceans-rva/events/291963911/"><strong>Rustaceans RVA - March Meetup</strong></a></li> </ul> </li> <li>2023-03-27 | Virtual | <a href="https://www.eventbrite.com/cc/rfmig-87969">Rust Formal Methods Interest Group</a><ul> <li><a href="https://www.eventbrite.com/e/flux-ergonomic-verification-of-rust-programs-with-liquid-types-tickets-577742873487?aff=ebdssbonlinesearch"><strong>Flux: Ergonomic Verification of Rust Programs with Liquid Types</strong></a></li> </ul> </li> <li>2023-03-28 | Virtual (Berlin, DE) | <a href="https://www.meetup.com/opentechschool-berlin/">Berline.rs - OpenTechSchool Berlin</a><ul> <li><a href="https://www.meetup.com/opentechschool-berlin/events/292113239/"><strong>Rust Hack and Learn</strong></a></li> </ul> </li> <li>2023-03-28 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/dallas-rust/">Dallas Rust</a><ul> <li><a href="https://www.meetup.com/dallas-rust/events/qndgwsyfcfblc/"><strong>Last Tuesday</strong></a></li> </ul> </li> <li>2023-03-28 | Virtual (Redmond, WA, US) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/291677113/"><strong>Crack code interview problems in Rust: S2 Ep3</strong></a></li> </ul> </li> <li>2023-03-29 | Virtual (Cardiff, UK) | <a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/">Rust and C++ Cardiff</a><ul> <li><a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/291892487/"><strong>Writing your own rust 'book' with mdBook</strong></a></li> </ul> </li> <li>2023-03-31 | Virtual (Tunis, TN) | <a href="https://www.meetup.com/rust-tunisia/">Rust Tunisia</a><ul> <li><a href="https://www.meetup.com/rust-tunisia/events/292402446/"><strong>Rust Meetup Tunisia - Volume I, Number III</strong></a></li> </ul> </li> <li>2023-04-04 | Virtual (Buffalo, NY, US) | <a href="https://www.meetup.com/buffalo-rust-meetup/">Buffalo Rust Meetup</a><ul> <li><a href="https://www.meetup.com/buffalo-rust-meetup/events/lsjbbtyfcgbgb/"><strong>Buffalo Rust User Group, First Tuesdays</strong></a></li> </ul> </li> <li>2023-04-05 | Virtual (Indianapolis, IN, US) | <a href="https://www.meetup.com/indyrs">Indy Rust</a><ul> <li><a href="https://www.meetup.com/indyrs/events/291967741/"><strong>Indy.rs - with Social Distancing</strong></a></li> </ul> </li> <li>2023-04-05 | Virtual (Stuttgart, DE) | <a href="https://www.meetup.com/rust-community-stuttgart">Rust Community Stuttgart</a><ul> <li><a href="https://www.meetup.com/rust-community-stuttgart/events/dvvtvsyfcgbhb/"><strong>Rust-Meetup</strong></a></li> </ul> </li> <li>2023-04-11 | Virtual (Berlin, DE) | <a href="https://www.meetup.com/opentechschool-berlin/">Berline.rs - OpenTechSchool Berlin</a><ul> <li><a href="https://www.meetup.com/opentechschool-berlin/events/292236794/"><strong>Rust Hack and Learn</strong></a></li> </ul> </li> <li>2023-04-11 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/dallas-rust/">Dallas Rust</a><ul> <li><a href="https://www.meetup.com/dallas-rust/events/vndgwsyfcgbpb/"><strong>Second Tuesday</strong></a></li> </ul> </li> <li>2023-04-11 | Virtual | <a href="https://www.eventbrite.com/cc/rust-live-1876809">Rust Live</a><ul> <li><a href="https://www.eventbrite.com/e/rust-live-asynchronous-rust-tickets-575865518267?aff=ebdssbonlinesearch&amp;keep_tld=1"><strong>Rust Live: Asynchronous Rust</strong></a></li> </ul> </li> <li>2023-04-18 | Virtual (Washington, DC, US) | <a href="https://www.meetup.com/rustdc/">Rust DC</a><ul> <li><a href="https://www.meetup.com/rustdc/events/291830834/"><strong>Mid-month Rustful—Introducing duplicate! and the peculiarities of proc macros</strong></a></li> </ul> </li> <li>2023-04-19 | Virtual (Vancouver, BC, CA) | <a href="https://www.meetup.com/vancouver-rust/-0">Vancouver Rust</a><ul> <li><a href="https://www.meetup.com/vancouver-rust/events/lqkkctyfcgbzb/"><strong>Rust Study/Hack/Hang-out</strong></a></li> </ul> </li> </ul> <h3 id="europe"><a class="toclink" href="#europe">Europe</a></h3> <ul> <li>2023-03-28 | Zurich, CH | <a href="https://www.meetup.com/de-DE/rust-zurich/">Rust Zurich</a><ul> <li><a href="https://www.meetup.com/de-DE/rust-zurich/events/291449557/"><strong>High performance concurrent data structures in Rust - March Meetup</strong></a></li> </ul> </li> <li>2023-03-29 | Paris, FR | <a href="https://www.meetup.com/rust-paris/">Rust Paris</a><ul> <li><a href="https://www.meetup.com/rust-paris/events/291963747/"><strong>Rust Paris meetup #57</strong></a></li> </ul> </li> <li>2023-04-04 | Berlin, DE | <a href="https://berline.rs">Berline.rs</a><ul> <li><a href="https://berline.rs/2023/04/04/rust-and-tell-goodbye-edition.html"><strong>Rust and Tell - Goodbye👋 Edition</strong></a></li> </ul> </li> <li>2023-04-06 | Lyon, FR | <a href="https://www.meetup.com/fr-FR/rust-lyon/">Rust Lyon</a><ul> <li><a href="https://www.meetup.com/fr-FR/rust-lyon/events/292283973/"><strong>Rust Lyon Meetup #3</strong></a></li> </ul> </li> <li>2023-04-19 | Zurich, CH | <a href="https://www.meetup.com/de-DE/rust-zurich/">Rust Zurich</a><ul> <li><a href="https://www.meetup.com/de-DE/rust-zurich/events/292151879/"><strong>sett: data encryption and transfer made easy(ier)</strong></a></li> </ul> </li> </ul> <h3 id="asia"><a class="toclink" href="#asia">Asia</a></h3> <ul> <li>2023-04-08 | Kyoto, JP | <a href="https://www.meetup.com/kansai-rust/">Kansai Rust</a><ul> <li><a href="https://www.meetup.com/kansai-rust/events/292202435/"><strong>Demystifying Closures</strong></a> </li> </ul> </li> <li>2023-04-12 | Kuala Lumpur, MY | <a href="https://rust-malaysia.github.io/meetup/">Rust Malaysia</a>; <a href="https://t.me/golangmalaysia">Telegram</a><ul> <li><a href="https://www.google.com/calendar/event?eid=MWI0bWJzY21qZTI2NWsyZDgzOG0xb2JkdTkgYXBkOXZtYmMyMmVnZW5tdHU1bDZjNWpiZmNAZw&amp;ctz=America/Los_Angeles"><strong>Rust Meetup Malaysia April 2023: How far is Dioxus from React? by Ivan Tham</strong></a> | <a href="https://goo.gl/maps/w2ogftac6mqpBbvt5">Map</a></li> </ul> </li> </ul> <p>If you are running a Rust event please add it to the <a href="https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com">calendar</a> to get it mentioned here. Please remember to add a link to the event too. Email the <a href="mailto:community-team@rust-lang.org">Rust Community Team</a> for access.</p> <h2 id="jobs"><a class="toclink" href="#jobs">Jobs</a></h2> <!-- Rust Jobs: TWiR has stopped featuring individual job postings. You can read more about this change here: https://github.com/rust-lang/this-week-in-rust/issues/3412 --> <p>Please see the latest <a href="https://www.reddit.com/r/rust/comments/11naac9/official_rrust_whos_hiring_thread_for_jobseekers/">Who's Hiring thread on r/rust</a></p> <h1 id="quote-of-the-week"><a class="toclink" href="#quote-of-the-week">Quote of the Week</a></h1> <blockquote> <p>The generated program is a random sequence of bytes that just happens to take the shape of a seemingly working program by accident. Such is the joy of code that causes UB. You cannot deduce anything from what happens when you execute a program with UB, since that act is by itself meaningless. You need to establish that your program has no UB before making any inference based on what you see the program do after it came out of the compiler.</p> </blockquote> <p>– <a href="https://github.com/rust-lang/miri/issues/2807#issuecomment-1462385947">Ralf Jung on github</a></p> <p>Thanks to <a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328/1381">bugaevc</a> for the suggestion!</p> <p><a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328">Please submit quotes and vote for next week!</a></p> <p><em>This Week in Rust is edited by: <a href="https://github.com/nellshamrell">nellshamrell</a>, <a href="https://github.com/llogiq">llogiq</a>, <a href="https://github.com/cdmistman">cdmistman</a>, <a href="https://github.com/ericseppanen">ericseppanen</a>, <a href="https://github.com/extrawurst">extrawurst</a>, <a href="https://github.com/andrewpollack">andrewpollack</a>, <a href="https://github.com/U007D">U007D</a>, <a href="https://github.com/kolharsam">kolharsam</a>, <a href="https://github.com/joelmarcey">joelmarcey</a>, <a href="https://github.com/mariannegoldin">mariannegoldin</a>, <a href="https://github.com/bennyvasquez">bennyvasquez</a>.</em></p> <p><em>Email list hosting is sponsored by <a href="https://foundation.rust-lang.org/">The Rust Foundation</a></em></p> <p><small><a href="https://www.reddit.com/r/rust/comments/11z992c/this_week_in_rust_487/">Discuss on r/rust</a></small></p> This Week in Rust 486 freedit 2023-03-15 2023-03-15 39 <p>Hello and welcome to another issue of <em>This Week in Rust</em>! <a href="https://www.rust-lang.org/">Rust</a> 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? Tag us at <a href="https://twitter.com/ThisWeekInRust">@ThisWeekInRust</a> on Twitter or <a href="https://mastodon.social/@thisweekinrust">@ThisWeekinRust</a> on mastodon.social, or <a href="https://github.com/rust-lang/this-week-in-rust">send us a pull request</a>. Want to get involved? <a href="https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md">We love contributions</a>.</p> <p><em>This Week in Rust</em> is openly developed <a href="https://github.com/rust-lang/this-week-in-rust">on GitHub</a>. If you find any errors in this week's issue, <a href="https://github.com/rust-lang/this-week-in-rust/pulls">please submit a PR</a>.</p> <h3 id="official"><a class="toclink" href="#official">Official</a></h3> <ul> <li><a href="https://blog.rust-lang.org/2023/03/09/Rust-1.68.0.html">Announcing Rust 1.68.0</a></li> </ul> <h3 id="newsletters"><a class="toclink" href="#newsletters">Newsletters</a></h3> <ul> <li><a href="https://gamedev.rs/news/043/">This Month in Rust GameDev #43 - February 2023</a></li> </ul> <h3 id="projecttooling-updates"><a class="toclink" href="#projecttooling-updates">Project/Tooling Updates</a></h3> <ul> <li><a href="https://intellij-rust.github.io/2023/03/13/changelog-190.html">IntelliJ Rust Changelog #190</a></li> <li><a href="https://rust-analyzer.github.io/thisweek/2023/03/13/changelog-172.html">rust-analyzer changelog #172</a></li> <li><a href="https://blog.antoyo.xyz/rustc_codegen_gcc-progress-report-21">rustc_codegen_gcc: Progress Report #21</a></li> <li><a href="https://www.fornjot.app/blog/weekly-release/2023-w11/">Fornjot (code-first CAD in Rust) - Weekly Release - Thoroughly Mediocre</a></li> <li><a href="https://www.reddit.com/r/rust/comments/11q56ey/rust_insight_an_interactive_book_for_practicing/">Rust Insight! - an interactive book for practicing Rust</a></li> <li><a href="https://github.com/lipanski/mockito/releases/tag/1.0.0">Mockito, the HTTP mocking library for Rust, goes 1.0</a></li> <li><a href="https://www.memorysafety.org/blog/gary-guo-klint-rust-tools/">Klint: Compile-time Detection of Atomic Context Violations for Kernel Rust Code</a></li> <li><a href="https://zed.dev/blog/videogame">Leveraging Rust and the GPU to render user interfaces at 120 FPS</a></li> </ul> <h3 id="observationsthoughts"><a class="toclink" href="#observationsthoughts">Observations/Thoughts</a></h3> <ul> <li><a href="http://smallcultfollowing.com/babysteps/blog/2023/03/12/to-async-trait-or-just-to-trait/">To async trait or just to trait</a></li> <li><a href="https://brson.github.io/2023/03/12/move-on-llvm">Writing an LLVM backend for the Move language in Rust</a></li> <li><a href="https://apollolabsblog.hashnode.dev/stm32f4-embedded-rust-at-the-pac-uart-communication">STM32F4 Embedded Rust at the PAC: UART Communication</a></li> <li><a href="https://medium.com/@altaaar/a-guide-to-declarative-macros-in-rust-6f006fdaeebf">A Guide to Declarative Macros in Rust</a></li> <li><a href="https://cosmichorror.dev/posts/speeding-up-sqlx-compile-times/">SQLx Compile Time Woes</a></li> <li><a href="https://cloak.software/blog/i-built-startup-in-rust/">I built a startup in Rust, I would do it again.</a></li> <li><a href="https://blog.guillaume-gomez.fr/articles/2023-03-08+rustdoc+and+the+re-exports">rustdoc and the re-exports</a></li> <li><a href="https://without.boats/blog/the-registers-of-rust/">The registers of Rust</a></li> <li><a href="https://laplab.me/posts/switching-from-cpp-to-rust/">Switching From C++ to Rust</a></li> <li><a href="https://immunant.com/blog/2023/03/lifting/">Emitting Safer Rust with C2Rust</a></li> <li><a href="https://maxisom.me/posts/applying-5-million-pixel-updates-per-second">Applying 5 million pixel updates per second with Rust &amp; wgpu</a></li> <li><a href="https://www.scylladb.com/2023/03/08/rust-in-the-real-world-super-fast-data-ingestion-using-scylladb/">Rust in the Real World: Super Fast Data Ingestion Using ScyllaDB</a></li> <li><a href="https://blog.mithrilsecurity.io/bastionlab-rust-privacy-framework-built-for-data-science/">Rust: How We Built a Privacy Framework for Data Science</a></li> <li><a href="https://metalbear.co/blog/writing-a-kubernetes-operator/">Writing a Kubernetes Operator</a></li> <li><a href="https://fiberplane.com/blog/getting-past-ampersand-driven-development-in-rust">Getting Past “Ampersand-Driven Development” in Rust</a></li> <li>(video) <a href="https://www.youtube.com/watch?v=hGdYBEkQJPU">Teaching Embedded Rust</a></li> </ul> <h3 id="rust-walkthroughs"><a class="toclink" href="#rust-walkthroughs">Rust Walkthroughs</a></h3> <ul> <li><a href="https://medium.com/@lindblomdev/beginning-rust-by-exploring-a-very-basic-axum-web-api-in-detail-1f4c87e422e0?sk=6518c70d4704afe90e6b3b81bdf7ebf8">Beginning Rust: by exploring a very basic Axum web API in detail</a></li> <li><a href="https://blog.railway.app/p/rust-cli-rewrite">Rewriting the CLI in Rust: Was It Worth It?</a></li> <li><a href="https://dev.to/ciscoemerge/trace-through-a-kafka-cluster-with-rust-and-opentelemetry-2jln">Trace through a Kafka Cluster using OpenTelemetry</a></li> <li><a href="https://rustwebdevelopment.com/blog/tour-http/">Tour of a HTTP request in Rust</a></li> </ul> <h3 id="miscellaneous"><a class="toclink" href="#miscellaneous">Miscellaneous</a></h3> <ul> <li><a href="https://vercel.com/blog/turborepo-migration-go-rust">Why Turborepo is migrating from Go to Rust</a></li> <li><a href="https://zed.dev/blog/videogame">Leveraging Rust and the GPU to render user interfaces at 120 FPS</a></li> <li><a href="https://www.infineon.com/cms/en/about-infineon/press/market-news/2023/INFATV202303-076.html">Automotive Safety and Cybersecurity: Infineon's AURIX™ TC3xx, TC4x, TRAVEO™ T2G &amp; PSoC families of microcontrollers support Rust - Infineon Technologies</a></li> <li>[video] <a href="https://www.youtube.com/watch?v=Zz296fdB8rc">Bestagon Mesh Generation: Waveform Collapse in Bevy</a></li> <li>[video] <a href="https://www.youtube.com/watch?v=dztIToTf8Yc">Bye WebSockets! Boost Web Comms with Rust and WebTransport</a></li> <li>[video] <a href="https://www.youtube.com/watch?v=4TjEo-gDgAg">Learn Bevy 0.10 - EP4 - Enemy Movement, Collisions, Sound Effects, Despawning</a></li> <li>[video] <a href="https://www.youtube.com/watch?v=BaSgkGIgRxc">Rust Releases! Rust 1.68.0</a></li> <li>[video] <a href="https://www.youtube.com/watch?v=Q3sLSihQ0vw">Interview and AMA with Josh Triplett</a></li> <li>[audio] <a href="https://www.youtube.com/watch?v=F4s0arp9WvM">Q&amp;A with Mara Bos</a></li> </ul> <h2 id="crate-of-the-week"><a class="toclink" href="#crate-of-the-week">Crate of the Week</a></h2> <p>This week's crate is <a href="https://docs.rs/duplicate">duplicate</a>, a proc macro crate for easy parametric code duplication.</p> <p>Thanks to <a href="https://users.rust-lang.org/t/crate-of-the-week/2704/1164">Anton Fetisov</a> for the suggestion!</p> <p><a href="https://users.rust-lang.org/t/crate-of-the-week/2704">Please submit your suggestions and votes for next week</a>!</p> <h2 id="call-for-participation"><a class="toclink" href="#call-for-participation">Call for Participation</a></h2> <p>Always wanted to contribute to open-source projects but did not know where to start? Every week we highlight some tasks from the Rust community for you to pick and get started!</p> <p>Some of these tasks may also have mentors available, visit the task page for more information.</p> <ul> <li><a href="https://github.com/emanuele-em/man-in-the-middle-proxy/issues/34">man-in-the-middle-proxy - Make order with constants and hard coded parts</a></li> <li><a href="https://github.com/emanuele-em/man-in-the-middle-proxy/issues/33">man-in-the-middle-proxy - pause and play the request</a></li> <li><a href="https://github.com/emanuele-em/man-in-the-middle-proxy/issues/29">man-in-the-middle-proxy - Highlight a request in the list when clicked</a></li> <li><a href="https://github.com/emanuele-em/man-in-the-middle-proxy/issues/32">man-in-the-middle-proxy - add different colors for different request method</a></li> <li><a href="https://github.com/build-trust/ockam/issues/4420">Ockam - Create clap command to show the details of an existing TCP connection on a node</a></li> <li><a href="https://github.com/build-trust/ockam/issues/4436">Ockam - Create clap command to show the details of an existing Forwarder on a node</a></li> <li><a href="https://github.com/build-trust/ockam/issues/4359">Ockam - improve install.sh to install in path</a></li> </ul> <p>If you are a Rust project owner and are looking for contributors, please submit tasks <a href="https://users.rust-lang.org/t/twir-call-for-participation/4821">here</a>.</p> <h2 id="updates-from-the-rust-project"><a class="toclink" href="#updates-from-the-rust-project">Updates from the Rust Project</a></h2> <p>391 pull requests were <a href="https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2023-03-06..2023-03-13">merged in the last week</a></p> <ul> <li><a href="https://github.com/rust-lang/rust/pull/108583">account for binders correctly when adding default RPITIT method assumption</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108542">force parentheses around <code>match</code> expression in binary expression</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106844">allow negative numeric literals in <code>concat!</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/108841">add suggestion to diagnostic when user has array but trait wants slice</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108121">always resolve to universal regions if possible</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108786">check for free regions in MIR validation</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108845">check that a query has not completed and is not executing before starting it</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108855">custom MIR: Support <code>as</code> casts</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108950">directly construct Inherited in typeck</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108803">do not ICE when failing to normalize in <code>ConstProp</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/108790">do not ICE when interpreting a cast between non-monomorphic types</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108834">do not ICE when we have fn pointer <code>Fn</code> obligations with bound vars in the self type</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108178">do not consider <code>&amp;mut *x</code> as mutating <code>x</code> in <code>CopyProp</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/108947">don't even try to combine consts with incompatible types</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108828">emit alias-eq when equating numeric var and projection</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108807">emit the <code>suspicious_auto_trait_impls</code> lint for negative impls as well</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108820">ensure value is on the on-disk cache before returning from <code>ensure()</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/109018">expand on the allocator comment in <code>rustc-main</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/108854">improve errors in case of ident with number at start</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108731">impl better help for <code>.poll()</code> not found on <code>impl Future</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/108930">implement better error for manual impl of <code>Fn*</code> traits</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108794">avoid unnecessary hashing</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108870">fix invalid inlining of reexport of reexport of private item</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109029">gate usages of <code>dyn*</code> and const closures in macros</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108774">greatly improve the error messages when <code>run-make/translation</code> fails</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108949">honor current target when checking conditional compilation values</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108071">implement goal caching with the new solver</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108700">make RPITITs simple cases work when using <code>lower_impl_trait_in_trait_to_assoc_ty</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/104363">make <code>unused_allocation</code> lint against <code>Box::new</code> too</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108294">place binder correctly for arbitrary trait bound suggestion</a></li> <li><a href="https://github.com/rust-lang/rust/pull/105798">relax ordering rules for <code>asm!</code> operands</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108872">strengthen state tracking in const-prop</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108884">tweak illegal <code>Copy</code> impl message</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108879">unconstrained terms should account for infer vars being equated</a></li> <li><a href="https://github.com/rust-lang/chalk/pull/790">fix projection substitution order considering GATs</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108471">remove <code>box_syntax</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/106633">stabilize <code>nonzero_min_max</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/105962">stabilize <code>path_as_mut_os_str</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/107711">stabilize movbe target feature</a></li> <li><a href="https://github.com/rust-lang/rust/pull/95317">add <code>round_ties_even</code> to <code>f32</code> and <code>f64</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/108956">make <code>ptr::from_ref</code> and <code>ptr::from_mut</code> const</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108623">move <code>Option::as_slice</code> to an always-sound implementation</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108708">prevent overflow through <code>Arc::downgrade</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/109026">introduce <code>Rc::into_inner</code>, as a parallel to <code>Arc::into_inner</code></a></li> <li><a href="https://github.com/rust-lang/futures-rs/pull/2712">futures: Add <code>AbortRegistration::handle</code></a></li> <li><a href="https://github.com/rust-lang/futures-rs/pull/2716">futures: Make BiLock strict-provenance compatible</a></li> <li><a href="https://github.com/rust-lang/futures-rs/pull/2607">futures: <code>TryFlattenUnordered</code>: propagate base stream error</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11636">cargo: Adding display of which target failed to compile</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11835">cargo: <code>cargo install --git</code> multiple packages with binaries found hint</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108988">rustdoc: don't crash on <code>crate</code> references in blocks</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108936">rustdoc: don't hide anonymous reexport</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108686">rustdoc: include link on all.html location header</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109011">rustdoc: reduce allocs in <code>FnDecl::inner_full_print</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/107629">rustdoc: sort deprecated items lower in search</a></li> <li><a href="https://github.com/rust-lang/rust/pull/109009">rustdoc: use restricted Damerau-Levenshtein distance for search</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10415">clippy: add <code>collection_is_never_read</code></a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10467">clippy: add <code>let_with_type_underscore</code> lint</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10362">clippy: add <code>missing_assert_message</code> lint</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10448">clippy: add new <code>redundant_async_block</code> lint</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10466">clippy: add the <code>popular-crates</code> binary</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10479">clippy: don't lint <code>manual_clamp</code> in const contexts</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10470">clippy: fix semicolon insertion in <code>match_single_binding</code></a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10420">clippy: improve diagnostic of <code>no_mangle_with_rust_abi</code></a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10359">clippy: include async functions in the <code>len_without_is_empty</code></a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10309">clippy: <code>arithmetic_side_effects</code> fix false positive on shifts</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14297">rust-analyzer: add core lib to <code>proc_macro</code> dependencies</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14316">rust-analyzer: fix stack overflow when derefrencing <code>&amp;!</code></a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14328">rust-analyzer: allow adding extra <code>cargo</code> args when running build scripts</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14291">rust-analyzer: fix multiple definition binding in match to let-else</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14271">rust-analyzer: don't trigger unresolved method/field diagnostics on types containing errors</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14285">rust-analyzer: evaluate consts in <code>path_to_const</code></a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14286">rust-analyzer: fix block defmap not looking into tail expressions for macro calls</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14299">rust-analyzer: fix search not searching bodies of attributed items</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14284">rust-analyzer: highlight unresolved derives as being unresolved</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14282">rust-analyzer: load proc-macros for <code>rustc_private</code> crates</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14300">rust-analyzer: watch both stdout and stderr in flycheck</a></li> </ul> <h3 id="rust-compiler-performance-triage"><a class="toclink" href="#rust-compiler-performance-triage">Rust Compiler Performance Triage</a></h3> <p>A fairly mixed week, with several significant improvements and a few significant regressions. On average, this week saw a slight increase in compile times.</p> <p>Triage done by <strong>@simulacrum</strong>. Revision range: <a href="https://perf.rust-lang.org/?start=8f9e09ac3ef3fa85d23ad6a0c920d49987144b13&amp;end=0058748944abb3282aba0e0a74823c6411703565&amp;absolute=false&amp;stat=instructions%3Au">8f9e09ac..0058748</a></p> <p>4 Regressions, 6 Improvements, 4 Mixed; 2 of them in rollups 39 artifact comparisons made in total</p> <p><a href="https://github.com/rust-lang/rustc-perf/blob/master/triage/2023-03-14.md">Full report here</a></p> <h3 id="approved-rfcs"><a class="toclink" href="#approved-rfcs"><a href="https://github.com/rust-lang/rfcs/commits/master">Approved RFCs</a></a></h3> <p>Changes to Rust follow the Rust <a href="https://github.com/rust-lang/rfcs#rust-rfcs">RFC (request for comments) process</a>. These are the RFCs that were approved for implementation this week:</p> <ul> <li><em>No RFCs were approved this week.</em></li> </ul> <h3 id="final-comment-period"><a class="toclink" href="#final-comment-period">Final Comment Period</a></h3> <p>Every week, <a href="https://www.rust-lang.org/team.html">the team</a> announces the 'final comment period' for RFCs and key PRs which are reaching a decision. Express your opinions now.</p> <h4 id="rfcs"><a class="toclink" href="#rfcs"><a href="https://github.com/rust-lang/rfcs/labels/final-comment-period">RFCs</a></a></h4> <ul> <li><em>No RFCs entered Final Comment Period this week.</em></li> </ul> <h4 id="tracking-issues-prs"><a class="toclink" href="#tracking-issues-prs"><a href="https://github.com/rust-lang/rust/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc">Tracking Issues &amp; PRs</a></a></h4> <ul> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/issues/106894">Tracking Issue for <code>{Arc, Rc}::into_inner</code></a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/108629">rustdoc: add support for type filters in arguments and generics</a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/107880">Lint ambiguous glob re-exports</a></li> </ul> <h3 id="new-and-updated-rfcs"><a class="toclink" href="#new-and-updated-rfcs"><a href="https://github.com/rust-lang/rfcs/pulls">New and Updated RFCs</a></a></h3> <ul> <li>[new] <a href="https://github.com/rust-lang/rfcs/pull/3400">Add a count parameter to the expect attribute</a></li> <li>[new] <a href="https://github.com/rust-lang/rfcs/pull/3399">Allow cfg-attributes in where clauses</a></li> </ul> <h3 id="call-for-testing"><a class="toclink" href="#call-for-testing"><a href="https://github.com/rust-lang/rfcs/issues?q=label%3Acall-for-testing">Call for Testing</a></a></h3> <p>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:</p> <ul> <li><em>No RFCs issued a call for testing this week.</em></li> </ul> <p>If you are a feature implementer and would like your RFC to appear on the above list, add the new <code>call-for-testing</code> label to your RFC along with a comment providing testing instructions and/or guidance on which aspect(s) of the feature need testing.</p> <h2 id="upcoming-events"><a class="toclink" href="#upcoming-events">Upcoming Events</a></h2> <p>Rusty Events between 2023-03-15 - 2023-04-12 🦀</p> <h3 id="virtual"><a class="toclink" href="#virtual">Virtual</a></h3> <ul> <li>2023-03-15 | Virtual (Cardiff, UK) | <a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff">Rust and C++ Cardiff</a><ul> <li><a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/291354288/"><strong>Injecting Rust Hooks into a 1999 game binary (unsafe)</strong></a></li> </ul> </li> <li>2023-03-15 | Virtual (Vancouver, BC, CA) | <a href="https://www.meetup.com/vancouver-rust/">Vancouver Rust</a><ul> <li><a href="https://www.meetup.com/vancouver-rust/events/wqchctyfcfbtb/"><strong>Rust Study/Hack/Hang-out</strong></a></li> </ul> </li> <li>2023-03-16 | Virtual (Raleigh, NC, US) | <a href="https://www.meetup.com/triangle-bitdevs/">Triangle BitDevs</a><ul> <li><a href="https://www.meetup.com/triangle-bitdevs/events/292032273/"><strong>Rust for Bitcoiners</strong></a></li> </ul> </li> <li>2023-03-16 | Virtual (Redmond, WA, US) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/291681809/"><strong>Introduction to WebAssembly (WASM) with Rust and WASMEdge</strong></a></li> </ul> </li> <li>2023-03-16 | Virtual (Stuttgart, DE) | <a href="https://www.meetup.com/rust-community-stuttgart">Rust Community Stuttgart</a><ul> <li><a href="https://www.meetup.com/rust-community-stuttgart/events/291847774/"><strong>Rust-Meetup</strong></a></li> </ul> </li> <li>2023-03-21 | Virtual (Redmond, WA, US) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/291676961/"><strong>Crack code interview problems in Rust: S2 Ep2</strong></a></li> </ul> </li> <li>2023-03-21 | Virtual (Washington, DC, US) | <a href="https://www.meetup.com/rustdc/">Rust DC</a><ul> <li><a href="https://www.meetup.com/rustdc/events/vdhxgsyfcfbcc/"><strong>Mid-month Rustful—Using Category Theory to Parse Command-line Options</strong></a></li> </ul> </li> <li>2023-03-22 | Virtual (Richmond, VA, US) | <a href="https://www.meetup.com/rustaceans-rva/">Rustaceans RVA</a><ul> <li><a href="https://www.meetup.com/rustaceans-rva/events/291963911/"><strong>Rustaceans RVA - March Meetup</strong></a></li> </ul> </li> <li>2023-03-27 | Virtual | <a href="https://www.eventbrite.com/cc/rfmig-87969">Rust Formal Methods Interest Group</a><ul> <li><a href="https://www.eventbrite.com/e/flux-ergonomic-verification-of-rust-programs-with-liquid-types-tickets-577742873487?aff=ebdssbonlinesearch"><strong>Flux: Ergonomic Verification of Rust Programs with Liquid Types</strong></a></li> </ul> </li> <li>2023-03-28 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/dallas-rust/">Dallas Rust</a><ul> <li><a href="https://www.meetup.com/dallas-rust/events/qndgwsyfcfblc/"><strong>Last Tuesday</strong></a></li> </ul> </li> <li>2023-03-28 | Virtual (Redmond, WA, US) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/291677113/"><strong>Crack code interview problems in Rust: S2 Ep3</strong></a></li> </ul> </li> <li>2023-03-29 | Virtual (Cardiff, UK) | <a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/">Rust and C++ Cardiff</a><ul> <li><a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/291892487/"><strong>Writing your own rust 'book' with mdBook</strong></a></li> </ul> </li> <li>2023-04-04 | Virtual (Buffalo, NY, US) | <a href="https://www.meetup.com/buffalo-rust-meetup/">Buffalo Rust Meetup</a><ul> <li><a href="https://www.meetup.com/buffalo-rust-meetup/events/lsjbbtyfcgbgb/"><strong>Buffalo Rust User Group, First Tuesdays</strong></a></li> </ul> </li> <li>2023-04-05 | Virtual (Indianapolis, IN, US) | <a href="https://www.meetup.com/indyrs">Indy Rust</a><ul> <li><a href="https://www.meetup.com/indyrs/events/291967741/"><strong>Indy.rs - with Social Distancing</strong></a></li> </ul> </li> <li>2023-04-05 | Virtual (Stuttgart, DE) | <a href="https://www.meetup.com/rust-community-stuttgart">Rust Community Stuttgart</a><ul> <li><a href="https://www.meetup.com/rust-community-stuttgart/events/dvvtvsyfcgbhb/"><strong>Rust-Meetup</strong></a></li> </ul> </li> <li>2023-04-11 | Virtual | <a href="https://www.eventbrite.com/cc/rust-live-1876809">Rust Live</a><ul> <li><a href="https://www.eventbrite.com/e/rust-live-asynchronous-rust-tickets-575865518267?aff=ebdssbonlinesearch&amp;keep_tld=1"><strong>Rust Live: Asynchronous Rust</strong></a></li> </ul> </li> </ul> <h3 id="europe"><a class="toclink" href="#europe">Europe</a></h3> <ul> <li>2023-03-09 | Basel, CH | <a href="https://www.meetup.com/rust-basel/">Rust Basel</a><ul> <li><a href="https://www.meetup.com/rust-basel/events/291228934/"><strong>Rust Meetup #7</strong></a></li> </ul> </li> <li>2023-03-09 | Delft, NL | <a href="https://www.meetup.com/rust-nederland/">Rust Nederland</a><ul> <li><a href="https://www.meetup.com/rust-nederland/events/291401965/"><strong>Regular track: Embedded Rust</strong></a></li> <li><a href="https://www.meetup.com/rust-nederland/events/291401778/"><strong>Student track: Embedded Rust</strong></a></li> </ul> </li> <li>2023-03-09 | Lyon, FR | <a href="https://www.meetup.com/fr-FR/rust-lyon/">Rust Lyon</a><ul> <li><a href="https://www.meetup.com/fr-FR/rust-lyon/events/291727241/"><strong>Rust Lyon Meetup #2</strong></a></li> </ul> </li> <li>2023-03-15 | Nürnberg, DE | <a href="https://www.meetup.com/rust-noris/">Rust Nuremberg</a><ul> <li><a href="https://www.meetup.com/rust-noris/events/291623203/"><strong>Walk around Embedded World Exhibition</strong></a></li> </ul> </li> <li>2023-03-15 | Trondheim, NO | <a href="https://www.meetup.com/rust-trondheim/">Rust Trondheim</a><ul> <li><a href="https://www.meetup.com/rust-trondheim/events/292085409/"><strong>Rust graphics with nannou</strong></a></li> </ul> </li> <li>2023-03-16 | Paris, FR | <a href="https://www.meetup.com/ocaml-paris/events/">OCaml Users in Paris - OUPS</a><ul> <li><a href="https://www.meetup.com/ocaml-paris/events/291637370/"><strong>OUPS Mars 2023: Creusot a prophetic verifier for Rust -- Xavier Denis</strong></a></li> </ul> </li> <li>2023-03-17 | Stuttgart, DE | <a href="https://www.meetup.com/rust-community-stuttgart">Rust Community Stuttgart</a><ul> <li><a href="https://www.meetup.com/rust-community-stuttgart/events/zmppzsyfcfbwb/"><strong>OnSite Meeting</strong></a></li> </ul> </li> <li>2023-03-28 | Zurich, CH | <a href="https://www.meetup.com/de-DE/rust-zurich/events/291449557/">Rust Zurich</a><ul> <li><a href="https://www.meetup.com/de-DE/rust-zurich/events/291449557/"><strong>High performance concurrent data structures in Rust - March Meetup</strong></a></li> </ul> </li> <li>2023-03-29 | Paris, FR | <a href="https://www.meetup.com/rust-paris/">Rust Paris</a><ul> <li><a href="https://www.meetup.com/rust-paris/events/291963747/"><strong>Rust Paris meetup #57</strong></a></li> </ul> </li> <li>2023-04-04 | Berlin, DE | <a href="https://berline.rs">Berline.rs</a><ul> <li><a href="https://berline.rs/2023/04/04/rust-and-tell-goodbye-edition.html"><strong>Rust and Tell - Goodbye👋 Edition</strong></a></li> </ul> </li> </ul> <h3 id="north-america"><a class="toclink" href="#north-america">North America</a></h3> <ul> <li>2023-03-21 | San Francisco, CA, US | <a href="https://www.meetup.com/san-francisco-rust-study-group/">San Francisco Rust Study Group</a><ul> <li><a href="https://www.meetup.com/san-francisco-rust-study-group/events/vwljctyfcfbcc/"><strong>Rust Hacking in Person</strong></a></li> </ul> </li> </ul> <h3 id="asia"><a class="toclink" href="#asia">Asia</a></h3> <ul> <li>2023-04-08 | Kyoto, JP | <a href="https://www.meetup.com/kansai-rust/">Kansai Rust</a><ul> <li><a href="https://www.meetup.com/kansai-rust/events/292202435/"><strong>Demystifying Closures</strong></a> </li> </ul> </li> </ul> <p>If you are running a Rust event please add it to the <a href="https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com">calendar</a> to get it mentioned here. Please remember to add a link to the event too. Email the <a href="mailto:community-team@rust-lang.org">Rust Community Team</a> for access.</p> <h2 id="jobs"><a class="toclink" href="#jobs">Jobs</a></h2> <!-- Rust Jobs: TWiR has stopped featuring individual job postings. You can read more about this change here: https://github.com/rust-lang/this-week-in-rust/issues/3412 --> <p>Please see the latest <a href="https://www.reddit.com/r/rust/comments/10nmtew/official_rrust_whos_hiring_thread_for_jobseekers/">Who's Hiring thread on r/rust</a></p> <h1 id="quote-of-the-week"><a class="toclink" href="#quote-of-the-week">Quote of the Week</a></h1> <blockquote> <p>The Rust compiler is a thousand unit tests that you don't have to write</p> </blockquote> <p>– <a href="https://cloak.software/blog/i-built-startup-in-rust/">Someone, likely Ian Purton on the Cloak blog</a></p> <p>Thanks to <a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328/1380">Stephan Sokolow</a> for the suggestion!</p> <p><a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328">Please submit quotes and vote for next week!</a></p> <p><em>This Week in Rust is edited by: <a href="https://github.com/nellshamrell">nellshamrell</a>, <a href="https://github.com/llogiq">llogiq</a>, <a href="https://github.com/cdmistman">cdmistman</a>, <a href="https://github.com/ericseppanen">ericseppanen</a>, <a href="https://github.com/extrawurst">extrawurst</a>, <a href="https://github.com/andrewpollack">andrewpollack</a>, <a href="https://github.com/U007D">U007D</a>, <a href="https://github.com/kolharsam">kolharsam</a>, <a href="https://github.com/joelmarcey">joelmarcey</a>, <a href="https://github.com/mariannegoldin">mariannegoldin</a>, <a href="https://github.com/bennyvasquez">bennyvasquez</a>.</em></p> <p><em>Email list hosting is sponsored by <a href="https://foundation.rust-lang.org/">The Rust Foundation</a></em></p> <p><small><a href="https://www.reddit.com/r/rust/comments/11sgz1t/this_week_in_rust_486/">Discuss on r/rust</a></small></p> Announcing Rust 1.68.0 freedit 2023-03-09 2023-03-09 35 <p>The Rust team is happy to announce a new version of Rust, 1.68.0. Rust is a programming language empowering everyone to build reliable and efficient software.</p> <p>If you have a previous version of Rust installed via rustup, you can get 1.68.0 with:</p> <pre><code class="language-console">rustup update stable </code></pre> <p>If you don't have it already, you can <a href="https://www.rust-lang.org/install.html">get <code>rustup</code></a> from the appropriate page on our website, and check out the <a href="https://github.com/rust-lang/rust/blob/master/RELEASES.md#version-1680-2023-03-09">detailed release notes for 1.68.0</a> on GitHub.</p> <p>If you'd like to help us out by testing future releases, you might consider updating locally to use the beta channel (<code>rustup default beta</code>) or the nightly channel (<code>rustup default nightly</code>). Please <a href="https://github.com/rust-lang/rust/issues/new/choose">report</a> any bugs you might come across!</p> <h2><a href="#whats-in-1680-stable" aria-hidden="true" class="anchor" id="whats-in-1680-stable"></a>What's in 1.68.0 stable</h2> <h3><a href="#cargos-sparse-protocol" aria-hidden="true" class="anchor" id="cargos-sparse-protocol"></a>Cargo's sparse protocol</h3> <p>Cargo's &quot;sparse&quot; registry protocol has been stabilized for reading the index of crates, along with infrastructure at <code>https://index.crates.io/</code> for those published in the primary crates.io registry. The prior git protocol (which is still the default) clones a repository that indexes <em>all</em> crates available in the registry, but this has started to hit scaling limitations, with noticeable delays while updating that repository. The new protocol should provide a significant performance improvement when accessing crates.io, as it will only download information about the subset of crates that you actually use.</p> <p>To use the sparse protocol with crates.io, set the environment variable <code>CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse</code>, or edit your <a href="https://doc.rust-lang.org/cargo/reference/config.html"><code>.cargo/config.toml</code> file</a> to add:</p> <pre><code class="language-toml">[registries.crates-io] protocol = &quot;sparse&quot; </code></pre> <p>The sparse protocol is currently planned to become the default for crates.io in the 1.70.0 release in a few months. For more information, please see the prior <a href="https://blog.rust-lang.org/inside-rust/2023/01/30/cargo-sparse-protocol.html">announcement</a> on the Inside Rust Blog, as well as <a href="https://rust-lang.github.io/rfcs/2789-sparse-index.html">RFC 2789</a> and the current <a href="https://doc.rust-lang.org/stable/cargo/reference/registry-index.html#sparse-protocol">documentation</a> in the Cargo Book.</p> <h3><a href="#local-pin-construction" aria-hidden="true" class="anchor" id="local-pin-construction"></a>Local <code>Pin</code> construction</h3> <p>The new <a href="https://doc.rust-lang.org/stable/std/pin/macro.pin.html"><code>pin!</code></a> macro constructs a <code>Pin&lt;&amp;mut T&gt;</code> from a <code>T</code> expression, anonymously captured in local state. This is often called stack-pinning, but that &quot;stack&quot; could also be the captured state of an <code>async fn</code> or block. This macro is similar to some crates, like <a href="https://docs.rs/tokio/1/tokio/macro.pin.html"><code>tokio::pin!</code></a>, but the standard library can take advantage of <code>Pin</code> internals and <a href="https://doc.rust-lang.org/stable/reference/destructors.html#temporary-lifetime-extension">temporary lifetime extension</a> for a more expression-like macro.</p> <pre><code class="language-rust">/// Runs a future to completion. fn block_on&lt;F: Future&gt;(future: F) -&gt; F::Output { let waker_that_unparks_thread = todo!(); let mut cx = Context::from_waker(&amp;waker_that_unparks_thread); // Pin the future so it can be polled. let mut pinned_future = pin!(future); loop { match pinned_future.as_mut().poll(&amp;mut cx) { Poll::Pending =&gt; thread::park(), Poll::Ready(result) =&gt; return result, } } } </code></pre> <p>In this example, the original <code>future</code> will be moved into a temporary local, referenced by the new <code>pinned_future</code> with type <code>Pin&lt;&amp;mut F&gt;</code>, and that pin is subject to the normal borrow checker to make sure it can't outlive that local.</p> <h3><a href="#default-alloc-error-handler" aria-hidden="true" class="anchor" id="default-alloc-error-handler"></a>Default <code>alloc</code> error handler</h3> <p>When allocation fails in Rust, APIs like <code>Box::new</code> and <code>Vec::push</code> have no way to indicate that failure, so some divergent execution path needs to be taken. When using the <code>std</code> crate, the program will print to <code>stderr</code> and abort. As of Rust 1.68.0, binaries which include <code>std</code> will continue to have this behavior. Binaries which do not include <code>std</code>, only including <code>alloc</code>, will now <code>panic!</code> on allocation failure, which may be further adjusted via a <code>#[panic_handler]</code> if desired.</p> <p>In the future, it's likely that the behavior for <code>std</code> will also be changed to match that of <code>alloc</code>-only binaries.</p> <h3><a href="#stabilized-apis" aria-hidden="true" class="anchor" id="stabilized-apis"></a>Stabilized APIs</h3> <ul> <li><a href="https://doc.rust-lang.org/stable/std/pin/macro.pin.html"><code>{core,std}::pin::pin!</code></a></li> <li><a href="https://doc.rust-lang.org/stable/std/primitive.f32.html#impl-From%3Cbool%3E-for-f32"><code>impl From&lt;bool&gt; for {f32,f64}</code></a></li> <li><a href="https://doc.rust-lang.org/stable/std/path/constant.MAIN_SEPARATOR_STR.html"><code>std::path::MAIN_SEPARATOR_STR</code></a></li> <li><a href="https://doc.rust-lang.org/stable/std/path/struct.PathBuf.html#impl-DerefMut-for-PathBuf"><code>impl DerefMut for PathBuf</code></a></li> </ul> <p>These APIs are now stable in const contexts:</p> <ul> <li><a href="https://doc.rust-lang.org/stable/std/collections/struct.VecDeque.html#method.new"><code>VecDeque::new</code></a></li> </ul> <h3><a href="#other-changes" aria-hidden="true" class="anchor" id="other-changes"></a>Other changes</h3> <ul> <li>As <a href="https://blog.rust-lang.org/2023/01/09/android-ndk-update-r25.html">previously announced</a>, Android platform support in Rust is now targeting NDK r25, which corresponds to a minimum supported API level of 19 (KitKat).</li> </ul> <p>Check out everything that changed in <a href="https://github.com/rust-lang/rust/blob/stable/RELEASES.md#version-1680-2023-03-09">Rust</a>, <a href="https://github.com/rust-lang/cargo/blob/master/CHANGELOG.md#cargo-168-2023-03-09">Cargo</a>, and <a href="https://github.com/rust-lang/rust-clippy/blob/master/CHANGELOG.md#rust-168">Clippy</a>.</p> <h3><a href="#contributors-to-1680" aria-hidden="true" class="anchor" id="contributors-to-1680"></a>Contributors to 1.68.0</h3> <p>Many people came together to create Rust 1.68.0. We couldn't have done it without all of you. <a href="https://thanks.rust-lang.org/rust/1.68.0/">Thanks!</a></p> This Week in Rust 485 freedit 2023-03-08 2023-03-08 34 <p>Hello and welcome to another issue of <em>This Week in Rust</em>! <a href="https://www.rust-lang.org/">Rust</a> 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? Tag us at <a href="https://twitter.com/ThisWeekInRust">@ThisWeekInRust</a> on Twitter or <a href="https://mastodon.social/@thisweekinrust">@ThisWeekinRust</a> on mastodon.social, or <a href="https://github.com/rust-lang/this-week-in-rust">send us a pull request</a>. Want to get involved? <a href="https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md">We love contributions</a>.</p> <p><em>This Week in Rust</em> is openly developed <a href="https://github.com/rust-lang/this-week-in-rust">on GitHub</a>. If you find any errors in this week's issue, <a href="https://github.com/rust-lang/this-week-in-rust/pulls">please submit a PR</a>.</p> <h2 id="updates-from-rust-community"><a class="toclink" href="#updates-from-rust-community">Updates from Rust Community</a></h2> <!-- Dear community contributors: Please read README.md for guidance on submissions. Each submitted link should be of the form: * [Title of the Linked Page](https://example.com/my_article) If you don't know which category to use, feel free to submit a PR anyway and just ask the editors to select the category. --> <h3 id="foundation"><a class="toclink" href="#foundation">Foundation</a></h3> <ul> <li><a href="https://foundation.rust-lang.org/news/rustconf-2023-is-coming-submit-a-talk-today/">RustConf 2023 is Coming—Submit a Talk Today!</a></li> <li><a href="https://foundation.rust-lang.org/news/member-spotlight-hightec/">Member Spotlight: HighTec</a></li> <li><a href="https://foundation.rust-lang.org/news/best-practices-for-integrating-rust-and-qt-in-embedded-systems/">Best Practices for Integrating Rust and Qt in Embedded Systems</a></li> </ul> <h3 id="rust-nation-2023"><a class="toclink" href="#rust-nation-2023">Rust Nation 2023</a></h3> <ul> <li><a href="https://www.youtube.com/watch?v=y4_a3ALa_20">Opening Address - Rebecca Rumbul</a></li> <li><a href="https://www.youtube.com/watch?v=dTktT8y8niw">The Rustacean Cycle: Learn, Teach, Deliver - Nell Shamrell-Harrington</a></li> <li><a href="https://www.youtube.com/watch?v=u4Dd7dBxcEA">Fast, Flexible Iteration with Rust and Rhai - Jonathan Strong</a></li> <li><a href="https://www.youtube.com/watch?v=cWCZms92-1g">iOS, Android and Web applications that share a single Rust core - Stuart Harris</a></li> <li><a href="https://www.youtube.com/watch?v=7DOYtnCXucw">Tricks of the Trait: Enabling Ergonomic Extractors - Rob Ede</a></li> <li><a href="https://www.youtube.com/watch?v=4FymKv23J34">Let's Get Rusty In Here - Daniel Thompson-Yvetot</a></li> <li><a href="https://www.youtube.com/watch?v=7pU3gOVAeVQ">Let’s write async rust from the ground up! - Conrad Ludgate</a></li> <li><a href="https://www.youtube.com/watch?v=udHjmno-tfA">What I learned by solving 50 Advent of Code challenges in Rust - Luciano Mammino</a></li> <li><a href="https://www.youtube.com/watch?v=4DLhTPsg8QQ">Spreading Rust to the rest of the company: Moving past the proof of concept - Tim McNamara</a></li> <li><a href="https://www.youtube.com/watch?v=Avp55U2JFcQ">A tale of binary translation - Amanieu D'Antras</a></li> <li><a href="https://www.youtube.com/watch?v=-O31eFqBmf4">Embracing Rust at fly.io: How Rust powers our networking layer - Senyo Simpson</a></li> <li><a href="https://www.youtube.com/watch?v=ec8vvD1SG-s">Closing the Supply Chain Security Loop with Rust and Pyrsia - Steven Chin</a></li> <li><a href="https://www.youtube.com/watch?v=Chl8IdMxr4Y">SurrealDB: from Golang to Rust — building the world’s fastest-growing db - Tobie Morgan Hitchcock</a></li> <li><a href="https://www.youtube.com/watch?v=Z-2siR9Ki84">Moving beyond <code>Arc&lt;Mutex&lt;T&gt;&gt;</code> - Katharina Fey</a></li> <li><a href="https://www.youtube.com/watch?v=EFtassAEK5A">What does the Rust Foundation do? - Rust Foundation team</a></li> <li><a href="https://www.youtube.com/watch?v=t5q0M5VDlQM">Rust on RISC-V, a case study - Jorge Prendes and James Wainwright</a></li> <li><a href="https://www.youtube.com/watch?v=rwH57zNm-A8">Rust in Rhymes II - Andre Bogus</a></li> <li><a href="https://www.youtube.com/watch?v=r35cBkPRNMI">Living with Rust Long-Term - Jon Gjengset</a></li> </ul> <h3 id="newsletters"><a class="toclink" href="#newsletters">Newsletters</a></h3> <ul> <li><a href="https://rustmagazine.org/issue-2/">Rust Magazine Issue 2 has been released!</a></li> </ul> <h3 id="projecttooling-updates"><a class="toclink" href="#projecttooling-updates">Project/Tooling Updates</a></h3> <ul> <li><a href="https://bevyengine.org/news/bevy-0-10/">Bevy 0.10</a></li> <li><a href="https://rust-analyzer.github.io/thisweek/2023/03/06/changelog-171.html">rust-analyzer changelog #171</a></li> <li><a href="https://zellij.dev/news/stacked-panes-swap-layouts/">Zellij 0.35.1 released: bringing Stacked Panes to your Terminal</a></li> <li><a href="https://blog.cloudflare.com/introducing-oxy/">Oxy is Cloudflare's Rust-based next generation proxy framework</a></li> <li><a href="https://www.fornjot.app/blog/weekly-release/2023-w10/">Fornjot (code-first CAD in Rust) - Weekly Release - Progressed Extremely Well</a></li> <li><a href="https://databend.rs/blog/databend-release-v1.0">Databend 1.0 Release - The Future of Cloud Data Analytics</a></li> <li><a href="https://blog.orhun.dev/introducing-runst/">Introducing runst: Handle desktop notifications neatly on Linux!</a></li> <li><a href="https://pdhv.fr/">A Windows software written in RUST available in the Microsoft Store</a></li> <li><a href="https://seanmonstar.com/post/710694914534539264/this-month-in-hyper-february-2023">This Month in hyper: February 2023</a></li> </ul> <h3 id="observationsthoughts"><a class="toclink" href="#observationsthoughts">Observations/Thoughts</a></h3> <ul> <li><a href="https://jacko.io/safety_and_soundness.html">Safety and Soundness in Rust</a></li> <li><a href="https://predr.ag/blog/re-exporting-enum-with-type-alias-breaking-change-not-major/">Re-exporting an enum with a type alias is breaking, but not major</a></li> <li><a href="https://smallcultfollowing.com/babysteps/blog/2023/03/03/trait-transformers-send-bounds-part-3/">Trait transformers (send bounds, part 3)</a></li> <li><a href="https://briankung.dev/2023/02/17/professional-rustacean-3-months-in/">Professional Rustacean, 3 months in</a></li> <li><a href="https://tzemanovic.gitlab.io/posts/rust-coding-style/">Rust coding style</a></li> <li><a href="https://blog.polybdenum.com/2023/03/05/fixing-the-next-10-000-aliasing-bugs.html">Fixing the Next 10,000 Aliasing Bugs</a></li> <li><a href="https://notgull.github.io/device-afd/">\Device\Afd, or, the Deal with the Devil that makes async Rust work on Windows</a></li> <li>(audio) <a href="https://rustacean-station.org/episode/joshuan-nelson/">Rustdoc with Joshua Nelson</a></li> <li>(audio) <a href="https://rustacean-station.org/episode/serge-barral/">Asynchronix with Serge Barral</a></li> <li>(video) <a href="https://www.youtube.com/watch?v=engduNoI6DE">strace feels like magic — let’s fix that (with Rust)</a></li> <li>(video) <a href="https://www.youtube.com/watch?v=c_5Jy_AVDaM">Let's make an htop-like in your browser (with Rust)</a></li> <li>(video) <a href="https://www.youtube.com/watch?v=luOgEhLE2sg">Build your entire tech stack in Rust</a></li> </ul> <h3 id="rust-walkthroughs"><a class="toclink" href="#rust-walkthroughs">Rust Walkthroughs</a></h3> <ul> <li><a href="https://www.brandons.me/blog/bufread-and-when-to-use-it">Rust's BufRead, And When To Use It</a></li> <li><a href="https://www.shuttle.rs/blog/2023/03/01/getting-started-with-rust-and-gpt">Getting Started with Rust &amp; GPT-3</a></li> <li><a href="https://www.superperfundo.dev/articles/ray-tracer-part2">Build a Ray Tracer, pt. 2 - Enter The Matrix</a></li> <li><a href="https://antoniosbarotsis.github.io/posts/python_package_written_in_rust/">Creating and publishing a Python package written in Rust</a></li> <li><a href="https://orlp.net/blog/worlds-smallest-hash-table/">The World's Smallest Hash Table</a></li> <li><a href="https://fettblog.eu/refactoring-rust-introducing-traits/">Refactoring in Rust: Introducing Traits</a></li> <li><a href="https://gitlab.com/cyril-marpaud/rust_esp_quickstart/">Embedded Rust on ESP32C3 Board, a Hands-on Quickstart Guide</a></li> <li>[video] <a href="https://www.youtube.com/watch?v=i_ghB5AusDs">Matching Braces With a Stack, Beginner Tutorial</a></li> </ul> <h3 id="miscellaneous"><a class="toclink" href="#miscellaneous">Miscellaneous</a></h3> <ul> <li><a href="https://www.reddit.com/r/rust/comments/11dxy7e/academy_software_foundation_rust_working_group/">Academy Software Foundation Rust Working Group Status and Survey</a></li> <li><a href="https://zackoverflow.dev/writing/unsafe-rust-vs-zig/">When Zig is safer and faster than Rust</a></li> </ul> <h2 id="crate-of-the-week"><a class="toclink" href="#crate-of-the-week">Crate of the Week</a></h2> <p>This week's crate is <a href="https://github.com/emanuele-em/man-in-the-middle-proxy">man-in-the-middle-proxy</a>, a - surprise! - man in the middle proxy.</p> <p>Thanks to <a href="https://users.rust-lang.org/t/crate-of-the-week/2704/1163">Emanuele Em</a> for the self-suggestion!</p> <p><a href="https://users.rust-lang.org/t/crate-of-the-week/2704">Please submit your suggestions and votes for next week</a>!</p> <h2 id="call-for-participation"><a class="toclink" href="#call-for-participation">Call for Participation</a></h2> <p>Always wanted to contribute to open-source projects but did not know where to start? Every week we highlight some tasks from the Rust community for you to pick and get started!</p> <p>Some of these tasks may also have mentors available, visit the task page for more information.</p> <ul> <li><a href="https://github.com/build-trust/ockam/issues/4410">Ockam - Create traits to abstract the configuration files handled by the CLI state</a></li> <li><a href="https://github.com/build-trust/ockam/issues/4419">Ockam - Create clap command to show the details of an existing TCP listener on a node</a></li> <li><a href="https://github.com/build-trust/ockam/issues/4380">Ockam - When running the credential store command, validate the credential before storing it</a></li> </ul> <p>If you are a Rust project owner and are looking for contributors, please submit tasks <a href="https://users.rust-lang.org/t/twir-call-for-participation/4821">here</a>.</p> <h2 id="updates-from-the-rust-project"><a class="toclink" href="#updates-from-the-rust-project">Updates from the Rust Project</a></h2> <p>376 pull requests were <a href="https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2023-02-27..2023-03-06">merged in the last week</a></p> <ul> <li><a href="https://github.com/rust-lang/rust/pull/107723">apply BOLT optimizations without rebuilding LLVM</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106673">add support for QNX Neutrino to standard library</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108427">recover from for-else and while-else</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108669">allow checking whether a type allows being uninitialized</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108644">allow setting hashmap toml values in <code>./configure</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/108557">point error span at Some constructor argument when trait resolution fails</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108553">deny capturing late-bound non-lifetime param in anon const</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108551">descriptive error when users try to combine RPITIT/AFIT with specialization</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108496">add warning on pre- and postfix decrement</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108297">exit when there are unmatched delims to avoid noisy diagnostics</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108575">erase <strong>all</strong> regions when probing for associated types on ambiguity in astconv</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108787">erase regions even when failing to normalize type in MIR opts</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108744">don't ICE when encountering bound var in builtin copy/clone bounds</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108298">fix ICE: check if snippet is <code>)</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/108667">fix another ICE in <code>point_at_expr_source_of_inferred_type</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/108672">feed queries on impl side for RPITITs when using <code>lower_impl_trait_in_trait_to_assoc_ty</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/108568">make <code>associated_item_def_ids</code> for traits use an unstable option to also return associated types for RPITITs</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107981">new solver: implement canonicalization and region constraints</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108746">don't project to RPITIT that has no default value</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107844">desugaring of drop and replace at MIR build</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108692">don't call <code>temporary_scope</code> twice</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106774">stabilize <code>cmpxchg16b_target_feature</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/108540">add <code>Atomic*::from_ptr</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/105871">add <code>Option::as_</code>(<code>mut_</code>)<code>slice</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/108462">fix <code>VecDeque::append</code> capacity overflow for ZSTs</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108157">use <code>partial_cmp</code> to implement tuple <code>lt</code>/<code>le</code>/<code>ge</code>/<code>gt</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/89518">add vectored positioned I/O on Unix</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11805">cargo: breaking endless loop on cyclic features in added dependency in cargo-add</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11790">cargo: fix <code>CARGO_CFG_</code> vars for configs defined both with and without value</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11785">cargo: fix help string for "--charset" option of "cargo tree"</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11630">cargo: fix(toml): provide a way to show unused manifest keys for dependencies</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11448">cargo: gitoxide integration: fetch</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11783">cargo: improve error for missing crate in --offline mode for sparse index</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11791">cargo: make <code>sparse</code> the default protocol for crates.io</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108626">rustdoc-json: switch from HashMap to FxHashMap to fix non-determinism</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108723">rustdoc: function signature search with traits in <code>where</code> clause</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108098">rustdoc: reduce allocations when generating tooltips</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108143">rustdoc: search by macro when query ends with <code>!</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/108531">rustdoc: show that repeated expression arrays can be made with constant values</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10442">clippy: downgrade <code>let_underscore_untyped</code> to restriction</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10439">clippy: fix false positive for <code>let_unit_value</code> when <code>await</code> used</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10405">clippy: fix ICE in <code>multiple_unsafe_ops_per_block</code></a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10423">clippy: fix <code>array-size-threshold</code> config deserialization error</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10403">clippy: fix various ICEs</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10324">clippy: <code>missing_docs_in_private_items</code> should cover only private items</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14238">rust-analyzer: allow <code>generate_function</code> to generate in different local crate</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14243">rust-analyzer: diagnose unresolved field, method call and call expression</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14240">rust-analyzer: diagnose value breaks in incorrect breakables</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14266">rust-analyzer: make <code>replace_or_with_or_else</code> assists more generally applicable</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14260">rust-analyzer: adjust <code>replace_match_with_if_let</code> applicability range</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14234">rust-analyzer: don't drop rustc crates in the rustc workspace</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14176">rust-analyzer: fix associated item visibility in block-local impls</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14239">rust-analyzer: load the sysroot in all CLI commands</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14185">rust-analyzer: run doctests for structs with lifetime parameters from IDE</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14247">rust-analyzer: generate correct completion edits for missing macro arguments</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14222">rust-analyzer: implement pattern mismatch diagnostics (but keep them disabled)</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14225">rust-analyzer: support removing nested <code>dbg!()</code>s in <code>remove_dbg</code></a></li> </ul> <h3 id="rust-compiler-performance-triage"><a class="toclink" href="#rust-compiler-performance-triage">Rust Compiler Performance Triage</a></h3> <p>A really quiet week with almost all regressions being due to noise in benchmarks that show "bimodality" in codegen that can cause swings in performance from one change to the other. The only true performance change was a two-line change by @nnethercote to remove a redundant function call which led to a 0.3% improvement in performance across roughly 15 benchmarks.</p> <p>Triage done by <strong>@rylev</strong>. Revision range: <a href="https://perf.rust-lang.org/?start=31f858d9a511f24fedb8ed997b28304fec809630&amp;end=8f9e09ac3ef3fa85d23ad6a0c920d49987144b13&amp;absolute=false&amp;stat=instructions%3Au">31f858d9..8f9e09ac</a></p> <p><strong>Summary</strong>:</p> <table> <thead> <tr> <th align="center">(instructions:u)</th> <th align="center">mean</th> <th align="center">range</th> <th align="center">count</th> </tr> </thead> <tbody> <tr> <td align="center">Regressions ❌ <br /> (primary)</td> <td align="center">-</td> <td align="center">-</td> <td align="center">0</td> </tr> <tr> <td align="center">Regressions ❌ <br /> (secondary)</td> <td align="center">2.0%</td> <td align="center">[1.2%, 2.8%]</td> <td align="center">8</td> </tr> <tr> <td align="center">Improvements ✅ <br /> (primary)</td> <td align="center">-0.4%</td> <td align="center">[-0.7%, -0.2%]</td> <td align="center">7</td> </tr> <tr> <td align="center">Improvements ✅ <br /> (secondary)</td> <td align="center">-1.0%</td> <td align="center">[-1.8%, -0.1%]</td> <td align="center">31</td> </tr> <tr> <td align="center">All ❌✅ (primary)</td> <td align="center">-0.4%</td> <td align="center">[-0.7%, -0.2%]</td> <td align="center">7</td> </tr> </tbody> </table> <p>7 Regressions, 8 Improvements, 2 Mixed; 7 of them in rollups 35 artifact comparisons made in total</p> <p><a href="https://github.com/rust-lang/rustc-perf/blob/master/triage/2023-03-07.md">Full report</a> </p> <h3 id="approved-rfcs"><a class="toclink" href="#approved-rfcs"><a href="https://github.com/rust-lang/rfcs/commits/master">Approved RFCs</a></a></h3> <p>Changes to Rust follow the Rust <a href="https://github.com/rust-lang/rfcs#rust-rfcs">RFC (request for comments) process</a>. These are the RFCs that were approved for implementation this week:</p> <ul> <li><em>No RFCs were approved this week.</em></li> </ul> <h3 id="final-comment-period"><a class="toclink" href="#final-comment-period">Final Comment Period</a></h3> <p>Every week, <a href="https://www.rust-lang.org/team.html">the team</a> announces the 'final comment period' for RFCs and key PRs which are reaching a decision. Express your opinions now.</p> <h4 id="rfcs"><a class="toclink" href="#rfcs"><a href="https://github.com/rust-lang/rfcs/labels/final-comment-period">RFCs</a></a></h4> <ul> <li>[disposition: close] <a href="https://github.com/rust-lang/rfcs/pull/2918">RFC - sigil-option-notation</a></li> </ul> <h4 id="tracking-issues-prs"><a class="toclink" href="#tracking-issues-prs"><a href="https://github.com/rust-lang/rust/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc">Tracking Issues &amp; PRs</a></a></h4> <ul> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/97594">Implement tuple&lt;-&gt;array convertions via <code>From</code></a></li> <li>[disposition: close] <a href="https://github.com/rust-lang/rust/issues/81872">Tracking Issue for Mutex::unlock()</a></li> <li>[disposition: close] <a href="https://github.com/rust-lang/rust/issues/62358">Tracking issue for <code>Option::contains</code> and <code>Result::contains</code></a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/108471">Remove <code>box_syntax</code></a></li> </ul> <h3 id="new-and-updated-rfcs"><a class="toclink" href="#new-and-updated-rfcs"><a href="https://github.com/rust-lang/rfcs/pulls">New and Updated RFCs</a></a></h3> <ul> <li><em>No New or Updated RFCs were created this week.</em></li> </ul> <h3 id="call-for-testing"><a class="toclink" href="#call-for-testing"><a href="https://github.com/rust-lang/rfcs/issues?q=label%3Acall-for-testing">Call for Testing</a></a></h3> <p>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:</p> <ul> <li><em>No RFCs issued a call for testing this week.</em></li> </ul> <p>If you are a feature implementer and would like your RFC to appear on the above list, add the new <code>call-for-testing</code> label to your RFC along with a comment providing testing instructions and/or guidance on which aspect(s) of the feature need testing.</p> <h2 id="upcoming-events"><a class="toclink" href="#upcoming-events">Upcoming Events</a></h2> <p>Rusty Events between 2023-03-08 - 2023-04-05 🦀</p> <h3 id="virtual"><a class="toclink" href="#virtual">Virtual</a></h3> <ul> <li>2023-03-08 | Virtual (Boulder, CO, US) | <a href="https://www.meetup.com/boulder-elixir-rust/">Boulder Elixir and Rust</a><ul> <li><a href="https://www.meetup.com/boulder-elixir-rust/events/zvxcsryfcfblb/"><strong>Monthly Meetup</strong></a></li> </ul> </li> <li>2023-03-09 | Virtual (Nürnberg, DE) | <a href="https://www.meetup.com/rust-noris/">Rust Nuremberg</a><ul> <li><a href="https://www.meetup.com/rust-noris/events/hlvbvsyfcfbmb/"><strong>Rust Nürnberg online</strong></a></li> </ul> </li> <li>2023-03-11 | Virtual | <a href="https://discord.gg/yNtPTb2">Rust GameDev</a><ul> <li><a href="https://discord.gg/yNtPTb2"><strong>Rust GameDev Monthly Meetup</strong></a></li> </ul> </li> <li>2023-03-14 | Virtual (Italy) | <a href="https://www.eventbrite.it/o/hinto-28025248045">Hinto</a><ul> <li><a href="https://www.eventbrite.com/e/biglietti-webinar-online-introduzione-a-rust-558594419947?aff=ebdssbonlinesearch&amp;keep_tld=1"><strong>Webinar online | Introduzione a Rust</strong></a></li> </ul> </li> <li>2023-03-14 | Virtual (Berlin, DE) | <a href="https://berline.rs/">Berlin.rs</a><ul> <li><a href="https://berline.rs/2023/03/14/rust-hack-and-learn.html"><strong>Rust Hack and Learn</strong></a></li> </ul> </li> <li>2023-03-14 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/dallas-rust/">Dallas Rust</a><ul> <li><a href="https://www.meetup.com/dallas-rust/events/291809763/"><strong>Second Tuesday</strong></a></li> </ul> </li> <li>2023-03-14 | Virtual (Redmond, WA, US) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/291676352/"><strong>Crack code interview problems in Rust: S2 Ep1</strong></a></li> </ul> </li> <li>2023-03-14 | Virtual (Saarbrücken, DE) | <a href="https://www.meetup.com/rust-saar/">Rust-Saar</a><ul> <li><a href="https://www.meetup.com/rust-saar/events/292076386/"><strong>Meetup: 27u16</strong></a></li> </ul> </li> <li>2023-03-15 | Virtual (Cardiff, UK) | <a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff">Rust and C++ Cardiff</a><ul> <li><a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/291354288/"><strong>Injecting Rust Hooks into a 1999 game binary (unsafe)</strong></a></li> </ul> </li> <li>2023-03-15 | Virtual (Vancouver, BC, CA) | <a href="https://www.meetup.com/vancouver-rust/">Vancouver Rust</a><ul> <li><a href="https://www.meetup.com/vancouver-rust/events/wqchctyfcfbtb/"><strong>Rust Study/Hack/Hang-out</strong></a></li> </ul> </li> <li>2023-03-16 | Virtual (Raleigh, NC, US) | <a href="https://www.meetup.com/triangle-bitdevs/">Triangle BitDevs</a><ul> <li><a href="https://www.meetup.com/triangle-bitdevs/events/292032273/"><strong>Rust for Bitcoiners</strong></a></li> </ul> </li> <li>2023-03-16 | Virtual (Redmond, WA, US) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/291681809/"><strong>Introduction to WebAssembly (WASM) with Rust and WASMEdge</strong></a></li> </ul> </li> <li>2023-03-16 | Virtual (Stuttgart, DE) | <a href="https://www.meetup.com/rust-community-stuttgart">Rust Community Stuttgart</a><ul> <li><a href="https://www.meetup.com/rust-community-stuttgart/events/291847774/"><strong>Rust-Meetup</strong></a></li> </ul> </li> <li>2023-03-21 | Virtual (Redmond, WA, US) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/291676961/"><strong>Crack code interview problems in Rust: S2 Ep2</strong></a></li> </ul> </li> <li>2023-03-21 | Virtual (Washington, DC, US) | <a href="https://www.meetup.com/rustdc/">Rust DC</a><ul> <li><a href="https://www.meetup.com/rustdc/events/vdhxgsyfcfbcc/"><strong>Rust+Tell Lightning Talks</strong></a></li> </ul> </li> <li>2023-03-22 | Virtual (Richmond, VA, US) | <a href="https://www.meetup.com/rustaceans-rva/">Rustaceans RVA</a><ul> <li><a href="https://www.meetup.com/rustaceans-rva/events/291963911/"><strong>Rustaceans RVA - March Meetup</strong></a></li> </ul> </li> <li>2023-03-28 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/dallas-rust/">Dallas Rust</a><ul> <li><a href="https://www.meetup.com/dallas-rust/events/qndgwsyfcfblc/"><strong>Last Tuesday</strong></a></li> </ul> </li> <li>2023-03-28 | Virtual (Redmond, WA, US) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/291677113/"><strong>Crack code interview problems in Rust: S2 Ep3</strong></a></li> </ul> </li> <li>2023-03-29 | Virtual (Cardiff, UK) | <a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/">Rust and C++ Cardiff</a><ul> <li><a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/291892487/"><strong>Writing your own rust 'book' with mdBook</strong></a></li> </ul> </li> <li>2023-04-04 | Virtual (Buffalo, NY, US) | <a href="https://www.meetup.com/buffalo-rust-meetup/">Buffalo Rust Meetup</a><ul> <li><a href="https://www.meetup.com/buffalo-rust-meetup/events/lsjbbtyfcgbgb/"><strong>Buffalo Rust User Group, First Tuesdays</strong></a></li> </ul> </li> <li>2023-04-05 | Virtual (Indianapolis, IN, US) | <a href="https://www.meetup.com/indyrs">Indy Rust</a><ul> <li><a href="https://www.meetup.com/indyrs/events/291967741/"><strong>Indy.rs - with Social Distancing</strong></a></li> </ul> </li> <li>2023-04-05 | Virtual (Stuttgart, DE) | <a href="https://www.meetup.com/rust-community-stuttgart">Rust Community Stuttgart</a><ul> <li><a href="https://www.meetup.com/rust-community-stuttgart/events/dvvtvsyfcgbhb/"><strong>Rust-Meetup</strong></a></li> </ul> </li> </ul> <h3 id="europe"><a class="toclink" href="#europe">Europe</a></h3> <ul> <li>2023-03-09 | Basel, CH | <a href="https://www.meetup.com/rust-basel/">Rust Basel</a><ul> <li><a href="https://www.meetup.com/rust-basel/events/291228934/"><strong>Rust Meetup #7</strong></a></li> </ul> </li> <li>2023-03-09 | Delft, NL | <a href="https://www.meetup.com/rust-nederland/">Rust Nederland</a><ul> <li><a href="https://www.meetup.com/rust-nederland/events/291401965/"><strong>Regular track: Embedded Rust</strong></a></li> <li><a href="https://www.meetup.com/rust-nederland/events/291401778/"><strong>Student track: Embedded Rust</strong></a></li> </ul> </li> <li>2023-03-09 | Lyon, FR | <a href="https://www.meetup.com/fr-FR/rust-lyon/">Rust Lyon</a><ul> <li><a href="https://www.meetup.com/fr-FR/rust-lyon/events/291727241/"><strong>Rust Lyon Meetup #2</strong></a></li> </ul> </li> <li>2023-03-15 | Nürnberg, DE | <a href="https://www.meetup.com/rust-noris/">Rust Nuremberg</a><ul> <li><a href="https://www.meetup.com/rust-noris/events/291623203/"><strong>Walk around Embedded World Exhibition</strong></a></li> </ul> </li> <li>2023-03-15 | Trondheim, NO | <a href="https://www.meetup.com/rust-trondheim/">Rust Trondheim</a><ul> <li><a href="https://www.meetup.com/rust-trondheim/events/292085409/"><strong>Rust graphics with nannou</strong></a> </li> </ul> </li> <li>2023-03-16 | Paris, FR | <a href="https://www.meetup.com/ocaml-paris/events/">OCaml Users in Paris - OUPS</a><ul> <li><a href="https://www.meetup.com/ocaml-paris/events/291637370/"><strong>OUPS Mars 2023: Creusot a prophetic verifier for Rust -- Xavier Denis</strong></a></li> </ul> </li> <li>2023-03-17 | Stuttgart, DE | <a href="https://www.meetup.com/rust-community-stuttgart">Rust Community Stuttgart</a><ul> <li><a href="https://www.meetup.com/rust-community-stuttgart/events/zmppzsyfcfbwb/"><strong>OnSite Meeting</strong></a></li> </ul> </li> <li>2023-03-28 | Zurich, CH | <a href="https://www.meetup.com/de-DE/rust-zurich/events/291449557/">Rust Zurich</a><ul> <li><a href="https://www.meetup.com/de-DE/rust-zurich/events/291449557/"><strong>High performance concurrent data structures in Rust - March Meetup</strong></a></li> </ul> </li> <li>2023-03-29 | Paris, FR | <a href="https://www.meetup.com/rust-paris/">Rust Paris</a><ul> <li><a href="https://www.meetup.com/rust-paris/events/291963747/"><strong>Rust Paris meetup #57</strong></a></li> </ul> </li> </ul> <h3 id="north-america"><a class="toclink" href="#north-america">North America</a></h3> <ul> <li>2023-03-09 | Lehi, UT, US | <a href="https://www.meetup.com/utah-rust/">Utah Rust</a><ul> <li><a href="https://www.meetup.com/utah-rust/events/rrwbctyfcfbmb/"><strong>Trails, Triumphs, &amp; Travails of Yet-Another-Database-Crate with PJ and Food!</strong></a></li> </ul> </li> </ul> <p>If you are running a Rust event please add it to the <a href="https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com">calendar</a> to get it mentioned here. Please remember to add a link to the event too. Email the <a href="mailto:community-team@rust-lang.org">Rust Community Team</a> for access.</p> <h2 id="jobs"><a class="toclink" href="#jobs">Jobs</a></h2> <!-- Rust Jobs: TWiR has stopped featuring individual job postings. You can read more about this change here: https://github.com/rust-lang/this-week-in-rust/issues/3412 --> <p>Please see the latest <a href="https://www.reddit.com/r/rust/comments/10nmtew/official_rrust_whos_hiring_thread_for_jobseekers/">Who's Hiring thread on r/rust</a></p> <h1 id="quote-of-the-week"><a class="toclink" href="#quote-of-the-week">Quote of the Week</a></h1> <blockquote> <p>(…) as much as i dislike the <a href="https://crates.io/crates/cargo-geiger">cargo-geiger</a> concept, the name … kind of works</p> <p><code>unsafe</code> is a lot like uranium. it’s just one more metal ore you can process, refine, and machine. it doesn’t combust in atmosphere, it doesn’t corrode or make weird acids. unless you go out of your way to make it dangerous you don’t even have to worry about critical masses. you can work with it pretty normally most of the time</p> <p>but if you don’t know exactly what it is, what it does, and how to work with it, it will cause mysterious illnesses that only crop up long after you’ve stopped touching it</p> </blockquote> <p>– <a href="https://www.reddit.com/r/rust/comments/11eyu50/comment/jahdf3b/">Alexander Payne on /r/rust</a></p> <p>Thanks to <a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328/1377">Stephan Sokolow</a> for the suggestion!</p> <p><a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328">Please submit quotes and vote for next week!</a></p> <p><em>This Week in Rust is edited by: <a href="https://github.com/nellshamrell">nellshamrell</a>, <a href="https://github.com/llogiq">llogiq</a>, <a href="https://github.com/cdmistman">cdmistman</a>, <a href="https://github.com/ericseppanen">ericseppanen</a>, <a href="https://github.com/extrawurst">extrawurst</a>, <a href="https://github.com/andrewpollack">andrewpollack</a>, <a href="https://github.com/U007D">U007D</a>, <a href="https://github.com/kolharsam">kolharsam</a>, <a href="https://github.com/joelmarcey">joelmarcey</a>, <a href="https://github.com/mariannegoldin">mariannegoldin</a>, <a href="https://github.com/bennyvasquez">bennyvasquez</a>.</em></p> <p><em>Email list hosting is sponsored by <a href="https://foundation.rust-lang.org/">The Rust Foundation</a></em></p> <p><small><a href="https://www.reddit.com/r/rust/comments/11mdl2e/this_week_in_rust_485/">Discuss on r/rust</a></small></p> This Week in Rust 484 freedit 2023-03-01 2023-03-01 32 <p>Hello and welcome to another issue of <em>This Week in Rust</em>! <a href="https://www.rust-lang.org/">Rust</a> 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? Tag us at <a href="https://twitter.com/ThisWeekInRust">@ThisWeekInRust</a> on Twitter or <a href="https://mastodon.social/@thisweekinrust">@ThisWeekinRust</a> on mastodon.social, or <a href="https://github.com/rust-lang/this-week-in-rust">send us a pull request</a>. Want to get involved? <a href="https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md">We love contributions</a>.</p> <p><em>This Week in Rust</em> is openly developed <a href="https://github.com/rust-lang/this-week-in-rust">on GitHub</a>. If you find any errors in this week's issue, <a href="https://github.com/rust-lang/this-week-in-rust/pulls">please submit a PR</a>.</p> <h2 id="updates-from-rust-community"><a class="toclink" href="#updates-from-rust-community">Updates from Rust Community</a></h2> <!-- Dear community contributors: Please read README.md for guidance on submissions. Each submitted link should be of the form: * [Title of the Linked Page](https://example.com/my_article) If you don't know which category to use, feel free to submit a PR anyway and just ask the editors to select the category. --> <h3 id="official"><a class="toclink" href="#official">Official</a></h3> <ul> <li><a href="https://blog.rust-lang.org/inside-rust/2023/02/23/keyword-generics-progress-report-feb-2023.html">Keyword Generics Progress Report: February 2023</a></li> </ul> <h3 id="newsletters"><a class="toclink" href="#newsletters">Newsletters</a></h3> <ul> <li><a href="https://gamedev.rs/news/042/">This Month in Rust GameDev #42 - January 2023</a></li> </ul> <h3 id="projecttooling-updates"><a class="toclink" href="#projecttooling-updates">Project/Tooling Updates</a></h3> <ul> <li><a href="https://rust-analyzer.github.io/thisweek/2023/02/27/changelog-170.html">rust-analyzer Changelog #170</a></li> <li><a href="https://intellij-rust.github.io/2023/02/27/changelog-189.html">IntelliJ Rust Changelog #189</a></li> <li><a href="https://github.com/Byron/gitoxide/discussions/757">gitoxide - [January]: The first <code>cargo</code> integration review</a></li> <li><a href="https://dioxuslabs.com/blog/release-030/">Dioxus 0.3 - Templates, Hot Reloading, LiveView, and more</a></li> <li><a href="https://mabez.dev/blog/posts/esp-rust-24-02-2023/">Rust on Espressif chips - 2023 Roadmap</a></li> <li><a href="https://www.reddit.com/r/rust/comments/119roow/announcing_transitive_041_for_better_transitivity/">Announcing transitive 0.4.1, for better transitivity between types</a></li> <li><a href="https://www.reddit.com/r/rust/comments/1192ord/announcing_compact_str_version_07_a_small_string/">Announcing <code>compact_str</code> version 0.7! A small string optimization for Rust</a></li> <li><a href="https://www.ambient.run/post/introducing-ambient">Introducing Ambient 0.1</a></li> <li><a href="https://fyrox.rs/blog/post/twif16/">This Week in Fyrox #16</a></li> <li><a href="https://www.fornjot.app/blog/weekly-release/2023-w09/">Fornjot (code-first CAD in Rust) - Weekly Release - Still More To Do</a></li> <li>[video] <a href="https://www.youtube.com/watch?v=LWef_2IaFDk">Cargo's New Sparse Index w/special guest Arlo Siemsen</a></li> <li><a href="https://model-checking.github.io/kani-verifier-blog/2023/02/28/kani-internship-projects-2022-stubbing.html">Kani Internship Projects 2022: Function Stubbing</a></li> <li><a href="https://github.com/magmide/magmide/discussions/28">Announcing Magmide Month!</a> (proof language for/using Rust)</li> </ul> <h3 id="observationsthoughts"><a class="toclink" href="#observationsthoughts">Observations/Thoughts</a></h3> <ul> <li>[video] <a href="https://www.youtube.com/watch?v=pTMvh6VzDls">Rust and RAII Memory Management - Computerphile</a></li> <li><a href="https://samsartor.com/guis-3/">All the Problems of Mutation</a></li> <li><a href="https://cherrykitten.dev/blog/rust-1-options-results/">Learning Rust Part 1: A kitten's guide to Options and Results</a></li> <li><a href="https://mmapped.blog/posts/15-when-rust-hurts.html">When Rust hurts</a></li> <li><a href="https://www.travelneil.com/time-travel-debugging-in-rust.html">Time Travel Debugging in Rust</a></li> <li><a href="https://blog.nindalf.com/posts/clippy/">What I learned from contributing to Rust's linter</a></li> <li><a href="https://www.youtube.com/watch?v=2NZlLK6NGmY&amp;list=PLA3GOqJSZytqgPc76nqHc3QAr77bwj3p9">Rust Programming #1 - Getting started &amp; basic concepts</a></li> <li><a href="https://blog.cloudflare.com/rust-nginx-module/">ROFL with a LOL: rewriting an NGINX module in Rust</a></li> <li><a href="https://werat.dev/blog/pretty-rust-backtraces-in-raw-terminal-mode/">Pretty Rust backtraces in raw terminal mode</a></li> <li><a href="https://betterprogramming.pub/a-little-bit-of-rust-d9f2afc09238">A Little Bit of Rust</a></li> <li><a href="https://blog.cloudflare.com/big-pineapple-intro/">How Rust and Wasm power Cloudflare's 1.1.1.1</a></li> <li><a href="https://apollolabsblog.hashnode.dev/stm32f4-embedded-rust-at-the-pac-systick-delay">STM32F4 Embedded Rust at the PAC: SysTick Delay</a></li> <li><a href="https://grantshandy.github.io/posts/raycasting/">Write a First Person Game in 2KB With Rust</a></li> </ul> <h3 id="rust-walkthroughs"><a class="toclink" href="#rust-walkthroughs">Rust Walkthroughs</a></h3> <ul> <li><a href="https://www.judy.co.uk/blog/rust-traits-and-references/">Trait Implementations and References</a></li> <li><a href="https://www.hyperexponential.com/blog/rust-language-exercises-at-hx">Some exercises to accompany the Rust Book</a></li> <li>[video] <a href="https://www.youtube.com/watch?v=ek_HJX8sQqk">Compression from scratch: Huffman coding tutorial</a></li> <li><a href="https://blog.spyglass.fyi/posts/2023/creating-a-launcher-in-tauri/">Create a launchbar app using Tauri &amp; Rust</a></li> </ul> <h3 id="miscellaneous"><a class="toclink" href="#miscellaneous">Miscellaneous</a></h3> <ul> <li><a href="https://eurorust.eu/">EuroRust 2023 announced for Oct. 12-13 in Brussels, BE</a></li> <li><a href="https://tweedegolf.nl/en/blog/86/introducing-mailcrab">Introducing MailCrab!</a></li> <li><a href="https://matt.si/2023-02/rust-nation/">Rust Nation 2023 Review</a></li> <li><a href="https://bytecodealliance.org/articles/wasi-threads">Announcing wasi-threads</a></li> <li><a href="https://wasmer.io/posts/WAI-is-the-answer">WAI is the Answer !!!</a></li> <li>[video] <a href="https://youtube.com/watch?v=9uAy8skUVsc">Tutorial: Building a Blog in Rust - Static File Server</a></li> <li>[video] <a href="https://www.youtube.com/watch?v=QeiAl35bAIQ">Embedded-exploration: Debugging Rust start-up code via JTAG</a></li> <li>[video] <a href="https://www.youtube.com/watch?v=dFkGNe4oaKk">Oxidise Your Life</a></li> <li>[video] <a href="https://www.youtube.com/watch?v=_ccDqRTx-JU">Improve your Rust APIs with the type state pattern</a></li> <li><a href="https://lupyuen.github.io/articles/unicorn">(Possibly) Emulate PinePhone with Unicorn Emulator</a></li> <li>[Video] <a href="https://www.youtube.com/watch?v=ykQbsTHqKFo">Generic Traits, Impls, and Slices in Rustlang</a></li> </ul> <h2 id="crate-of-the-week"><a class="toclink" href="#crate-of-the-week">Crate of the Week</a></h2> <p>This week's crate is <a href="https://github.com/jcaromiq/goku/">goku</a>, a HTTP load tester.</p> <p>Thanks to <a href="https://users.rust-lang.org/t/crate-of-the-week/2704/1161">Joaquín Caro</a> for the self-suggestion!</p> <p><a href="https://users.rust-lang.org/t/crate-of-the-week/2704">Please submit your suggestions and votes for next week</a>!</p> <h2 id="call-for-participation"><a class="toclink" href="#call-for-participation">Call for Participation</a></h2> <p>Always wanted to contribute to open-source projects but did not know where to start? Every week we highlight some tasks from the Rust community for you to pick and get started!</p> <p>Some of these tasks may also have mentors available, visit the task page for more information.</p> <ul> <li><a href="https://github.com/purton-tech/barricade/issues/1">barricade - Add support for OpenID Connect</a></li> <li><a href="https://beyermatthias.de/call-for-participation-config-rs-and-config-rs-ng">config-rs - CFP for the config-rs-ng experiment for a new implementation of the config-rs crate</a></li> <li><a href="https://github.com/build-trust/ockam/issues/4308">Ockam - Remove the check_credential arguments from clap command ockam tcp-inlet create</a></li> <li><a href="https://github.com/build-trust/ockam/issues/4367">Ockam - Implement clap command ockam tcp-listener delete</a></li> <li><a href="https://github.com/build-trust/ockam/issues/4359">Ockam - Improve install.sh to install in path - like rustup</a></li> </ul> <p>If you are a Rust project owner and are looking for contributors, please submit tasks <a href="https://users.rust-lang.org/t/twir-call-for-participation/4821">here</a>.</p> <h2 id="updates-from-the-rust-project"><a class="toclink" href="#updates-from-the-rust-project">Updates from the Rust Project</a></h2> <p>381 pull requests were <a href="https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2023-02-20..2023-02-27">merged in the last week</a></p> <ul> <li><a href="https://github.com/rust-lang/rust/pull/108175">MIR-Validate StorageLive</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108424"><code>rustc_infer</code>: consolidate obligation elaboration de-duplication</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108246">add an <code>InstCombine</code> for redundant casts</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107911">add check for invalid <code>#[macro_export]</code> arguments</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108375">add inlining attributes for query system functions</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108342">apply query response: actually define opaque types</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108063">ban associated type bounds in bad positions</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108208">correctly handle aggregates in DataflowConstProp</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108324">diagnostics: if <code>AssocFn</code> has self argument, describe as method</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108449">do not lint ineffective unstable trait impl for unresolved trait</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108176">don't delay <code>ReError</code> bug during lexical region resolve</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108319">don't project specializable RPITIT projection</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108502">don't trigger error for ReError when other region is empty</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108440">emit the enum discriminant separately for the Encodable macro</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108391">fix <code>is_terminal</code>'s handling of long paths on Windows</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108241">fix handling of reexported macro in doc hidden items</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108239">fix overlapping spans in removing extra arguments</a></li> <li><a href="https://github.com/rust-lang/rust/pull/105462">give the resolver access to <code>TyCtxt</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/107675">implement <code>-Zlink-directives=yes/no</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/106541">implement const iterator using <code>rustc_do_not_const_check</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/107890">lint against <code>Iterator::map</code> receiving a callable that returns <code>()</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/108315">lint dead code in closures and generators</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108000">lint: don't suggest <code>MaybeUninit::assume_init</code> for uninhabited types</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108333">make object bound candidates sound in the new trait solver</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108169">make query keys <code>Copy</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/108202">make sure <code>test_type_match</code> doesn't ICE with late-bound types</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108486">merge <code>diagnostic_items</code> duplicate diagnostics</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108434">migrate <code>rustc_hir_analysis</code> to session diagnostic Part One</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107728">miri: basic dyn* support</a></li> <li><a href="https://github.com/rust-lang/rust/pull/104265">move IpAddr, SocketAddr and V4+V6 related types to <code>core</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/108388">parser: provide better suggestions and errors on closures with braces missing</a></li> <li><a href="https://github.com/rust-lang/rust/pull/91742">print a backtrace when query forcing fails</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106918">rebuild BinaryHeap on unwind from retain</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106430">remove dead unwinds before drop elaboration</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108410">rustdoc: avoid including <code>&lt;li&gt;</code> tags in item table short desc</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107941">treat <code>str</code> as containing <code>[u8]</code> for auto trait purposes</a></li> <li><a href="https://github.com/rust-lang/rust/pull/104754">use <code>ThinVec</code> more in the AST</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108300">use a lock-free datastructure for <code>source_span</code></a></li> <li><a href="https://github.com/rust-lang/miri/pull/2798">miri: get Miri working on ARM</a></li> <li><a href="https://github.com/rust-lang/hashbrown/pull/404">hashbrown: <code>raw_table</code> + <code>raw_table_mut</code></a></li> <li><a href="https://github.com/rust-lang/hashbrown/pull/407">hashbrown: fix last bug in <code>RawTable::clone_from_impl</code></a></li> <li><a href="https://github.com/rust-lang/rustc_codegen_gcc/pull/254">codegen_gcc: simd scatter gather</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11774">cargo: addition of support for -F as an alias for --features</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11643">cargo: error message for transitive artifact dependencies with targets the package doesn't directly interact with</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11756">cargo: fix Cargo removing the sparse+ prefix from sparse URLs in .crates.toml</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11750">cargo: reuse url encoding from <code>url</code> crate, don't use separate <code>percent-encoding</code></a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11410">cargo: suggest cargo add when installing library crate</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10197">clippy: add <code>impl_trait_in_params</code> lint</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10369">clippy: add new lint <code>no_mangle_with_rust_abi</code></a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10303">clippy: add configuration to lint missing docs of <code>pub(crate)</code> items</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10401">clippy: do not panic when analyzing the malformed origin of a format string</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10399">clippy: do not suggest to derive <code>Default</code> on generics with implicit arguments</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10375">clippy: do not suggest using Self in const generic parameters</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10392">clippy: fix more false positives for <code>extra_unused_type_parameters</code></a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10391">clippy: fix test function checker in <code>unwrap_used</code>, <code>expect_used</code></a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10380">clippy: ignore lifetimes from differing contexts in <code>needless_lifetimes</code></a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10386">clippy: normalize projections types when checking <code>explicit_auto_deref</code></a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14175">rust-analyzer: add openDocs command to context menu in VS Code extension</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14203">rust-analyzer: add check for extra path segments after a fully qualified one</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14208">rust-analyzer: add a case in which remainig is None in resolveing types when resolving hir path</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14207">rust-analyzer: respect <code>$CARGO_HOME</code> when looking up toolchains</a></li> <li><a href="https://github.com/rust-lang/ena/pull/37">fix outdated doc</a></li> <li><a href="https://github.com/rust-lang/rust-installer/pull/123">rust-installer: adjust xz compression settings</a></li> </ul> <h3 id="rust-compiler-performance-triage"><a class="toclink" href="#rust-compiler-performance-triage">Rust Compiler Performance Triage</a></h3> <p>Some noisy benchmarks impeded performance review this week. There was a notable improvement to a broad range of primary benchmarks, first from PR #108440, which revised the encodable proc macro to handle the discriminant separately from its fields, and second from PR #108375, which inlined a number of methods that had only a single caller. Both of these PR's were authored by the same contributor; many thanks Zoxc!</p> <p>Triage done by <strong>@pnkfelix</strong>. Revision range: <a href="https://perf.rust-lang.org/?start=3fee48c161a48b0c142d3998fff56faee96bd56c&amp;end=31f858d9a511f24fedb8ed997b28304fec809630&amp;absolute=false&amp;stat=instructions%3Au">3fee48c1..31f858d9</a></p> <p>5 Regressions, 4 Improvements, 6 Mixed; 6 of them in rollups 39 artifact comparisons made in total</p> <p><a href="https://github.com/rust-lang/rustc-perf/blob/master/triage/2023-02-28.md">Full report</a> </p> <h3 id="approved-rfcs"><a class="toclink" href="#approved-rfcs"><a href="https://github.com/rust-lang/rfcs/commits/master">Approved RFCs</a></a></h3> <p>Changes to Rust follow the Rust <a href="https://github.com/rust-lang/rfcs#rust-rfcs">RFC (request for comments) process</a>. These are the RFCs that were approved for implementation this week:</p> <ul> <li><a href="https://github.com/rust-lang/rfcs/pull/2832">RFC: Move std::net::IpAddr types into core::net.</a></li> </ul> <h3 id="final-comment-period"><a class="toclink" href="#final-comment-period">Final Comment Period</a></h3> <p>Every week, <a href="https://www.rust-lang.org/team.html">the team</a> announces the 'final comment period' for RFCs and key PRs which are reaching a decision. Express your opinions now.</p> <h4 id="rfcs"><a class="toclink" href="#rfcs"><a href="https://github.com/rust-lang/rfcs/labels/final-comment-period">RFCs</a></a></h4> <ul> <li>[disposition: close] <a href="https://github.com/rust-lang/rfcs/pull/3218">Rename {Option, Result}::expect to unwrap_or_panic</a></li> <li>[disposition: close] <a href="https://github.com/rust-lang/rfcs/pull/3189">take on bool</a></li> </ul> <h4 id="tracking-issues-prs"><a class="toclink" href="#tracking-issues-prs"><a href="https://github.com/rust-lang/rust/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc">Tracking Issues &amp; PRs</a></a></h4> <ul> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/107200">io: soften ‘at most one write attempt’ requirement in io::Write::write</a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/104363">Make <code>unused_allocation</code> lint against <code>Box::new</code> too</a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/106505">Properly allow macro expanded format_args invocations to uses captures</a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/issues/89065">Add <code>NonZero{I,U}{8,16,32,64,128,size}::{MIN,MAX}</code></a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/106844">allow negative numeric literals in concat!</a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/issues/66893">Tracking issue for atomic_mut_ptr</a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/106921">Add documentation about the memory layout of <code>Cell</code></a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/issues/105021">Tracking issue for <code>PathBuf::as_mut_os_string</code> and <code>Path::as_mut_os_str</code></a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/108157">Use <code>partial_cmp</code> to implement tuple <code>lt</code>/<code>le</code>/<code>ge</code>/<code>gt</code></a></li> </ul> <h3 id="new-and-updated-rfcs"><a class="toclink" href="#new-and-updated-rfcs"><a href="https://github.com/rust-lang/rfcs/pulls">New and Updated RFCs</a></a></h3> <ul> <li>[new] <a href="https://github.com/rust-lang/rfcs/pull/3397">Create RFC for bundling local images in rustdoc output</a></li> <li>[new] <a href="https://github.com/rust-lang/rfcs/pull/3396">Extern types v2</a></li> <li>[new] <a href="https://github.com/rust-lang/rfcs/pull/3394">format-dynamic-fill</a></li> <li>[new] <a href="https://github.com/rust-lang/rfcs/pull/3392">Add RFC on governance, establishing the Leadership Council</a></li> <li>[new] <a href="https://github.com/rust-lang/rfcs/pull/3391">RFC: result_ffi_guarantees</a></li> </ul> <h3 id="call-for-testing"><a class="toclink" href="#call-for-testing"><a href="https://github.com/rust-lang/rfcs/issues?q=label%3Acall-for-testing">Call for Testing</a></a></h3> <p>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:</p> <ul> <li><em>No RFCs issued a call for testing this week.</em></li> </ul> <p>If you are a feature implementer and would like your RFC to appear on the above list, add the new <code>call-for-testing</code> label to your RFC along with a comment providing testing instructions and/or guidance on which aspect(s) of the feature need testing.</p> <h2 id="upcoming-events"><a class="toclink" href="#upcoming-events">Upcoming Events</a></h2> <p>Rusty Events between 2023-03-01 - 2023-03-29 🦀</p> <h3 id="virtual"><a class="toclink" href="#virtual">Virtual</a></h3> <ul> <li>2023-03-01 | Virtual (Indianapolis, IN, US) | <a href="https://www.meetup.com/indyrs/">Indy Rust</a><ul> <li><a href="https://www.meetup.com/indyrs/events/qwtdjsyfcfbcb/"><strong>Indy.rs - Michael Baykov on Category Theory &amp; Argument Parsing</strong></a></li> </ul> </li> <li>2023-03-02 | Virtual (Raleigh, NC, US) | <a href="https://www.meetup.com/triangle-bitdevs/">Triangle BitDevs</a><ul> <li><a href="https://www.meetup.com/triangle-bitdevs/events/291710295/"><strong>Rust for Bitcoiners</strong></a></li> </ul> </li> <li>2023-03-02 | Virtual (Linz, AT) | <a href="https://www.meetup.com/rust-linz/">Rust Linz</a><ul> <li><a href="https://www.meetup.com/rust-linz/events/291483339/"><strong>Rust Meetup Linz - 30th Edition</strong></a></li> </ul> </li> <li>2023-03-07 | Virtual (Buffalo, NY, US) | <a href="https://www.meetup.com/buffalo-rust-meetup/">Buffalo Rust Meetup</a><ul> <li><a href="https://www.meetup.com/buffalo-rust-meetup/events/lsjbbtyfcfbkb/"><strong>Buffalo Rust User Group, First Tuesdays</strong></a></li> </ul> </li> <li>2023-03-07 | Virtual (Santa Clara, CA, US) | <a href="https://www.meetup.com/ucsc-extension-community/">UCSC Extension Community</a><ul> <li><a href="https://www.meetup.com/ucsc-extension-community/events/290906954/"><strong>Programming with Rust</strong></a></li> </ul> </li> <li>2023-03-08 | Virtual (Boulder, CO, US) | <a href="https://www.meetup.com/boulder-elixir-rust/">Boulder Elixir and Rust</a><ul> <li><a href="https://www.meetup.com/boulder-elixir-rust/events/zvxcsryfcfblb/"><strong>Monthly Meetup</strong></a></li> </ul> </li> <li>2023-03-11 | Virtual | <a href="https://discord.gg/yNtPTb2">Rust GameDev</a><ul> <li><a href="https://discord.gg/yNtPTb2"><strong>Rust GameDev Monthly Meetup</strong></a></li> </ul> </li> <li>2023-03-14 | Virtual (Berlin, DE) | <a href="https://berline.rs/">Berlin.rs</a><ul> <li><a href="https://berline.rs/2023/03/14/rust-hack-and-learn.html"><strong>Rust Hack and Learn</strong></a></li> </ul> </li> <li>2023-03-14 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/dallas-rust/">Dallas Rust</a><ul> <li><a href="https://www.meetup.com/dallas-rust/events/291809763/"><strong>Second Tuesday</strong></a></li> </ul> </li> <li>2023-03-14 | Virtual (Redmond, WA, US) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/291676352/"><strong>Crack code interview problems in Rust: S2 Ep1</strong></a></li> </ul> </li> <li>2023-03-15 | Virtual (Cardiff, UK) | <a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff">Rust and C++ Cardiff</a><ul> <li><a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/291354288/"><strong>Injecting Rust Hooks into a 1999 game binary (unsafe)</strong></a></li> </ul> </li> <li>2023-03-15 | Virtual (Vancouver, BC, CA) | <a href="https://www.meetup.com/vancouver-rust/">Vancouver Rust</a><ul> <li><a href="https://www.meetup.com/vancouver-rust/events/wqchctyfcfbtb/"><strong>Rust Study/Hack/Hang-out</strong></a></li> </ul> </li> <li>2023-03-16 | Virtual (Redmond, WA, US) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/291681809/"><strong>Introduction to WebAssembly (WASM) with Rust and WASMEdge</strong></a></li> </ul> </li> <li>2023-03-16 | Virtual (Stuttgart, DE) | <a href="https://www.meetup.com/rust-community-stuttgart">Rust Community Stuttgart</a><ul> <li><a href="https://www.meetup.com/rust-community-stuttgart/events/291847774/"><strong>Rust-Meetup</strong></a></li> </ul> </li> <li>2023-03-21 | Virtual (Redmond, WA, US) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/291676961/"><strong>Crack code interview problems in Rust: S2 Ep2</strong></a></li> </ul> </li> <li>2023-03-21 | Virtual (Washington, DC, US) | <a href="https://www.meetup.com/rustdc/">Rust DC</a><ul> <li><a href="https://www.meetup.com/rustdc/events/vdhxgsyfcfbcc/"><strong>Rust+Tell Lightning Talks</strong></a></li> </ul> </li> <li>2023-03-22 | Virtual (Richmond, VA, US) | <a href="https://www.meetup.com/rustaceans-rva/">Rustaceans RVA</a><ul> <li><a href="https://www.meetup.com/rustaceans-rva/events/291963911/"><strong>Rustaceans RVA - March Meetup</strong></a></li> </ul> </li> <li>2023-03-28 | Virtual (Redmond, WA, US) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/291677113/"><strong>Crack code interview problems in Rust: S2 Ep3</strong></a></li> </ul> </li> <li>2023-03-29 | Virtual (Cardiff, UK) | <a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/">Rust and C++ Cardiff</a><ul> <li><a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/291892487/"><strong>Writing your own rust 'book' with mdBook</strong></a></li> </ul> </li> </ul> <h3 id="asia"><a class="toclink" href="#asia">Asia</a></h3> <ul> <li>2023-03-04 | Kyoto, JP | <a href="https://www.meetup.com/kansai-rust/">Kansai Rust</a><ul> <li><a href="https://www.meetup.com/kansai-rust/events/291614614/"><strong>Fn vs FnMut vs FnOnce</strong></a></li> </ul> </li> </ul> <h3 id="europe"><a class="toclink" href="#europe">Europe</a></h3> <ul> <li>2023-03-01 | Cologne, DE | <a href="https://www.meetup.com/rustcologne/events">Rust Cologne</a><ul> <li><a href="https://www.meetup.com/rustcologne/events/291774935/"><strong>Rust traits for Fn and profit</strong></a></li> </ul> </li> <li>2023-03-02 | Barcelona, ES | <a href="https://bcnrust.github.io/">BcnRust</a><ul> <li><a href="https://www.meetup.com/es-ES/bcnrust/events/291754590/"><strong>9th BcnRust Meetup: Full Stack</strong></a></li> </ul> </li> <li>2023-03-02 | Wrocław, PL | <a href="https://www.meetup.com/rust-wroclaw/">Rust Wrocław</a><ul> <li><a href="https://www.meetup.com/rust-wroclaw/events/291776357/"><strong>Rust Wrocław Meetup #32</strong></a></li> </ul> </li> <li>2023-03-07 | Bratislava, SK | <a href="https://www.meetup.com/bratislava-rust-meetup-group/">Bratislava Rust Meetup Group</a><ul> <li><a href="https://www.meetup.com/bratislava-rust-meetup-group/events/291657555/"><strong>Rust Meetup by Sonalake</strong></a> </li> </ul> </li> <li>2023-03-09 | Basel, CH | <a href="https://www.meetup.com/rust-basel/">Rust Basel</a><ul> <li><a href="https://www.meetup.com/rust-basel/events/291228934/"><strong>Rust Meetup #7</strong></a></li> </ul> </li> <li>2023-03-09 | Delft, NL | <a href="https://www.meetup.com/rust-nederland/">Rust Nederland</a><ul> <li><a href="https://www.meetup.com/rust-nederland/events/291401965/"><strong>Regular track: Embedded Rust</strong></a></li> <li><a href="https://www.meetup.com/rust-nederland/events/291401778/"><strong>Student track: Embedded Rust</strong></a></li> </ul> </li> <li>2023-03-09 | Lyon, FR | <a href="https://www.meetup.com/fr-FR/rust-lyon/">Rust Lyon</a><ul> <li><a href="https://www.meetup.com/fr-FR/rust-lyon/events/291727241/"><strong>Rust Lyon Meetup #2</strong></a></li> </ul> </li> <li>2023-03-15 | Nürnberg, DE | <a href="https://www.meetup.com/rust-noris/">Rust Nuremberg</a><ul> <li><a href="https://www.meetup.com/rust-noris/events/291623203/"><strong>Walk around Embedded World Exhibition</strong></a></li> </ul> </li> <li>2023-03-17 | Stuttgart, DE | <a href="https://www.meetup.com/rust-community-stuttgart">Rust Community Stuttgart</a><ul> <li><a href="https://www.meetup.com/rust-community-stuttgart/events/zmppzsyfcfbwb/"><strong>OnSite Meeting</strong></a></li> </ul> </li> <li>2023-03-28 | Zurich, CH | <a href="https://www.meetup.com/de-DE/rust-zurich/events/291449557/">Rust Zurich</a><ul> <li><a href="https://www.meetup.com/de-DE/rust-zurich/events/291449557/"><strong>High performance concurrent data structures in Rust - March Meetup</strong></a></li> </ul> </li> </ul> <h3 id="north-america"><a class="toclink" href="#north-america">North America</a></h3> <ul> <li>2023-03-01 | Austin, TX, US | <a href="https://www.meetup.com/rust-atx/">Rust ATX</a><ul> <li><a href="https://www.meetup.com/rust-atx/events/291619816/"><strong>Rust Lunch</strong></a></li> </ul> </li> <li>2023-03-09 | Lehi, UT, US | <a href="https://www.meetup.com/utah-rust/">Utah Rust</a><ul> <li><a href="https://www.meetup.com/utah-rust/events/rrwbctyfcfbmb/"><strong>Trails, Triumphs, &amp; Travails of Yet-Another-Database-Crate with PJ and Food!</strong></a></li> </ul> </li> </ul> <h3 id="oceania"><a class="toclink" href="#oceania">Oceania</a></h3> <ul> <li>2023-03-01 | Sydney, NSW, AU | <a href="https://www.meetup.com/rust-sydney/">Rust Sydney</a><ul> <li><a href="https://www.meetup.com/rust-sydney/events/291265163/"><strong>🦀 Lightning Talks - We are back!</strong></a></li> </ul> </li> </ul> <p>If you are running a Rust event please add it to the <a href="https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com">calendar</a> to get it mentioned here. Please remember to add a link to the event too. Email the <a href="mailto:community-team@rust-lang.org">Rust Community Team</a> for access.</p> <h2 id="jobs"><a class="toclink" href="#jobs">Jobs</a></h2> <!-- Rust Jobs: TWiR has stopped featuring individual job postings. You can read more about this change here: https://github.com/rust-lang/this-week-in-rust/issues/3412 --> <p>Please see the latest <a href="https://www.reddit.com/r/rust/comments/10nmtew/official_rrust_whos_hiring_thread_for_jobseekers/">Who's Hiring thread on r/rust</a></p> <h1 id="quote-of-the-week"><a class="toclink" href="#quote-of-the-week">Quote of the Week</a></h1> <blockquote> <p>You've probably come across unsafe. So "unsafe" is a keyword that sort of unlocks super powers and segfaults.</p> </blockquote> <p>– <a href="https://fosdem.org/2023/schedule/event/rust_a_deep_dive_inside_the_rust_frontend_for_gcc/">Arthur Cohen during FOSDEM '23</a></p> <p>Thanks to <a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328/1375">blonk</a> for the suggestion!</p> <p><a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328">Please submit quotes and vote for next week!</a></p> <p><em>This Week in Rust is edited by: <a href="https://github.com/nellshamrell">nellshamrell</a>, <a href="https://github.com/llogiq">llogiq</a>, <a href="https://github.com/cdmistman">cdmistman</a>, <a href="https://github.com/ericseppanen">ericseppanen</a>, <a href="https://github.com/extrawurst">extrawurst</a>, <a href="https://github.com/andrewpollack">andrewpollack</a>, <a href="https://github.com/U007D">U007D</a>, <a href="https://github.com/kolharsam">kolharsam</a>, <a href="https://github.com/joelmarcey">joelmarcey</a>, <a href="https://github.com/mariannegoldin">mariannegoldin</a>, <a href="https://github.com/bennyvasquez">bennyvasquez</a>.</em></p> <p><em>Email list hosting is sponsored by <a href="https://foundation.rust-lang.org/">The Rust Foundation</a></em></p> <p><small><a href="https://www.reddit.com/r/rust/comments/11g1wkc/this_week_in_rust_484/">Discuss on r/rust</a></small></p> This Week in Rust 483 freedit 2023-02-22 2023-02-22 22 <p>Hello and welcome to another issue of <em>This Week in Rust</em>! <a href="https://www.rust-lang.org/">Rust</a> 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? Tag us at <a href="https://twitter.com/ThisWeekInRust">@ThisWeekInRust</a> on Twitter or <a href="https://mastodon.social/@thisweekinrust">@ThisWeekinRust</a> on mastodon.social, or <a href="https://github.com/rust-lang/this-week-in-rust">send us a pull request</a>. Want to get involved? <a href="https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md">We love contributions</a>.</p> <p><em>This Week in Rust</em> is openly developed <a href="https://github.com/rust-lang/this-week-in-rust">on GitHub</a>. If you find any errors in this week's issue, <a href="https://github.com/rust-lang/this-week-in-rust/pulls">please submit a PR</a>.</p> <h2 id="updates-from-rust-community"><a class="toclink" href="#updates-from-rust-community">Updates from Rust Community</a></h2> <!-- Dear community contributors: Please read README.md for guidance on submissions. Each submitted link should be of the form: * [Title of the Linked Page](https://example.com/my_article) If you don't know which category to use, feel free to submit a PR anyway and just ask the editors to select the category. --> <ul> <li><a href="https://sessionize.com/rustconf-2023">RustConf 2023: Call for Proposals</a></li> </ul> <h3 id="official"><a class="toclink" href="#official">Official</a></h3> <ul> <li><a href="https://blog.rust-lang.org/inside-rust/2023/02/14/lang-advisors.html">Language team advisors</a></li> <li><a href="https://blog.rust-lang.org/inside-rust/2023/02/14/lang-team-membership-update.html">Welcome Tyler Mandry to the Rust language team!</a></li> <li><a href="https://blog.rust-lang.org/inside-rust/2023/02/22/governance-reform-rfc.html">Governance Reform RFC Announcement</a></li> </ul> <h3 id="projecttooling-updates"><a class="toclink" href="#projecttooling-updates">Project/Tooling Updates</a></h3> <ul> <li><a href="https://rust-analyzer.github.io/thisweek/2023/02/20/changelog-169.html">rust-analyzer Changelog #169</a></li> <li><a href="https://www.sysgo.com/press-releases/rust-now-available-for-real-time-operating-system-and-hypervisor-pikeos">Rust now available for Real-Time Operating System and Hypervisor PikeOS</a></li> <li><a href="https://relm4.org/blog/posts/announcing_relm4_v0.5">Announcing Relm4 v0.5</a></li> <li><a href="https://www.fornjot.app/blog/weekly-release/2023-w08/">Fornjot (code-first CAD in Rust) - Weekly Release - Accidental Side-Effect</a></li> </ul> <h3 id="observationsthoughts"><a class="toclink" href="#observationsthoughts">Observations/Thoughts</a></h3> <ul> <li><a href="https://www.warp.dev/blog/why-is-building-a-ui-in-rust-so-hard">Why is building a UI in Rust so hard?</a></li> <li><a href="https://theincredibleholk.org/blog/2023/02/16/lightweight-predictable-async-send-bounds/">Lightweight, Predictable Async Send Bounds</a></li> <li><a href="https://smallcultfollowing.com/babysteps/blog/2023/02/13/return-type-notation-send-bounds-part-2/">Return type notation (send bounds, part 2)</a></li> <li><a href="https://blog.shtsoft.eu/2022/12/22/effect-trait-dp.html">Faking Algebraic Effects and Handlers With Traits: A Rust Design Pattern</a></li> <li><a href="https://epage.github.io/blog/2023/02/winnow-toml-edit-combine-nom/">winnow = toml_edit + combine + nom</a></li> <li><a href="https://www.inovex.de/de/blog/rust-vs-go-vs-c-vs-kotlin/">Battle Of The Backends: Rust vs. Go vs. C# vs. Kotlin - inovex GmbH</a></li> <li><a href="https://driftingin.space/posts/bull-case-for-rust-on-web">The Bull Case for Rust on the Web</a></li> <li><a href="https://www.propelauth.com/post/i-love-building-a-startup-in-rust-i-wouldnt-pick-it-again">I love building a startup in Rust. I wouldn't pick it again.</a></li> <li><a href="https://manuel.bernhardt.io/posts/2022-11-04-rust-development-for-the-raspberry-pi-on-apple-silicon/">Rust development for the Raspberry PI on Apple Silicon</a></li> </ul> <h3 id="rust-walkthroughs"><a class="toclink" href="#rust-walkthroughs">Rust Walkthroughs</a></h3> <ul> <li><a href="https://joshmo.hashnode.dev/building-deploying-a-down-detector-telegram-bot-in-rust">Learn how to build and deploy a down detector Telegram bot in Rust</a></li> <li><a href="https://peace.mk/blog/compile-time-correctness-type-state/">Compile Time Correctness: Type State</a></li> <li><a href="https://www.ardanlabs.com/blog/2023/02/build-a-casual-side-scroller-with-rust.html">Build a casual side scroller with Rust</a></li> <li><a href="https://ybnesm.github.io/blah/articles/true-observer-pattern-rust/">True Observer Pattern with Unsubscribe mechanism using Rust</a></li> <li><a href="https://fettblog.eu/refactoring-rust-abstraction-newtype/">Refactoring in Rust: Abstraction with the Newtype Pattern</a></li> <li><a href="https://surma.dev/things/rust-to-webassembly/">Rust to WebAssembly the hard way</a></li> <li><a href="https://apollolabsblog.hashnode.dev/stm32f4-embedded-rust-at-the-pac-system-clock-configuration">STM32F4 Embedded Rust at the PAC: System Clock Configuration</a></li> <li><a href="https://dev.to/quackquack/implement-base64-encoding-using-rust-part-1-base64-for-non-unicode-characters-4944">Implement base64 encoding using Rust - (Part 1) Base64 for non-unicode characters</a></li> <li><a href="https://dev.to/schultyy/how-to-build-a-simple-kafka-producerconsumer-application-in-rust-3pl4">Build a Apache Kafka Producer/Consumer Application in Rust</a></li> <li><a href="https://dev.to/opendataanalytics/learning-rust-by-building-a-to-do-app-2okd">Learning Rust by Building a To-Do App</a></li> <li><a href="https://dev.to/kurt2001/a-nibble-of-quadtrees-in-rust-4o7g">A Nibble of Quadtrees in Rust</a></li> <li><a href="https://dev.to/cyrilmarpaud/embedded-rust-on-esp32c3-board-a-hands-on-quickstart-guide-28mf">Embedded Rust on ESP32C3 Board, a Hands-on Quickstart Guide</a></li> <li><a href="https://www.riskpeep.com/2023/02/make-text-adventure-game-rust-10.html">How to make a Text Adventure game in Rust - X - More Attributes</a></li> <li><a href="https://geeklaunch.io/blog/nothing-in-rust/">Nothing in Rust</a></li> <li>[ES] <a href="https://dev.to/retronauta/libro-the-rust-programming-language-ii-programming-a-guessing-game-8ni">Aprendiendo Rust 🦀️ II. Programming a guessing game</a></li> <li>[video] <a href="https://youtu.be/YxG7PhZ3fb4">Speed up your Rust code with Rayon</a></li> <li>[video] <a href="https://youtu.be/BWhe2UyJv1E">Making Custom Asset Types: Platformer In Bevy #4</a></li> <li><a href="https://rusty-ferris.pages.dev/blog/binary-tree-sum-of-values/">Implementing a Binary Tree in Rust</a></li> <li><a href="https://21-lessons.com/how-to-run-webassembly-from-your-rust-program/">Run WebAssembly from your Rust Program</a></li> </ul> <h3 id="research"><a class="toclink" href="#research">Research</a></h3> <ul> <li><a href="https://arxiv.org/abs/2301.02308">The Usability of Advanced Type Systems: Rust as a Case Study</a></li> </ul> <h3 id="miscellaneous"><a class="toclink" href="#miscellaneous">Miscellaneous</a></h3> <ul> <li><a href="https://blog.jetbrains.com/rust/2023/02/21/learn-rust-with-jetbrains-ides/">Learn Rust With JetBrains IDEs</a></li> <li><a href="https://llogiq.github.io/2023/02/19/rhymes2.html">Rust in Rhymes II explainer</a></li> <li>[audio] <a href="https://rustacean-station.org/episode/lodestone/">Lodestone with Wilbur Zhang, Peter Jiang, and Kevin Huang</a></li> <li><a href="https://www.jetstack.io/blog/rust-nation-uk-2023/">Rust Nation UK 2023</a></li> </ul> <h2 id="crate-of-the-week"><a class="toclink" href="#crate-of-the-week">Crate of the Week</a></h2> <p>This week's crate is <a href="https://github.com/Rustixir/darkbird">Darkbird</a>, a high-concurrency real-time in-memory database.</p> <p>Thanks to <a href="https://users.rust-lang.org/t/crate-of-the-week/2704/1160">DanyalMh</a> for the self-suggestion!</p> <p><a href="https://users.rust-lang.org/t/crate-of-the-week/2704">Please submit your suggestions and votes for next week</a>!</p> <h2 id="call-for-participation"><a class="toclink" href="#call-for-participation">Call for Participation</a></h2> <p>Always wanted to contribute to open-source projects but did not know where to start? Every week we highlight some tasks from the Rust community for you to pick and get started!</p> <p>Some of these tasks may also have mentors available, visit the task page for more information.</p> <ul> <li><a href="https://github.com/rust-lang/miri/issues/2791">miri - Get Miri working on ARM again</a></li> <li><a href="https://github.com/emanuele-em/man-in-the-middle-proxy/issues/9">man-in-the-middle-proxy - Add Custom headers requests</a></li> <li><a href="https://github.com/build-trust/ockam/issues/4268">Ockam - Create clap command to delete a TCP Outlet on a node</a></li> <li><a href="https://github.com/build-trust/ockam/issues/4269">Ockam - Create clap command to delete a TCP Inlet on a node</a></li> <li><a href="https://github.com/build-trust/ockam/issues/4108">Ockam - Add a Github Action to avoid conflicts in TypeTag ids</a></li> <li><a href="https://github.com/build-trust/ockam/issues/4307">Ockam - Remove the disable/enable_check_credential arguments from ockam tcp-outlet create</a></li> <li><a href="https://github.com/build-trust/ockam/issues/4308">Ockam - Remove the disable/enable_check_credential arguments from ockam tcp-inlet create</a></li> <li><a href="https://github.com/build-trust/ockam/issues/4318">Ockam - Update ockam project addon configure influx-db clap command to ockam project addon configure influxdb</a></li> </ul> <p>If you are a Rust project owner and are looking for contributors, please submit tasks <a href="https://users.rust-lang.org/t/twir-call-for-participation/4821">here</a>.</p> <h2 id="updates-from-the-rust-project"><a class="toclink" href="#updates-from-the-rust-project">Updates from the Rust Project</a></h2> <p>396 pull requests were <a href="https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2023-02-13..2023-02-20">merged in the last week</a></p> <ul> <li><a href="https://github.com/rust-lang/rust/pull/108086">wasm: register the <code>relaxed-simd</code> target feature</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107968">enable <code>#[thread_local]</code> on armv6k-nintendo-3ds</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106476">add sanitizer support for modern iOS platforms</a></li> <li><a href="https://github.com/rust-lang/rust/pull/99679">add <code>kernel-address</code> sanitizer support for freestanding targets</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108033">add an unstable <code>#[rustc_coinductive]</code> attribute</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107985">added another error to be processed in fallback</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107867">check that built-in callable types validate their output type is <code>Sized</code> (in new solver)</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107489">implement partial support for non-lifetime binders</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108186">deny non-lifetime bound vars in <code>for&lt;..&gt; ||</code> closure binders</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107542">don't call <code>with_reveal_all_normalized</code> in const-eval when <code>param_env</code> has inference vars in it</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108162">don't eagerly convert principal to string</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108031">don't recover lifetimes/labels containing emojis as character literals</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108049">don't suggest <code>#[doc(hidden)]</code> trait methods with matching return type</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107921">make codegen choose whether to emit overflow checks</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108203">fix RPITITs in default trait methods (by assuming projection predicates in param-env)</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107766">fix json reexports of different items with same name</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107902">improve the suggestion on future not awaited</a></li> <li><a href="https://github.com/rust-lang/rust/pull/103695">unexpected trait bound not satisfied in HRTB and Associated Type</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107772">make <code>dyn*</code>'s value backend type a pointer</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106347">more accurate spans for arg removal suggestion</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107449">enable CopyProp</a></li> <li><a href="https://github.com/rust-lang/rust/pull/105274">enable instcombine for mutable reborrows</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107833">factor query arena allocation out from query caches</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108006">avoid accessing HIR when it can be avoided</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107329">optimize <code>LazyLock</code> size</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108020">optimize <code>mk_region</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/108057">prevent some attributes from being merged with others on reexports</a></li> <li><a href="https://github.com/rust-lang/rust/pull/101841">remove save-analysis</a></li> <li><a href="https://github.com/rust-lang/rust/pull/105300">rework <code>min_choice</code> algorithm of member constraints</a></li> <li><a href="https://github.com/rust-lang/rust/pull/103478">suggest fix for misplaced generic params on fn item</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107173">suggest the correct array length on mismatch</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107942">tighter spans for bad inherent <code>impl</code> self types</a></li> <li><a href="https://github.com/rust-lang/rust/pull/105961">type-directed probing for inherent associated types</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108007">use <code>is_str</code> instead of string kind comparison</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108047">use <code>target</code> instead of <code>machine</code> for mir interpreter integer handling</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107969">use covariance on type relations of field projection types if possible</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108040">use derive attributes for uninteresting traversals</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106372">use id-based thread parking on SOLID</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108200">use restricted Damerau-Levenshtein distance for diagnostics</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107940">use semantic equality for const param type equality assertion</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108084">constify <code>RangeBounds</code>, <code>RangeX::contains</code> and <code>RangeX::is_empty</code> (where applicable)</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106241">implement more methods for <code>vec_deque::IntoIter</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/108235">use custom implementation of <code>read_buf</code> in Read for &amp;'a FileDesc</a></li> <li><a href="https://github.com/rust-lang/futures-rs/pull/2710">futures: add <code>AbortHandle::is_aborted()</code></a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11740">cargo: enhance help texts of position args</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106316">only include stable lints in <code>rustdoc::all</code> group</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107765">rustdoc: perform name resolver cleanups</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108129">rustdoc: correctly handle links starting with whitespace</a></li> <li><a href="https://github.com/rust-lang/rust/pull/108209">rustdoc: cleanup doc link extraction</a></li> <li><a href="https://github.com/rust-lang/rustfmt/pull/5692">rustfmt: use correct span for struct generics</a></li> <li><a href="https://github.com/rust-lang/rust-bindgen/pull/2415">bindgen: add support for enums with the wrapped static functions feature</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10356">clippy: add <code>let_underscore_untyped</code> lint</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10342">clippy: add <code>question_mark_used</code> lint</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10360">clippy: add the <code>transmute_int_to_non_zero</code> lint</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10163">clippy: add <code>significant_drop_tightening</code> lint</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10368">clippy: <code>significant_drop_tightening</code>: evaluate the return expression of a block</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10363">clippy: <code>significant_drop_tightening</code>: ignore inexpensive statements</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10321">clippy: fix false positives for <code>extra_unused_type_parameters</code></a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10361">clippy: stop <code>bytes_nth</code> from suggesting code that does not compile</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10357">clippy: stop <code>doc_markdown</code> requiring backticks on links to external websites</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10382">clippy: <code>box_default</code>: don't omit the type of the removed trait object</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10336">clippy: <code>manual_let_else</code>: do not suggest semantically different replacements</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10332">clippy: <code>manual_let_else</code>: let/else is not divergent by default</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10311">clippy: <code>never_loop</code> Fix false positive with labeled blocks</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10343">clippy: <code>uninlined_format_args</code>: do not inline argument with generic parameters</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10353">clippy: change <code>unusual_byte_groupings</code> to only require byte groupings of equal size</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10346">clippy: do not base <code>map_entry</code> lint suggestion on expanded code</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10345">clippy: fix <code>needless_return</code> incorrect suggestion when returning if sequence</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10338">clippy: ignore synthetic type parameters for <code>extra_unused_type_parameters</code></a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10328">clippy: liberate late-bound regions rather than erasing them in <code>needless_pass_by_value</code></a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14153">rust-analyzer: add v7 metadata support to rust-analyzer</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14147">rust-analyzer: don't assume VSCode internal commands in the server</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14141">rust-analyzer: support UTF-32 position encoding</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14157">rust-analyzer: adjust binding mode inlay hints to render better with @ patterns</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14160">rust-analyzer: bring back hovering call parens for return type info</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14122">rust-analyzer: don't expand macros in the same expansion tree after overflow</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14123">rust-analyzer: don't trigger postfix completion in <code>if</code> block which has an <code>else</code> block</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14144">rust-analyzer: search raw identifiers without prefix</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14149">rust-analyzer: trigger call info for more completions of signature having things</a></li> </ul> <h3 id="rust-compiler-performance-triage"><a class="toclink" href="#rust-compiler-performance-triage">Rust Compiler Performance Triage</a></h3> <p>Overall a fairly positive week, with few noise-related regressions or improvements and many benchmarks showing significant improvements. The one large regression is limited to documentation builds and has at least a partial fix already planned.</p> <p>Other wins this week include an average <a href="https://perf.rust-lang.org/?start=9bb6e60d1f1360234aae90c97964c0fa5524f141&amp;end=3fee48c161a48b0c142d3998fff56faee96bd56c&amp;absolute=false&amp;stat=max-rss&amp;kind=percentfromfirst">improvement</a> of around 1% in maximum memory usage of optimized builds, and a 2% average <a href="https://perf.rust-lang.org/?start=9bb6e60d1f1360234aae90c97964c0fa5524f141&amp;end=3fee48c161a48b0c142d3998fff56faee96bd56c&amp;absolute=false&amp;stat=size%3Alinked_artifact&amp;kind=percentfromfirst">reduction</a> in compiled binary sizes. These are fairly significant wins for these metrics.</p> <p>Triage done by <strong>@simulacrum</strong>. Revision range: <a href="https://perf.rust-lang.org/?start=9bb6e60d1f1360234aae90c97964c0fa5524f141&amp;end=3fee48c161a48b0c142d3998fff56faee96bd56c&amp;absolute=false&amp;stat=instructions%3Au">9bb6e60..3fee48c1</a></p> <p>3 Regressions, 3 Improvements, 3 Mixed; 2 of them in rollups 45 artifact comparisons made in total</p> <p><a href="https://github.com/rust-lang/rustc-perf/blob/master/triage/2023-02-21.md">Full report</a></p> <h3 id="approved-rfcs"><a class="toclink" href="#approved-rfcs"><a href="https://github.com/rust-lang/rfcs/commits/master">Approved RFCs</a></a></h3> <p>Changes to Rust follow the Rust <a href="https://github.com/rust-lang/rfcs#rust-rfcs">RFC (request for comments) process</a>. These are the RFCs that were approved for implementation this week:</p> <ul> <li><em>No RFCs were approved this week.</em></li> </ul> <h3 id="final-comment-period"><a class="toclink" href="#final-comment-period">Final Comment Period</a></h3> <p>Every week, <a href="https://www.rust-lang.org/team.html">the team</a> announces the 'final comment period' for RFCs and key PRs which are reaching a decision. Express your opinions now.</p> <h4 id="rfcs"><a class="toclink" href="#rfcs"><a href="https://github.com/rust-lang/rfcs/labels/final-comment-period">RFCs</a></a></h4> <ul> <li><em>No RFCs entered Final Comment Period this week.</em></li> </ul> <h4 id="tracking-issues-prs"><a class="toclink" href="#tracking-issues-prs"><a href="https://github.com/rust-lang/rust/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc">Tracking Issues &amp; PRs</a></a></h4> <ul> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/108143">rustdoc: search by macro when query ends with <code>!</code></a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/103682">Stabilize rustdoc <code>--test-run-directory</code></a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/107941">Treat <code>str</code> as containing <code>[u8]</code> for auto trait purposes</a></li> </ul> <h3 id="new-and-updated-rfcs"><a class="toclink" href="#new-and-updated-rfcs"><a href="https://github.com/rust-lang/rfcs/pulls">New and Updated RFCs</a></a></h3> <ul> <li>[new] <a href="https://github.com/rust-lang/rfcs/pull/3390">Stabilize may_dangle</a></li> <li>[new] <a href="https://github.com/rust-lang/rfcs/pull/3389">Add a <code>[lints]</code> table to <code>Cargo.toml</code></a></li> </ul> <h3 id="call-for-testing"><a class="toclink" href="#call-for-testing"><a href="https://github.com/rust-lang/rfcs/issues?q=label%3Acall-for-testing">Call for Testing</a></a></h3> <p>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:</p> <ul> <li><em>No RFCs issued a call for testing this week.</em></li> </ul> <p>If you are a feature implementer and would like your RFC to appear on the above list, add the new <code>call-for-testing</code> label to your RFC along with a comment providing testing instructions and/or guidance on which aspect(s) of the feature need testing.</p> <h2 id="upcoming-events"><a class="toclink" href="#upcoming-events">Upcoming Events</a></h2> <p>Rusty Events between 2023-02-22 - 2023-03-22 🦀</p> <h3 id="virtual"><a class="toclink" href="#virtual">Virtual</a></h3> <ul> <li>2023-02-23 | Virtual (Charlottesville, VA, US) | <a href="https://www.meetup.com/charlottesville-rust-meetup/">Charlottesville Rust Meetup</a><ul> <li><a href="https://www.meetup.com/charlottesville-rust-meetup/events/291248593/"><strong>Tock, a Rust based Embedded Operating System</strong></a></li> </ul> </li> <li>2023-02-23 | Virtual (Kassel, DE) | <a href="https://www.meetup.com/java-user-group-hessen-jugh/">Java User Group Hessen</a><ul> <li><a href="https://www.meetup.com/java-user-group-hessen-jugh/events/290346591/"><strong>Eine Einführung in Rust (Stefan Baumgartner)</strong></a></li> </ul> </li> <li>2023-02-23 | Virtual (México City, MX) | <a href="https://www.meetup.com/rust-mx/">Rust MX</a><ul> <li><a href="https://www.meetup.com/rust-mx/events/291456677/"><strong>Rust: ¿por qué es una opción adecuada para implantar Blockchain?</strong></a></li> </ul> </li> <li>2023-02-24 | Virtual (Tunis, TN) | <a href="https://www.meetup.com/rust-tunisia/">Rust Meetup Tunisia</a><ul> <li><a href="https://www.meetup.com/rust-tunisia/events/291534817/"><strong>Rust Meetup Tunisia - Volume I, Number II</strong></a></li> </ul> </li> <li>2023-02-28 | Virtual (Berlin, DE) | <a href="https://www.meetup.com/opentechschool-berlin/">Open Tech School Berlin</a><ul> <li><a href="https://www.meetup.com/opentechschool-berlin/events/290852327/"><strong>Rust Hack and Learn</strong></a></li> </ul> </li> <li>2023-02-28 | Virtual (Cardiff, UK) | <a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff">Rust and C++ Cardiff</a><ul> <li><a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/291338734/"><strong>Rust Nation - What we learnt</strong></a></li> </ul> </li> <li>2023-02-28 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/Dallas-Rust/">Dallas Rust</a><ul> <li><a href="https://www.meetup.com/dallas-rust/events/qndgwsyfcdblc/"><strong>Last Tuesday</strong></a></li> </ul> </li> <li>2023-02-28 | Virtual (Munich, DE) | <a href="https://www.meetup.com/rust-munich/">Rust Munich</a><ul> <li><a href="https://www.meetup.com/rust-munich/events/291437669/"><strong>Rust Munich 2023 / 1 - hybrid</strong></a></li> </ul> </li> <li>2023-03-01 | Virtual (Indianapolis, IN, US) | <a href="https://www.meetup.com/indyrs/">Indy Rust</a><ul> <li><a href="https://www.meetup.com/indyrs/events/qwtdjsyfcfbcb/"><strong>Indy.rs - Michael Baykov on Category Theory &amp; Argument Parsing</strong></a></li> </ul> </li> <li>2023-03-02 | Virtual (Linz, AT) | <a href="https://www.meetup.com/rust-linz/">Rust Linz</a><ul> <li><a href="https://www.meetup.com/rust-linz/events/291483339/"><strong>Rust Meetup Linz - 30th Edition</strong></a></li> </ul> </li> <li>2023-03-07 | Virtual (Buffalo, NY, US) | <a href="https://www.meetup.com/buffalo-rust-meetup/">Buffalo Rust Meetup</a><ul> <li><a href="https://www.meetup.com/buffalo-rust-meetup/events/lsjbbtyfcfbkb/"><strong>First Tuesdays</strong></a></li> </ul> </li> <li>2023-03-08 | Virtual (Boulder, CO, US) | <a href="https://www.meetup.com/boulder-elixir-rust/">Boulder Elixir and Rust</a><ul> <li><a href="https://www.meetup.com/boulder-elixir-rust/events/zvxcsryfcfblb/"><strong>Monthly Meetup</strong></a></li> </ul> </li> <li>2023-03-11 | Virtual | <a href="https://discord.gg/yNtPTb2">Rust GameDev</a><ul> <li><a href="https://discord.gg/yNtPTb2"><strong>Rust GameDev Monthly Meetup</strong></a></li> </ul> </li> <li>2023-03-14 | Virtual (Berlin, DE) | <a href="https://berline.rs/">Berlin.rs</a><ul> <li><a href="https://berline.rs/2023/03/14/rust-hack-and-learn.html"><strong>Rust Hack and Learn</strong></a></li> </ul> </li> <li>2023-03-15 | Virtual (Cardiff, UK) | <a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff">Rust and C++ Cardiff</a><ul> <li><a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/291354288/"><strong>Injecting Rust Hooks into a 1999 game binary (unsafe)</strong></a></li> </ul> </li> <li>2023-03-15 | Virtual (Vancouver, BC, CA) | <a href="https://www.meetup.com/vancouver-rust/">Vancouver Rust</a><ul> <li><a href="https://www.meetup.com/vancouver-rust/events/wqchctyfcfbtb/"><strong>Rust Study/Hack/Hang-out</strong></a></li> </ul> </li> <li>2023-03-21 | Virtual (Washington, DC, US) | <a href="https://www.meetup.com/rustdc/">Rust DC</a><ul> <li><a href="https://www.meetup.com/rustdc/events/vdhxgsyfcfbcc/"><strong>Mid-month Rustful</strong></a></li> </ul> </li> </ul> <h3 id="asia"><a class="toclink" href="#asia">Asia</a></h3> <ul> <li>2023-03-04 | Kyoto, JP | <a href="https://www.meetup.com/kansai-rust/">Kansai Rust</a><ul> <li><a href="https://www.meetup.com/kansai-rust/events/291614614/"><strong>Fn vs FnMut vs FnOnce</strong></a></li> </ul> </li> </ul> <h3 id="europe"><a class="toclink" href="#europe">Europe</a></h3> <ul> <li>2023-02-23 | Bordeaux, FR | <a href="https://www.meetup.com/dedotalk/">DedoTalk</a><ul> <li><a href="https://www.meetup.com/dedotalk/events/291199962/"><strong>#1 DedoTalk 🎙️ : Rust pour un développeur Python</strong></a></li> </ul> </li> <li>2023-02-23 | Copenhagen, DK | <a href="https://www.meetup.com/copenhagen-rust-community">Copenhagen Rust Community</a><ul> <li><a href="https://www.meetup.com/copenhagen-rust-community/events/291288154/"><strong>Rust metup #33</strong></a></li> </ul> </li> <li>2023-02-23 | Vienna, AT | <a href="https://www.meetup.com/rust-vienna">Rust Vienna</a><ul> <li><a href="https://www.meetup.com/rust-vienna/events/291465732/"><strong>Rust Meetup Revived with an Exciting Exploration of Ownership!</strong></a></li> </ul> </li> <li>2023-02-28 | Munich, DE + Virtual | <a href="https://www.meetup.com/rust-munich/">Rust Munich</a><ul> <li><a href="https://www.meetup.com/rust-munich/events/291437669/"><strong>Rust Munich 2023 / 1 - hybrid</strong></a></li> </ul> </li> <li>2023-02-28 | Nijmegen, NL | <a href="https://www.meetup.com/rust-nederland/">Rust Nederland</a><ul> <li><a href="https://www.meetup.com/rust-nederland/events/291489123/"><strong>Regular track: Rust at RU</strong></a></li> <li><a href="https://www.meetup.com/rust-nederland/events/291488539/"><strong>Student track: Rust at RU</strong></a></li> </ul> </li> <li>2023-03-01 | Cologne, DE | <a href="https://www.meetup.com/rustcologne/events">Rust Cologne</a><ul> <li><a href="https://www.meetup.com/rustcologne/events/291774935/"><strong>Rust traits for Fn and profit</strong></a></li> </ul> </li> <li>2023-03-02 | Barcelona, ES | <a href="https://bcnrust.github.io/">BcnRust</a><ul> <li><a href="https://www.meetup.com/es-ES/bcnrust/events/291754590/"><strong>9th BcnRust Meetup: Full Stack</strong></a></li> </ul> </li> <li>2023-03-02 | Wrocław, PL | <a href="https://www.meetup.com/rust-wroclaw/">Rust Wrocław</a><ul> <li><a href="https://www.meetup.com/rust-wroclaw/events/291776357/"><strong>Rust Wrocław Meetup #32</strong></a></li> </ul> </li> <li>2023-03-07 | Bratislava, SK | <a href="https://www.meetup.com/bratislava-rust-meetup-group/">Bratislava Rust Meetup Group</a><ul> <li><a href="https://www.meetup.com/bratislava-rust-meetup-group/events/291657555/"><strong>Rust Meetup by Sonalake</strong></a> </li> </ul> </li> <li>2023-03-09 | Basel, CH | <a href="https://www.meetup.com/rust-basel/">Rust Basel</a><ul> <li><a href="https://www.meetup.com/rust-basel/events/291228934/"><strong>Rust Meetup #7</strong></a></li> </ul> </li> <li>2023-03-09 | Delft, NL | <a href="https://www.meetup.com/rust-nederland/">Rust Nederland</a><ul> <li><a href="https://www.meetup.com/rust-nederland/events/291401965/"><strong>Regular track: Embedded Rust</strong></a></li> <li><a href="https://www.meetup.com/rust-nederland/events/291401778/"><strong>Student track: Embedded Rust</strong></a></li> </ul> </li> <li>2023-03-09 | Lyon, FR | <a href="https://www.meetup.com/fr-FR/rust-lyon/">Rust Lyon</a><ul> <li><a href="https://www.meetup.com/fr-FR/rust-lyon/events/291727241/"><strong>Rust Lyon Meetup #2</strong></a></li> </ul> </li> <li>2023-03-15 | Nürnberg, DE | <a href="https://www.meetup.com/rust-noris/">Rust Nuremberg</a><ul> <li><a href="https://www.meetup.com/rust-noris/events/291623203/"><strong>Walk around Embedded World Exhibition</strong></a></li> </ul> </li> </ul> <h3 id="north-america"><a class="toclink" href="#north-america">North America</a></h3> <ul> <li>2023-02-23 | Mountain View, CA, US | <a href="https://www.meetup.com/rust-study-group/">Mountain View Rust Study Group</a><ul> <li><a href="https://www.meetup.com/rust-study-group/events/291623636/"><strong>Rust Meetup at Hacker Dojo</strong></a></li> </ul> </li> <li>2023-03-01 | Austin, TX, US | <a href="https://www.meetup.com/rust-atx/">Rust ATX</a><ul> <li><a href="https://www.meetup.com/rust-atx/events/291619816/"><strong>Rust Lunch</strong></a></li> </ul> </li> <li>2023-03-09 | Lehi, UT, US | <a href="https://www.meetup.com/utah-rust/">Utah Rust</a><ul> <li><a href="https://www.meetup.com/utah-rust/events/rrwbctyfcfbmb/"><strong>Trails, Triumphs, &amp; Travails of Yet-Another-Database-Crate with PJ and Food!</strong></a></li> </ul> </li> </ul> <h3 id="oceania"><a class="toclink" href="#oceania">Oceania</a></h3> <ul> <li>2023-02-23 | Brisbane, QLD, AU | <a href="https://www.meetup.com/rust-brisbane/">Rust Brisbane</a><ul> <li><a href="https://www.meetup.com/rust-brisbane/events/291377036/"><strong>February Meetup</strong></a></li> </ul> </li> <li>2023-02-28 | Canberra, ACT, AU | <a href="https://www.meetup.com/rust-canberra/">Canberra Rust User Group</a><ul> <li><a href="https://www.meetup.com/rust-canberra/events/291278417/"><strong>February Meetup</strong></a></li> </ul> </li> <li>2023-03-01 | Sydney, NSW, AU | <a href="https://www.meetup.com/rust-sydney/">Rust Sydney</a><ul> <li><a href="https://www.meetup.com/rust-sydney/events/291265163/"><strong>🦀 Lightning Talks - We are back!</strong></a></li> </ul> </li> </ul> <h3 id="south-america"><a class="toclink" href="#south-america">South America</a></h3> <ul> <li>2023-02-22 | Montevideo, UY | <a href="https://www.meetup.com/rust-uruguay/">Rust Meetup Uruguay</a><ul> <li><a href="https://www.meetup.com/rust-uruguay/events/291386143/"><strong>Hands on: Lifetimes</strong></a></li> </ul> </li> </ul> <p>If you are running a Rust event please add it to the <a href="https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com">calendar</a> to get it mentioned here. Please remember to add a link to the event too. Email the <a href="mailto:community-team@rust-lang.org">Rust Community Team</a> for access.</p> <h2 id="jobs"><a class="toclink" href="#jobs">Jobs</a></h2> <!-- Rust Jobs: TWiR has stopped featuring individual job postings. You can read more about this change here: https://github.com/rust-lang/this-week-in-rust/issues/3412 --> <p>Please see the latest <a href="https://www.reddit.com/r/rust/comments/10nmtew/official_rrust_whos_hiring_thread_for_jobseekers/">Who's Hiring thread on r/rust</a></p> <h1 id="quote-of-the-week"><a class="toclink" href="#quote-of-the-week">Quote of the Week</a></h1> <blockquote> <p>It’s <em>enjoyable</em> to write Rust, which is maybe kind of weird to say, but it’s just the language is fantastic. It’s fun. You feel like a magician, and that never happens in other languages.</p> </blockquote> <p>– <a href="https://www.technologyreview.com/2023/02/14/1067869/rust-worlds-fastest-growing-programming-language/">Parker Timmerman cited in a TechnologyReview article</a></p> <p>Thanks to <a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328/1373">robin</a> for the suggestion!</p> <p><a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328">Please submit quotes and vote for next week!</a></p> <p><em>This Week in Rust is edited by: <a href="https://github.com/nellshamrell">nellshamrell</a>, <a href="https://github.com/llogiq">llogiq</a>, <a href="https://github.com/cdmistman">cdmistman</a>, <a href="https://github.com/ericseppanen">ericseppanen</a>, <a href="https://github.com/extrawurst">extrawurst</a>, <a href="https://github.com/andrewpollack">andrewpollack</a>, <a href="https://github.com/U007D">U007D</a>, <a href="https://github.com/kolharsam">kolharsam</a>, <a href="https://github.com/joelmarcey">joelmarcey</a>, <a href="https://github.com/mariannegoldin">mariannegoldin</a>, <a href="https://github.com/bennyvasquez">bennyvasquez</a>.</em></p> <p><em>Email list hosting is sponsored by <a href="https://foundation.rust-lang.org/">The Rust Foundation</a></em></p> <p><small><a href="https://www.reddit.com/r/rust/comments/119s0gv/this_week_in_rust_483/">Discuss on r/rust</a></small></p> This Week in Rust 482 freedit 2023-02-15 2023-02-15 23 <p>Hello and welcome to another issue of <em>This Week in Rust</em>! <a href="https://www.rust-lang.org/">Rust</a> 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? Tag us at <a href="https://twitter.com/ThisWeekInRust">@ThisWeekInRust</a> on Twitter or <a href="https://mastodon.social/@thisweekinrust">@ThisWeekinRust</a> on mastodon.social, or <a href="https://github.com/rust-lang/this-week-in-rust">send us a pull request</a>. Want to get involved? <a href="https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md">We love contributions</a>.</p> <p><em>This Week in Rust</em> is openly developed <a href="https://github.com/rust-lang/this-week-in-rust">on GitHub</a>. If you find any errors in this week's issue, <a href="https://github.com/rust-lang/this-week-in-rust/pulls">please submit a PR</a>.</p> <h2 id="updates-from-rust-community"><a class="toclink" href="#updates-from-rust-community">Updates from Rust Community</a></h2> <!-- Dear community contributors: Please read README.md for guidance on submissions. Each submitted link should be of the form: * [Title of the Linked Page](https://example.com/my_article) If you don't know which category to use, feel free to submit a PR anyway and just ask the editors to select the category. --> <h3 id="newsletters"><a class="toclink" href="#newsletters">Newsletters</a></h3> <ul> <li><a href="https://rustnigeria.curated.co/issues/14#start">Rust Nigeria #14</a></li> </ul> <h3 id="projecttooling-updates"><a class="toclink" href="#projecttooling-updates">Project/Tooling Updates</a></h3> <ul> <li><a href="https://www.fornjot.app/blog/weekly-release/2023-w07/">Fornjot (code-first CAD in Rust) - Weekly Release - Really Shouldn't Be That Hard</a></li> <li><a href="https://gtk-rs.org/blog/2023/02/10/new-release.html">New release – gtk-rs</a></li> <li><a href="https://rust-analyzer.github.io/thisweek/2023/02/13/changelog-168.html">rust-analyzer changelog #168</a></li> <li><a href="https://intellij-rust.github.io/2023/02/13/changelog-188.html">IntelliJ Rust Changelog #188</a></li> <li><a href="https://github.com/meilisearch/meilisearch/releases/tag/v1.0.0/">Meilisearch releases v1.0, the first completely stable version of its open-source search engine</a></li> <li><a href="https://zenoh.io/blog/2023-02-10-zenoh-flow/">Zenoh-Flow a Rust-based data-flow programming framework build on Zenoh</a></li> <li><a href="https://github.com/greyblake/nutype">Nutype - the newtype with guarantees</a></li> <li><a href="https://www.lpalmieri.com/posts/pavex-progress-report-01/">pavex, a new Rust web framework - Progress report #1</a></li> </ul> <h3 id="observationsthoughts"><a class="toclink" href="#observationsthoughts">Observations/Thoughts</a></h3> <ul> <li><a href="https://www.technologyreview.com/2023/02/14/1067869/rust-worlds-fastest-growing-programming-language/">How Rust went from a side project to the world’s most-loved programming language</a></li> <li><a href="https://fasterthanli.me/articles/the-bottom-emoji-breaks-rust-analyzer">The bottom emoji breaks rust-analyzer</a></li> <li><a href="https://surma.dev/things/rust-to-webassembly/index.html">Rust to WebAssembly the hard way</a></li> <li><a href="https://mattpo.pe/posts/from-erlang-to-lunatic/">From Erlang to Lunatic</a></li> <li><a href="https://apollolabsblog.hashnode.dev/stm32f4-embedded-rust-at-the-pac-gpio-control">STM32F4 Embedded Rust at the PAC: GPIO Control</a></li> <li><a href="https://burn-rs.github.io/blog/a-case-for-rust-in-deep-learning">A Case for Rust in Deep Learning</a></li> <li><a href="https://tweedegolf.nl/en/blog/85/trustzone-trials-tribulations">TrustZone, trials and tribulations</a></li> <li>[video] <a href="https://www.youtube.com/watch?v=-UEyf1li1A4">Rust Releases! 1.67.0 &amp; 1.67.1</a></li> <li><a href="https://hegdenu.net/posts/track-caller/">Everything you didn't need to know about <code>#[track_caller]</code></a></li> </ul> <h3 id="rust-walkthroughs"><a class="toclink" href="#rust-walkthroughs">Rust Walkthroughs</a></h3> <ul> <li>[video] <a href="https://www.youtube.com/watch?v=YnmBotet6_M">Build and deploy a Wasm smart contract with Rust-based language</a></li> <li>[video] <a href="https://www.youtube.com/watch?v=Ph7xHhBfH0w">Write better parsers with nom_supreme</a></li> </ul> <h3 id="miscellaneous"><a class="toclink" href="#miscellaneous">Miscellaneous</a></h3> <ul> <li>[video] <a href="https://www.youtube.com/watch?v=zGS-HqcAvA4">From cargo to crates.io and back again</a></li> <li>[video] <a href="https://m.youtube.com/live/_qUcEOQJByU?feature=share">Functional correctness with refinement types for Rust</a></li> <li>[audio] <a href="https://rustacean-station.org/episode/aurimas-blazulionis/">Rust ABI with Aurimas Blažulionis</a></li> <li>[audio] <a href="https://rustacean-station.org/episode/rust-1.65-1.66-1.67/">What's New in Rust 1.65, 1.66, and 1.67</a></li> <li>[audio] <a href="https://opensourcesecuritypodcast.libsyn.com/episode-362-a-lesson-in-rust-from-carol-nichols">Open Source Security Podcast: A lesson in Rust from Carol Nichols</a></li> </ul> <h2 id="crate-of-the-week"><a class="toclink" href="#crate-of-the-week">Crate of the Week</a></h2> <p>This week's crate is <a href="https://github.com/sysid/bkmr">bkmr</a>, a fast CLI bookmark manager and launcher.</p> <p>Thanks to <a href="https://users.rust-lang.org/t/crate-of-the-week/2704/1159">sysid</a> for the self-suggestion!</p> <p><a href="https://users.rust-lang.org/t/crate-of-the-week/2704">Please submit your suggestions and votes for next week</a>!</p> <h2 id="call-for-participation"><a class="toclink" href="#call-for-participation">Call for Participation</a></h2> <p>Always wanted to contribute to open-source projects but did not know where to start? Every week we highlight some tasks from the Rust community for you to pick and get started!</p> <p>Some of these tasks may also have mentors available, visit the task page for more information.</p> <ul> <li><a href="https://gitlab.gnome.org/World/warp/-/issues/39">warp - [Windows] locale and installer</a></li> <li><a href="https://github.com/emanuele-em/man-in-the-middle-proxy/issues/5">man-in-the-middle-proxy - custom certificate</a></li> <li><a href="https://github.com/emanuele-em/man-in-the-middle-proxy/issues/6">man-in-the-middle-proxy - Filter request by method</a></li> <li><a href="https://github.com/emanuele-em/man-in-the-middle-proxy/issues/7">man-in-the-middle-proxy - Request duplication</a></li> <li><a href="https://github.com/emanuele-em/man-in-the-middle-proxy/issues/8">man-in-the-middle-proxy - Delete single request</a></li> <li><a href="https://github.com/emanuele-em/man-in-the-middle-proxy/issues/9">man-in-the-middle-proxy - modify request with custom fields and headers</a></li> </ul> <p>If you are a Rust project owner and are looking for contributors, please submit tasks <a href="https://users.rust-lang.org/t/twir-call-for-participation/4821">here</a>.</p> <h2 id="updates-from-the-rust-project"><a class="toclink" href="#updates-from-the-rust-project">Updates from the Rust Project</a></h2> <p>387 pull requests were <a href="https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2023-02-06..2023-02-13">merged in the last week</a></p> <ul> <li><a href="https://github.com/rust-lang/rust/pull/102963">add <code>-Z instrument-xray</code> flag</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106938">add missing normalization for union fields types</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107657">add only modified subcommand for compiletest</a></li> <li><a href="https://github.com/rust-lang/rust/pull/105019">add parentheses properly for borrowing suggestion</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107863">allow multiple candidates with same response in new solver</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107866">allow wasi-libc to initialize its environment variables lazily</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107789">avoid exposing type parameters and implementation details sourced from macro expansions</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107815">disqualify <code>auto trait</code> built-in impl in new solver if explicit <code>impl</code> exists</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107803">do not bring trait alias supertraits into scope</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107813">do not eagerly recover for bad <code>impl Trait</code> types in macros</a></li> <li><a href="https://github.com/rust-lang/rust/pull/105601">enable new rlib in non stable cases</a></li> <li><a href="https://github.com/rust-lang/rust/pull/101680">fix implied outlives bounds logic for projections</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107671">fix suggestions rendering when the diff span is multiline</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107507">implement <code>deferred_projection_equality</code> for erica solver</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107838">introduce <code>-Zterminal-urls</code> to use OSC8 for error codes</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106180">make &amp;mut !Unpin not dereferenceable, and <code>Box&lt;!Unpin&gt;</code> not noalias</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107777">make <code>derive_const</code> derive properly const-if-const impls</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107706">mark <code>'atomic_mut_ptr'</code> methods const</a></li> <li><a href="https://github.com/rust-lang/rust/pull/85158">mir-Opt for copying enums with large discrepancies</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107717">optimize <code>TyKind::eq</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/107529">optimize <code>query_cache_hit</code> to reduce code size of the query hot path</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107869">reduce interning</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107167">simplify layout calculations in rawvec</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107098">suggest function call on pattern type mismatch</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107043">support <code>true</code> and <code>false</code> as boolean flag params</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107662">turn projections into copies in <code>CopyProp</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/107648">unused-lifetimes: don't warn about lifetimes originating from expanded code</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107317">implement <code>AsFd</code> and <code>AsRawFd</code> for <code>Rc</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/105641">implement cursors for BTreeMap</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107634">improve the <code>array::map</code> codegen</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107191">reverse Timsort scan direction</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107894">speedup heapsort by 1.5x by making it branchless</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107429">stabilize feature <code>cstr_from_bytes_until_nul</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/106001">stop at the first <code>NULL</code> argument when iterating <code>argv</code></a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11694">cargo: <code>-Zrustdoc-scrape-example</code> must fail with bad build script</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/10952">cargo: add '-C' flag for changing current dir before build</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11700">cargo: re-export <code>cargo_new::NewProjectKind</code> as public</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10310">clippy: make <code>arithmetic_side_effects</code> mind constant items</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10330">clippy: <code>cast_possible_truncation</code>: issue proper help message</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10295">clippy: <code>suspicious_to_owned</code>: use <code>span_suggestions</code> to suggest both intents</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10317">clippy: add <code>suspicious_command_arg_space</code> lint</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10177">clippy: <code>almost_swapped</code>: detect almost-swaps using <code>let</code> statements</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10293">clippy: negate suggestions when needed in <code>bool_assert_comparison</code></a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/13991">rust-analyzer: add braces assist</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14095">rust-analyzer: add postfix completion for <code>unsafe</code></a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/13986">rust-analyzer: add setting for limiting number of completions</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14127">rust-analyzer: build <code>i686-pc-windows-msvc</code> binaries</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14138">rust-analyzer: don't include <code>r#</code> prefix in filesystem changes</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14103">rust-analyzer: don't insert a semicolon when typing = if parse errors are encountered</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14125">rust-analyzer: fix bind pat inlay hints rendering for constant patterns</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14110">rust-analyzer: fix completions after functions with no bodies</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14084">rust-analyzer: fix parsing of nested tuple field accesses in a cursed way</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14140">rust-analyzer: fix proc-macro-server incorrectly stripping delimiters</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14114">rust-analyzer: insert spaces when inlining macros</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14099">rust-analyzer: properly use location links for type hints of impl Future and its assoc type</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/13975">rust-analyzer: suppress extra indent after the end of field and function chains</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14098">rust-analyzer: support <code>DidChangeWorkspaceFolders</code> notifications</a></li> </ul> <h3 id="rust-compiler-performance-triage"><a class="toclink" href="#rust-compiler-performance-triage">Rust Compiler Performance Triage</a></h3> <p>Overall a good week for performance with 77 real world crates benchmarks showing an average of nearly 1% performance improvement. Unfortunately, the largest regressions are not yet fully understood and require additional investigation. Of particular interest were some large improvements in doc builds due to storing additional metadata. However, this change might cause some crates to compile slightly slower in incremental check builds, but this is still being investigated.</p> <p>Triage done by <strong>@rylev</strong>. Revision range: <a href="https://perf.rust-lang.org/?start=e4dd9edb76a34ecbca539967f9662b8c0cc9c7fb&amp;end=9bb6e60d1f1360234aae90c97964c0fa5524f141&amp;absolute=false&amp;stat=instructions%3Au">e4dd9edb..9bb6e60</a></p> <p><strong>Summary</strong>:</p> <table> <thead> <tr> <th align="center">(instructions:u)</th> <th align="center">mean</th> <th align="center">range</th> <th align="center">count</th> </tr> </thead> <tbody> <tr> <td align="center">Regressions ❌ <br /> (primary)</td> <td align="center">1.4%</td> <td align="center">[0.4%, 11.0%]</td> <td align="center">13</td> </tr> <tr> <td align="center">Regressions ❌ <br /> (secondary)</td> <td align="center">0.8%</td> <td align="center">[0.2%, 1.6%]</td> <td align="center">4</td> </tr> <tr> <td align="center">Improvements ✅ <br /> (primary)</td> <td align="center">-1.4%</td> <td align="center">[-7.9%, -0.3%]</td> <td align="center">64</td> </tr> <tr> <td align="center">Improvements ✅ <br /> (secondary)</td> <td align="center">-2.1%</td> <td align="center">[-5.6%, -0.3%]</td> <td align="center">73</td> </tr> <tr> <td align="center">All ❌✅ (primary)</td> <td align="center">-0.9%</td> <td align="center">[-7.9%, 11.0%]</td> <td align="center">77</td> </tr> </tbody> </table> <p>3 Regressions, 4 Improvements, 9 Mixed; 4 of them in rollups 46 artifact comparisons made in total</p> <p><a href="https://github.com/rust-lang/rustc-perf/blob/master/triage/2023-02-14.md">Full report here</a></p> <h3 id="approved-rfcs"><a class="toclink" href="#approved-rfcs"><a href="https://github.com/rust-lang/rfcs/commits/master">Approved RFCs</a></a></h3> <p>Changes to Rust follow the Rust <a href="https://github.com/rust-lang/rfcs#rust-rfcs">RFC (request for comments) process</a>. These are the RFCs that were approved for implementation this week:</p> <ul> <li><em>No RFCs were approved this week.</em></li> </ul> <h3 id="final-comment-period"><a class="toclink" href="#final-comment-period">Final Comment Period</a></h3> <p>Every week, <a href="https://www.rust-lang.org/team.html">the team</a> announces the 'final comment period' for RFCs and key PRs which are reaching a decision. Express your opinions now.</p> <h4 id="rfcs"><a class="toclink" href="#rfcs"><a href="https://github.com/rust-lang/rfcs/labels/final-comment-period">RFCs</a></a></h4> <ul> <li><em>No RFCs entered Final Comment Period this week.</em></li> </ul> <h4 id="tracking-issues-prs"><a class="toclink" href="#tracking-issues-prs"><a href="https://github.com/rust-lang/rust/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc">Tracking Issues &amp; PRs</a></a></h4> <ul> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/issues/89058">Drop support for FreeBSD 10 and 11 from std</a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/106774">Stabilize cmpxchg16b_target_feature</a></li> </ul> <h3 id="new-and-updated-rfcs"><a class="toclink" href="#new-and-updated-rfcs"><a href="https://github.com/rust-lang/rfcs/pulls">New and Updated RFCs</a></a></h3> <ul> <li><em>No New or Updated RFCs were created this week.</em></li> </ul> <h3 id="call-for-testing"><a class="toclink" href="#call-for-testing"><a href="https://github.com/rust-lang/rfcs/issues?q=label%3Acall-for-testing">Call for Testing</a></a></h3> <p>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:</p> <ul> <li><em>No RFCs issued a call for testing this week.</em></li> </ul> <p>If you are a feature implementer and would like your RFC to appear on the above list, add the new <code>call-for-testing</code> label to your RFC along with a comment providing testing instructions and/or guidance on which aspect(s) of the feature need testing.</p> <h2 id="upcoming-events"><a class="toclink" href="#upcoming-events">Upcoming Events</a></h2> <p>Rusty Events between 2023-02-15 - 2023-03-15 🦀</p> <h3 id="virtual"><a class="toclink" href="#virtual">Virtual</a></h3> <ul> <li>2023-02-15 | Virtual | <a href="https://www.mongodb.com/">MongoDB</a><ul> <li><a href="https://www.mongodb.com/webinar/write-a-microservice-with-rust-and-mongodb"><strong>Write a Microservice With Rust and MongoDB</strong></a></li> </ul> </li> <li>2023-02-15 | Virtual (Redmond, WA, US; New York, NY, US; San Francisco, CA, US; São Paulo, BR) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a> and <a href="https://www.meetup.com/microsoft-reactor-new-york/">Microsoft Rector New York</a> and <a href="https://www.meetup.com/microsoft-reactor-san-francisco/">Microsoft Reactor San Francisco</a> and <a href="https://www.meetup.com/microsoft-reactor-sao-paulo">Microsoft Reactor São Paulo</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/290224624/"><strong>Primeros pasos con Rust: QA y horas de comunidad</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-redmond/events/290224624/"><strong>San Francisco Mirror</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-new-york/events/290224621/"><strong>New York Mirror</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-sao-paulo/events/290224623/"><strong>São Paulo Mirror</strong></a></li> </ul> </li> <li>2023-02-15 | Virtual (Vancouver, BC, CA) | <a href="https://www.meetup.com/vancouver-rust/">Vancouver Rust</a><ul> <li><a href="https://www.meetup.com/vancouver-rust/events/tqvhxsyfcdbtb/"><strong>Show &amp; Tell: Rust state machines in a file processor</strong></a></li> </ul> </li> <li>2023-02-16 | Virtual (Stuttgart, DE) | <a href="https://www.meetup.com/Rust-Community-Stuttgart/">Rust Community Stuttgart</a><ul> <li><a href="https://www.meetup.com/rust-community-stuttgart/events/qtvtvsyfcdbvb/"><strong>Rust-Meetup</strong></a></li> </ul> </li> <li>2023-02-21 | Virtual (Washington, DC, US) | <a href="https://www.meetup.com/rustdc/">Rust DC</a><ul> <li><a href="https://www.meetup.com/rustdc/events/vdhxgsyfcdbcc/"><strong>Mid-month Rustful</strong></a></li> </ul> </li> <li>2023-02-23 | Virtual (Charlottesville, VA, US) | <a href="https://www.meetup.com/charlottesville-rust-meetup/">Charlottesville Rust Meetup</a><ul> <li><a href="https://www.meetup.com/charlottesville-rust-meetup/events/291248593/"><strong>Tock, a Rust based Embedded Operating System</strong></a></li> </ul> </li> <li>2023-02-23 | Virtual (Kassel, DE) | <a href="https://www.meetup.com/java-user-group-hessen-jugh/">Java User Group Hessen</a><ul> <li><a href="https://www.meetup.com/java-user-group-hessen-jugh/events/290346591/"><strong>Eine Einführung in Rust (Stefan Baumgartner)</strong></a></li> </ul> </li> <li>2023-02-23 | Virtual (México City, MX) | <a href="https://www.meetup.com/rust-mx/">Rust MX</a><ul> <li><a href="https://www.meetup.com/rust-mx/events/291456677/"><strong>Rust: ¿por qué es una opción adecuada para implantar Blockchain?</strong></a></li> </ul> </li> <li>2023-02-24 | Virtual (Tunis, TN) | <a href="https://www.meetup.com/rust-tunisia/">Rust Meetup Tunisia</a><ul> <li><a href="https://www.meetup.com/rust-tunisia/events/291534817/"><strong>Rust Meetup Tunisia - Volume I, Number II</strong></a></li> </ul> </li> <li>2023-02-28 | Virtual (Berlin, DE) | <a href="https://www.meetup.com/opentechschool-berlin/">Open Tech School Berlin</a><ul> <li><a href="https://www.meetup.com/opentechschool-berlin/events/290852327/"><strong>Rust Hack and Learn</strong></a></li> </ul> </li> <li>2023-02-28 | Virtual (Cardiff, UK) | <a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff">Rust and C++ Cardiff</a><ul> <li><a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/291338734/"><strong>Rust Nation - What we learnt</strong></a></li> </ul> </li> <li>2023-02-28 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/Dallas-Rust/">Dallas Rust</a><ul> <li><a href="https://www.meetup.com/dallas-rust/events/qndgwsyfcdblc/"><strong>Last Tuesday</strong></a></li> </ul> </li> <li>2023-02-28 | Virtual (Munich, DE) | <a href="https://www.meetup.com/rust-munich/">Rust Munich</a><ul> <li><a href="https://www.meetup.com/rust-munich/events/291437669/"><strong>Rust Munich 2023 / 1 - hybrid</strong></a></li> </ul> </li> <li>2023-03-01 | Virtual (Indianapolis, IN, US) | <a href="https://www.meetup.com/indyrs/">Indy Rust</a><ul> <li><a href="https://www.meetup.com/indyrs/events/qwtdjsyfcfbcb/"><strong>Indy.rs - with Social Distancing</strong></a></li> </ul> </li> <li>2023-03-02 | Virtual (Linz, AT) | <a href="https://www.meetup.com/rust-linz/">Rust Linz</a><ul> <li><a href="https://www.meetup.com/rust-linz/events/291483339/"><strong>Rust Meetup Linz - 30th Edition</strong></a></li> </ul> </li> <li>2023-03-07 | Virtual (Buffalo, NY, US) | <a href="https://www.meetup.com/buffalo-rust-meetup/">Buffalo Rust Meetup</a><ul> <li><a href="https://www.meetup.com/buffalo-rust-meetup/events/lsjbbtyfcfbkb/"><strong>First Tuesdays</strong></a></li> </ul> </li> <li>2023-03-08 | Virtual (Boulder, CO, US) | <a href="https://www.meetup.com/boulder-elixir-rust/">Boulder Elixir and Rust</a> <ul> <li><a href="https://www.meetup.com/boulder-elixir-rust/events/zvxcsryfcfblb/"><strong>Monthly Meetup</strong></a></li> </ul> </li> <li>2023-03-11 | Virtual | <a href="https://discord.gg/yNtPTb2">Rust GameDev</a><ul> <li><a href="https://discord.gg/yNtPTb2"><strong>Rust GameDev Monthly Meetup</strong></a></li> </ul> </li> <li>2023-03-14 | Virtual (Berlin, DE) | <a href="https://berline.rs/">Berlin.rs</a><ul> <li><a href="https://berline.rs/2023/03/14/rust-hack-and-learn.html"><strong>Rust Hack and Learn</strong></a></li> </ul> </li> <li>2023-03-15 | Virtual (Cardiff, UK) | <a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff">Rust and C++ Cardiff</a><ul> <li><a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/291354288/"><strong>Injecting Rust Hooks into a 1999 game binary (unsafe)</strong></a></li> </ul> </li> </ul> <h3 id="asia"><a class="toclink" href="#asia">Asia</a></h3> <ul> <li>2023-02-20 | Tel Aviv, IL | <a href="https://www.meetup.com/rust-tlv/">Rust TLV</a><ul> <li><a href="https://www.meetup.com/rust-tlv/events/291182881/"><strong>February Edition - Redis and BioCatch talking Rust!</strong></a></li> </ul> </li> <li>2023-03-04 | Kyoto, JP | <a href="https://www.meetup.com/kansai-rust/">Kansai Rust</a><ul> <li><a href="https://www.meetup.com/kansai-rust/events/291614614/"><strong>Fn vs FnMut vs FnOnce</strong></a></li> </ul> </li> </ul> <h3 id="europe"><a class="toclink" href="#europe">Europe</a></h3> <ul> <li>2023-02-15 | London, UK | <a href="https://www.meetup.com/rust-london-user-group/">Rust London User Group</a><ul> <li><a href="https://www.meetup.com/rust-london-user-group/events/290903823/"><strong>Rust Nation Pre-Conference Reception with The Rust Foundation</strong></a></li> </ul> </li> <li>2023-02-15 | Trondheim, NO | <a href="https://www.meetup.com/rust-trondheim">Rust Trondheim</a><ul> <li><a href="https://www.meetup.com/rust-trondheim/events/290889889/"><strong>Rust New Year's Resolution Bug Hunt</strong></a></li> </ul> </li> <li>2023-02-16, 2023-02-17 | London, UK | <a href="https://www.rustnationuk.com/">Rust Nation UK</a><ul> <li><a href="https://www.rustnationuk.com/"><strong>Rust Nation '23</strong></a></li> </ul> </li> <li>2023-02-18 | London, UK | <a href="https://www.meetup.com/rust-london-user-group/">Rust London User Group</a><ul> <li><a href="https://www.meetup.com/rust-london-user-group/events/291297886/"><strong>Post-Conference Rust in Enterprise Brunch Hosted at Red Badger</strong></a></li> </ul> </li> <li>2023-02-21 | Paris, FR | <a href="https://www.meetup.com/rust-paris/">Rust Paris</a><ul> <li><a href="https://www.meetup.com/rust-paris/events/291334081/"><strong>Rust Paris meetup #56</strong></a></li> </ul> </li> <li>2023-02-21 | Zurich, CH | <a href="https://www.meetup.com/rust-zurich/">Rust Zurich</a><ul> <li><a href="https://www.meetup.com/de-DE/rust-zurich/events/290915075/"><strong>Practical Cryptography - February Meetup (Registration opens 7 Feb 2023)</strong></a></li> </ul> </li> <li>2023-02-23 | Bordeaux, FR | <a href="https://www.meetup.com/dedotalk/">DedoTalk</a><ul> <li><a href="https://www.meetup.com/dedotalk/events/291199962/"><strong>#1 DedoTalk 🎙️ : Rust pour un développeur Python</strong></a></li> </ul> </li> <li>2023-02-23 | Copenhagen, DK | <a href="https://www.meetup.com/copenhagen-rust-community">Copenhagen Rust Community</a><ul> <li><a href="https://www.meetup.com/copenhagen-rust-community/events/291288154/"><strong>Rust metup #33</strong></a></li> </ul> </li> <li>2023-02-23 | Vienna, AT | <a href="https://www.meetup.com/rust-vienna">Rust Vienna</a><ul> <li><a href="https://www.meetup.com/rust-vienna/events/291465732/"><strong>Rust Meetup Revived with an Exciting Exploration of Ownership!</strong></a></li> </ul> </li> <li>2023-02-28 | Munich, DE + Virtual | <a href="https://www.meetup.com/rust-munich/">Rust Munich</a><ul> <li><a href="https://www.meetup.com/rust-munich/events/291437669/"><strong>Rust Munich 2023 / 1 - hybrid</strong></a></li> </ul> </li> <li>2023-02-28 | Nijmegen, NL | <a href="https://www.meetup.com/rust-nederland/">Rust Nederland</a><ul> <li><a href="https://www.meetup.com/rust-nederland/events/291489123/"><strong>Regular track: Rust at RU</strong></a></li> <li><a href="https://www.meetup.com/rust-nederland/events/291488539/"><strong>Student track: Rust at RU</strong></a></li> </ul> </li> <li>2023-03-09 | Basel, CH | <a href="https://www.meetup.com/rust-basel/">Rust Basel</a><ul> <li><a href="https://www.meetup.com/rust-basel/events/291228934/"><strong>Rust Meetup #7</strong></a></li> </ul> </li> <li>2023-03-09 | Delft, NL | <a href="https://www.meetup.com/rust-nederland/">Rust Nederland</a><ul> <li><a href="https://www.meetup.com/rust-nederland/events/291401965/"><strong>Regular track: Embedded Rust</strong></a></li> <li><a href="https://www.meetup.com/rust-nederland/events/291401778/"><strong>Student track: Embedded Rust</strong></a></li> </ul> </li> <li>2023-03-15 | Nürnberg, DE | <a href="https://www.meetup.com/rust-noris/">Rust Nuremberg</a><ul> <li><a href="https://www.meetup.com/rust-noris/events/291623203/"><strong>Walk around Embedded World Exhibition</strong></a></li> </ul> </li> </ul> <h3 id="north-america"><a class="toclink" href="#north-america">North America</a></h3> <ul> <li>2023-02-21 | San Francisco, CA, US | <a href="https://www.meetup.com/san-francisco-rust-study-group/">San Francisco Rust Study Group</a><ul> <li><a href="https://www.meetup.com/san-francisco-rust-study-group/events/rwvwzsyfcdbcc/"><strong>Rust Hacking in Person</strong></a></li> </ul> </li> <li>2023-02-23 | Mountain View, CA, US | <a href="https://www.meetup.com/rust-study-group/">Mountain View Rust Study Group</a><ul> <li><a href="https://www.meetup.com/rust-study-group/events/291623636/"><strong>Rust Study Group at Hacker Dojo</strong></a></li> </ul> </li> <li>2023-03-01 | Austin, TX, US | <a href="https://www.meetup.com/rust-atx/">Rust ATX</a><ul> <li><a href="https://www.meetup.com/rust-atx/events/291619816/"><strong>Rust Lunch</strong></a></li> </ul> </li> <li>2023-03-09 | Lehi, UT, US | <a href="https://www.meetup.com/utah-rust/">Utah Rust</a><ul> <li><a href="https://www.meetup.com/utah-rust/events/rrwbctyfcfbmb/"><strong>Upcoming Event</strong></a></li> </ul> </li> </ul> <h3 id="oceania"><a class="toclink" href="#oceania">Oceania</a></h3> <ul> <li>2023-02-23 | Brisbane, QLD, AU | <a href="https://www.meetup.com/rust-brisbane/">Rust Brisbane</a><ul> <li><a href="https://www.meetup.com/rust-brisbane/events/291377036/"><strong>February Meetup</strong></a></li> </ul> </li> <li>2023-02-28 | Canberra, ACT, AU | <a href="https://www.meetup.com/rust-canberra/">Canberra Rust User Group</a><ul> <li><a href="https://www.meetup.com/rust-canberra/events/291278417/"><strong>February Meetup</strong></a></li> </ul> </li> <li>2023-03-01 | Sydney, NSW, AU | <a href="https://www.meetup.com/rust-sydney/">Rust Sydney</a><ul> <li><a href="https://www.meetup.com/rust-sydney/events/291265163/"><strong>🦀 Lightning Talks - We are back!</strong></a></li> </ul> </li> </ul> <h3 id="south-america"><a class="toclink" href="#south-america">South America</a></h3> <ul> <li>2023-02-22 | Montevideo, UY | <a href="https://www.meetup.com/rust-uruguay/">Rust Meetup Uruguay</a><ul> <li><a href="https://www.meetup.com/rust-uruguay/events/291386143/"><strong>Hands on: Lifetimes</strong></a></li> </ul> </li> </ul> <p>If you are running a Rust event please add it to the <a href="https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com">calendar</a> to get it mentioned here. Please remember to add a link to the event too. Email the <a href="mailto:community-team@rust-lang.org">Rust Community Team</a> for access.</p> <h2 id="jobs"><a class="toclink" href="#jobs">Jobs</a></h2> <!-- Rust Jobs: TWiR has stopped featuring individual job postings. You can read more about this change here: https://github.com/rust-lang/this-week-in-rust/issues/3412 --> <p>Please see the latest <a href="https://www.reddit.com/r/rust/comments/10nmtew/official_rrust_whos_hiring_thread_for_jobseekers/">Who's Hiring thread on r/rust</a></p> <h1 id="quote-of-the-week"><a class="toclink" href="#quote-of-the-week">Quote of the Week</a></h1> <blockquote> <p>All the pro C/C++ arguments seem to come down to "Good drivers don’t need seat belts because they don’t get in accidents"</p> </blockquote> <p>– <a href="https://www.reddit.com/r/rust/comments/10rnymj/comment/j6x90x5">otwkme on /r/rust</a></p> <p><a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328">Please submit quotes and vote for next week!</a></p> <p><em>This Week in Rust is edited by: <a href="https://github.com/nellshamrell">nellshamrell</a>, <a href="https://github.com/llogiq">llogiq</a>, <a href="https://github.com/cdmistman">cdmistman</a>, <a href="https://github.com/ericseppanen">ericseppanen</a>, <a href="https://github.com/extrawurst">extrawurst</a>, <a href="https://github.com/andrewpollack">andrewpollack</a>, <a href="https://github.com/U007D">U007D</a>, <a href="https://github.com/kolharsam">kolharsam</a>, <a href="https://github.com/joelmarcey">joelmarcey</a>, <a href="https://github.com/mariannegoldin">mariannegoldin</a>, <a href="https://github.com/bennyvasquez">bennyvasquez</a>.</em></p> <p><em>Email list hosting is sponsored by <a href="https://foundation.rust-lang.org/">The Rust Foundation</a></em></p> <p><small><a href="https://www.reddit.com/r/rust/comments/113dwhu/this_week_in_rust_482/">Discuss on r/rust</a></small></p> Test 1. 2 richcuellarlopez 2023-02-14 2023-02-14 20 <p>Testing the post feature</p> Announcing Rust 1.67.1 freedit 2023-02-09 2023-02-09 26 <p>The Rust team has published a new point release of Rust, 1.67.1. Rust is a programming language that is empowering everyone to build reliable and efficient software.</p> <p>If you have a previous version of Rust installed via rustup, you can get 1.67.1 with:</p> <pre><code>rustup update stable </code></pre> <p>If you don't have it already, you can <a href="https://www.rust-lang.org/install.html">get <code>rustup</code></a> from the appropriate page on our website, and check out the <a href="https://github.com/rust-lang/rust/blob/stable/RELEASES.md#version-1671-2023-02-09">detailed release notes for 1.67.1</a> on GitHub.</p> <h2><a href="#whats-in-1671-stable" aria-hidden="true" class="anchor" id="whats-in-1671-stable"></a>What's in 1.67.1 stable</h2> <p>Rust 1.67.1 fixes a regression for projects that link to thin archives (<code>.a</code> files that reference external <code>.o</code> objects). The new archive writer in 1.67.0 could not read thin archives as inputs, leading to the error &quot;Unsupported archive identifier.&quot; The compiler now uses LLVM's archive writer again, until that format is supported in the new code.</p> <p>Additionally, the clippy style lint <code>uninlined_format_args</code> is temporarily downgraded to pedantic -- allowed by default. While the compiler has supported this format since Rust 1.58, <code>rust-analyzer</code> does not support it yet, so it's not necessarily good to use that style everywhere possible.</p> <p>The final change is a soundness fix in Rust's own bootstrap code. This had no known problematic uses, but it did raise an error when bootstrap was compiled with 1.67 itself, rather than the prior 1.66 release as usual.</p> <h3><a href="#contributors-to-1671" aria-hidden="true" class="anchor" id="contributors-to-1671"></a>Contributors to 1.67.1</h3> <p>Many people came together to create Rust 1.67.1. We couldn't have done it without all of you. <a href="https://thanks.rust-lang.org/rust/1.67.1/">Thanks!</a></p> This Week in Rust 481 freedit 2023-02-08 2023-02-08 24 <p>Hello and welcome to another issue of <em>This Week in Rust</em>! <a href="https://www.rust-lang.org/">Rust</a> 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? Tag us at <a href="https://twitter.com/ThisWeekInRust">@ThisWeekInRust</a> on Twitter or <a href="https://mastodon.social/@thisweekinrust">@ThisWeekinRust</a> on mastodon.social, or <a href="https://github.com/rust-lang/this-week-in-rust">send us a pull request</a>. Want to get involved? <a href="https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md">We love contributions</a>.</p> <p><em>This Week in Rust</em> is openly developed <a href="https://github.com/rust-lang/this-week-in-rust">on GitHub</a>. If you find any errors in this week's issue, <a href="https://github.com/rust-lang/this-week-in-rust/pulls">please submit a PR</a>.</p> <h2 id="updates-from-rust-community"><a class="toclink" href="#updates-from-rust-community">Updates from Rust Community</a></h2> <!-- Dear community contributors: Please read README.md for guidance on submissions. Each submitted link should be of the form: * [Title of the Linked Page](https://example.com/my_article) If you don't know which category to use, feel free to submit a PR anyway and just ask the editors to select the category. --> <h3 id="official"><a class="toclink" href="#official">Official</a></h3> <ul> <li><a href="https://blog.rust-lang.org/2023/02/01/Rustup-1.25.2.html">Announcing Rustup 1.25.2</a></li> </ul> <h3 id="foundation"><a class="toclink" href="#foundation">Foundation</a></h3> <ul> <li><a href="https://foundation.rust-lang.org/news/member-spotlight-adacore/">Member Spotlight: AdaCore</a></li> </ul> <h3 id="fosdem-2023"><a class="toclink" href="#fosdem-2023">FOSDEM 2023</a></h3> <ul> <li>[video] <a href="https://fosdem.org/2023/schedule/event/building_an_actor_library_for_quickwits_indexing_pipeline/">Building an actor library for Quickwit's indexing pipeline</a></li> <li>[video] <a href="https://fosdem.org/2023/schedule/event/rust_building_a_distributed_search_engine_with_tantivy/">Building a distributed search engine with tantivy</a></li> <li>[video] <a href="https://fosdem.org/2023/schedule/event/rust_aurae_a_new_pid_1_for_distributed_systems/">Aurae: Distributed Runtime</a></li> <li>[video] <a href="https://fosdem.org/2023/schedule/event/rust_bastionlab/">BastionLab, a Rust open-source privacy framework for confidential data science collaboration</a></li> <li>[video] <a href="https://fosdem.org/2023/schedule/event/rust_neovim_and_rust_analyzer_are_best_friends/">Neovim and rust-analyzer are best friends</a></li> <li>[video] <a href="https://fosdem.org/2023/schedule/event/rust_a_rusty_cheri_the_path_to_hardware_capabilities_in_rust/">A Rusty CHERI - The path to hardware capabilities in Rust</a></li> <li>[video] <a href="https://fosdem.org/2023/schedule/event/rust_slint_are_we_gui_yet/">Slint: Are we GUI yet?</a></li> <li>[video] <a href="https://fosdem.org/2023/schedule/event/rust_rust_api_design_learnings/">Rust API Design Learnings</a></li> <li>[video] <a href="https://fosdem.org/2023/schedule/event/rust_a_deep_dive_inside_the_rust_frontend_for_gcc/">A deep dive inside the Rust frontend for GCC</a></li> <li>[video] <a href="https://fosdem.org/2023/schedule/event/rust_merging_process_of_the_rust_compiler/">Merging process of the rust compiler</a></li> <li>[video] <a href="https://fosdem.org/2023/schedule/event/rust_lets_write_snake_game/">Let's write Snake game!</a></li> <li>[video] <a href="https://fosdem.org/2023/schedule/event/rust_glidesort/">Glidesort</a></li> <li>[video] <a href="https://fosdem.org/2023/schedule/event/rust_how_pydantic_v2_leverages_rusts_superpowers/">How Pydantic V2 leverages Rust's Superpowers</a></li> <li>[video] <a href="https://fosdem.org/2023/schedule/event/rust_scalable_graph_algorithms_in_rust_and_python/">Scalable graph algorithms in Rust (and Python)</a></li> <li>[video] <a href="https://fosdem.org/2023/schedule/event/rust_using_rust_for_your_network_management_tools/">Using Rust for your network management tools!</a></li> <li>[video] <a href="https://fosdem.org/2023/schedule/event/rust_backward_and_forward_compatibility_for_security_features/">Backward and forward compatibility for security features</a></li> <li>[video] <a href="https://fosdem.org/2023/schedule/event/rust_atuin_magical_shell_history_with_rust/">atuin: magical shell history with Rust</a></li> <li>[video] <a href="https://fosdem.org/2023/schedule/event/rustunikernel/">A Rust-Based, modular Unikernel for MicroVMs</a></li> </ul> <h3 id="newsletters"><a class="toclink" href="#newsletters">Newsletters</a></h3> <ul> <li><a href="https://rust-osdev.com/this-month/2023-01/">This Month in Rust OSDev: January 2023</a></li> <li><a href="https://rustmagazine.org/issue-1/">The first issue of Rust Magazine has been published 🎉🎉</a></li> </ul> <h3 id="projecttooling-updates"><a class="toclink" href="#projecttooling-updates">Project/Tooling Updates</a></h3> <ul> <li><a href="https://blog.axo.dev/2023/02/cargo-dist">Release Engineering Is Exhausting So Here's cargo-dist</a></li> <li><a href="https://rust-analyzer.github.io/thisweek/2023/02/06/changelog-167.html">rust-analyzer changelog #167</a></li> <li><a href="https://github.com/orlp/glidesort#readme">Glidesort, my stable adaptive quicksort/mergesort hybrid sorting algorithm</a></li> <li><a href="https://www.fornjot.app/blog/weekly-release/2023-w06/">Fornjot (code-first CAD in Rust) - Weekly Release - Ostensibly Quiet</a></li> <li><a href="https://diziet.dreamwidth.org/14345.html">derive-adhoc: "derive by example", an ergonomic replacement for (some) proc macros</a></li> <li><a href="https://join-lemmy.org/news/2023-01-31_-_Lemmy_Release_v0.17.0">Lemmy release 0.17.0 - A link aggregator for the Fediverse</a></li> <li><a href="https://blog.torproject.org/arti_111_released/">Arti 1.1.1 is released: Groundwork for onion services</a></li> <li><a href="https://www.sea-ql.org/blog/2023-02-08-whats-new-in-seaorm-0.11.0/">SeaORM 0.11.0 - 🐚 An async &amp; dynamic ORM for Rust</a></li> </ul> <h3 id="observationsthoughts"><a class="toclink" href="#observationsthoughts">Observations/Thoughts</a></h3> <ul> <li><a href="https://smallcultfollowing.com/babysteps/blog/2023/02/01/async-trait-send-bounds-part-1-intro/">Async trait send bounds, part 1: intro</a></li> <li><a href="https://predr.ag/blog/speeding-up-rust-semver-checking-by-over-2000x/">Speeding up Rust semver-checking by over 2000x</a></li> <li><a href="https://poignardazur.github.io/2023/02/02/masonry-01-and-my-vision-for-rust-ui/">Announcing Masonry 0.1, and my vision for Rust UI</a></li> <li><a href="https://www.thecodedmessage.com/posts/oop-2-polymorphism/">Rust Is Beyond Object-Oriented, Part 2: Polymorphism</a></li> <li>[video] <a href="https://www.youtube.com/watch?v=rh1ZJXOuco8&amp;list=PL85XCvVPmGQh3V0Pz-_xFm6VAUTR4aLUw&amp;index=18">Rust Malaysia - The journey to rust from a student</a></li> <li><a href="https://blog.waleedkhan.name/rust-incremental-test-times/">Improving incremental test times in Rust</a></li> <li><a href="https://blog.yoshuawuyts.com/compiled-html/">Using HTML as a compile target</a></li> <li><a href="https://lukaskalbertodt.github.io/2023/02/03/tauri-iced-egui-performance-comparison.html">Tauri vs Iced vs egui: Rust GUI framework performance comparison</a></li> <li><a href="https://www.memorysafety.org/blog/remy-rakic-compile-times/">Improving Rust compile times to enable adoption of memory safety</a></li> <li>[audio] <a href="https://rustacean-station.org/episode/adam-chalmers/">Cloudflare with Adam Chalmers</a></li> </ul> <h3 id="rust-walkthroughs"><a class="toclink" href="#rust-walkthroughs">Rust Walkthroughs</a></h3> <ul> <li><a href="https://blog.logrocket.com/building-rust-parser-pest-peg/">Building a Rust parser using Pest and PEG</a></li> <li><a href="https://mainmatter.com/blog/2023/02/01/using-rust-crates-in-elixir/">Rustler - Using Rust crates in Elixir</a></li> <li><a href="https://tfpk.github.io/lifetimekata/">LifetimeKata: Exercises to learn how to use lifetimes</a></li> <li><a href="https://www.collabora.com/news-and-blog/blog/2023/02/02/exploring-rust-for-vulkan-drivers-part-1/">Exploring Rust for Vulkan drivers, part 1</a></li> <li><a href="https://research.nccgroup.com/2023/02/06/rustproofing-linux-part-1-4-leaking-addresses/">Rustproofing Linux (Part 1/4 Leaking Addresses)</a></li> <li><a href="https://apollolabsblog.hashnode.dev/stm32f4-embedded-rust-at-the-pac-svd2rust">STM32F4 Embedded Rust at the PAC: svd2rust</a></li> </ul> <h3 id="miscellaneous"><a class="toclink" href="#miscellaneous">Miscellaneous</a></h3> <ul> <li><a href="https://www.thecodedmessage.com/posts/stroustrup-response/">My Reaction to Dr. Stroustrup's Recent Memory Safety Comments</a></li> <li><a href="https://blogs.blackberry.com/en/2023/02/this-is-the-kind-of-rust-the-automotive-industry-needs">This Is the Kind of Rust the Automotive Industry Needs</a></li> </ul> <h2 id="crate-of-the-week"><a class="toclink" href="#crate-of-the-week">Crate of the Week</a></h2> <p>This week's crate is <a href="https://github.com/TheNeikos/envious">envious</a>, a serde-based deserializer from environment variables.</p> <p>Thanks to <a href="https://users.rust-lang.org/t/crate-of-the-week/2704/1156">musicmatze</a> for the suggestion!</p> <p><a href="https://users.rust-lang.org/t/crate-of-the-week/2704">Please submit your suggestions and votes for next week</a>!</p> <h2 id="call-for-participation"><a class="toclink" href="#call-for-participation">Call for Participation</a></h2> <p>Always wanted to contribute to open-source projects but did not know where to start? Every week we highlight some tasks from the Rust community for you to pick and get started!</p> <p>Some of these tasks may also have mentors available, visit the task page for more information.</p> <ul> <li><a href="https://github.com/rust-lang/this-week-in-rust/issues/4031?">this-week-in-rust - Make dark mode more accessible</a></li> <li><a href="https://github.com/build-trust/ockam/issues/4177">Ockam - 'ockam tcp-connection create' should return the tcp-connection ID</a></li> <li><a href="https://github.com/build-trust/ockam/issues/4175">Ockam - 'ockam node stop' should output a message when exiting successfully</a></li> <li><a href="https://github.com/google/comprehensive-rust/issues/282">comprehensive-rust - We now support translations!</a></li> <li><a href="https://github.com/google/comprehensive-rust/issues/318">comprehensive-rust - Extract text more carefully in mdbook-xgettext</a></li> </ul> <p>If you are a Rust project owner and are looking for contributors, please submit tasks <a href="https://users.rust-lang.org/t/twir-call-for-participation/4821">here</a>.</p> <h2 id="updates-from-the-rust-project"><a class="toclink" href="#updates-from-the-rust-project">Updates from the Rust Project</a></h2> <p>350 pull requests were <a href="https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2023-01-30..2023-02-06">merged in the last week</a></p> <ul> <li><a href="https://github.com/rust-lang/rust/pull/107595">retry opening proc-macro DLLs a few times on Windows</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107082">autotrait bounds on dyn-safe trait methods</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107499">do not depend on Generator trait when deducing closure signature</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107602">parse and recover from type ascription in patterns</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106919">recover <code>_</code> as <code>..</code> in field pattern</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107526">recover form missing expression in <code>for</code> loop</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107580">recover from lifetimes with default lifetimes in generic args</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107599">don't generate unecessary <code>&amp;&amp;self.field</code> in deriving Debug</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107539">emit warnings on unused parens in index expressions</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107532">erase regions before doing uninhabited check in borrowck</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107533">extend <code>-Z print-type-sizes</code> to distinguish generator upvars+locals from "normal" fields</a></li> <li><a href="https://github.com/rust-lang/rust/pull/105650">fix invalid float literal suggestions when recovering an integer</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107633">fix suggestion for coercing <code>Option&lt;&amp;String&gt;</code> to <code>Option&lt;&amp;str&gt;</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/107488">fix syntax in <code>-Zunpretty-expanded</code> output for derived <code>PartialEq</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/107389">fixing confusion between mod and remainder</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107245">implement unsizing in the new trait solver</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107663">don't point at nonexisting code beyond EOF when warning about delims</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107493">improve diagnostic for missing space in range pattern</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107442">improve panic message for slice windows and chunks</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107515">improve pretty-printing of <code>HirIdValidator</code> errors</a></li> <li><a href="https://github.com/rust-lang/rust/pull/102513">make <code>unaligned_reference</code> a hard error</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106887">make const/fn return params more suggestable</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107487">make the "extra if in let...else block" hint a suggestion</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107646">provide structured suggestion for binding needing type on E0594</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106477">refine error spans for "The trait bound <code>T: Trait</code> is not satisfied" when passing literal structs/tuples</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107201">remove confusing 'while checking' note from opaque future type mismatches</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107692">sort Generator <code>print-type-sizes</code> according to their yield points</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106575">suggest <code>move</code> in nested closure when appropriate</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107553">suggest <code>std::ptr::null</code> if literal 0 is given to a raw pointer function argument</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106805">suggest <code>{var:?}</code> when finding <code>{?:var}</code> in inline format strings</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107685">suggest adding a return type for async functions</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107621">intern external constraints in new solver</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107627">optimize <code>fold_ty</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/107267">do not deaggregate MIR</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107687">adapt SROA MIR opt for aggregated MIR</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107443">test <code>drop_tracking_mir</code> before querying generator</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107486">track bound types like bound regions</a></li> <li><a href="https://github.com/rust-lang/futures-rs/pull/2704">futures: poll <code>Select</code> futures without moving them</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11635">cargo: add partial support for SSH known hosts markers</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11644">cargo: config: deny <code>CARGO_HOME</code> in env table</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11661">cargo: do not error for <code>auth-required: true</code> without <code>-Z sparse-registry</code></a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11665">cargo: handle .cargo-ok being truncated</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11647">cargo: make cargo install report needed features</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11672">cargo: verify source before recompile</a></li> <li><a href="https://github.com/rust-lang/rustfmt/pull/5520">rustfmt: prevent shorthand init for tuple struct</a></li> <li><a href="https://github.com/rust-lang/rustfmt/pull/5560">rustfmt: lists doc comments</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10257">clippy: <code>needless_lifetimes</code>: lint local macros</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10225">clippy: <code>unused_io_amount</code>: lint with <code>is_ok</code> and <code>is_err</code></a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10250">clippy: <code>wildcard_enum_match_arm</code> lint takes the enum origin into account</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10028">clippy: add <code>extra_unused_type_parameters</code> lint</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10222">clippy: add machine applicable suggestion for <code>needless_lifetimes</code></a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10276">clippy: don't depend on FormatArgsExpn in ManualAssert</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10256">clippy: fix version declared for <code>semicolon_inside_block</code> and <code>semicolon_outside…</code></a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10265">clippy: mark <code>uninlined_format_args</code> as pedantic</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14083">rust-analyzer: add more basic issue templates with auto category labeling</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14072">rust-analyzer: expand docs section on Visual Studio to mention all three available extensions</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14063">rust-analyzer: remove support for 1.58 proc-macro abi</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14058">rust-analyzer: fix negative trait bound in outline view (#14044)</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14043">rust-analyzer: consider relative offset to fake ident token in expansion for completion</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14092">rust-analyzer: don't panic on broken syntax trees in adjustment inlay hints</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14071">rust-analyzer: don't render fieldless discriminant inlay hints for datacarrying enums</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14082">rust-analyzer: support non-ascii characters in case conversion</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14068">rust-analyzer: unsize cast array only on pointer type</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14070">rust-analyzer: implement proc-macro-api versioning</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14036">rust-analyzer: record method resolution for remaining operator expressions</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14094">rust-analyzer: reuse fetching target data layout from rustc function</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14087">rust-analyzer: support computing layout of RPIT</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14065">rust-analyzer: support generic function in <code>generate_function</code> assist</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14091">rust-analyzer: support sysroot library source being defined inside the workspace</a></li> </ul> <h3 id="rust-compiler-performance-triage"><a class="toclink" href="#rust-compiler-performance-triage">Rust Compiler Performance Triage</a></h3> <p>Much noise in benchmarks this week, which makes it hard to tell what the real improvements were and what they were due to. A query cache change (PR #107667) is part of the story. In addition, much improvement was reaped from the change to <em>not</em> deaggregate MIR (PR #107267). Finally, microoptimizing <code>fold_ty</code> (PR #107627) yielded a small improvement to a broad set of benchmarks.</p> <p>Triage done by <strong>@pnkfelix</strong>. Revision range: <a href="https://perf.rust-lang.org/?start=a64ef7d07d0411315be85a646586cb85eeb9c136&amp;end=e4dd9edb76a34ecbca539967f9662b8c0cc9c7fb&amp;absolute=false&amp;stat=instructions%3Au">a64ef7d0..e4dd9edb</a></p> <p><strong>Summary</strong>:</p> <table> <thead> <tr> <th align="center">(instructions:u)</th> <th align="center">mean</th> <th align="center">range</th> <th align="center">count</th> </tr> </thead> <tbody> <tr> <td align="center">Regressions ❌ <br /> (primary)</td> <td align="center">2.4%</td> <td align="center">[0.3%, 18.8%]</td> <td align="center">18</td> </tr> <tr> <td align="center">Regressions ❌ <br /> (secondary)</td> <td align="center">1.8%</td> <td align="center">[0.2%, 4.1%]</td> <td align="center">21</td> </tr> <tr> <td align="center">Improvements ✅ <br /> (primary)</td> <td align="center">-1.0%</td> <td align="center">[-3.2%, -0.3%]</td> <td align="center">88</td> </tr> <tr> <td align="center">Improvements ✅ <br /> (secondary)</td> <td align="center">-4.0%</td> <td align="center">[-13.1%, -0.1%]</td> <td align="center">47</td> </tr> <tr> <td align="center">All ❌✅ (primary)</td> <td align="center">-0.4%</td> <td align="center">[-3.2%, 18.8%]</td> <td align="center">106</td> </tr> </tbody> </table> <p>3 Regressions, 3 Improvements, 8 Mixed; 3 of them in rollups 41 artifact comparisons made in total</p> <p><a href="https://github.com/rust-lang/rustc-perf/blob/master/triage/2023-02-07.md">Full report here</a></p> <h3 id="approved-rfcs"><a class="toclink" href="#approved-rfcs"><a href="https://github.com/rust-lang/rfcs/commits/master">Approved RFCs</a></a></h3> <p>Changes to Rust follow the Rust <a href="https://github.com/rust-lang/rfcs#rust-rfcs">RFC (request for comments) process</a>. These are the RFCs that were approved for implementation this week:</p> <ul> <li><em>No RFCs were approved this week.</em></li> </ul> <h3 id="final-comment-period"><a class="toclink" href="#final-comment-period">Final Comment Period</a></h3> <p>Every week, <a href="https://www.rust-lang.org/team.html">the team</a> announces the 'final comment period' for RFCs and key PRs which are reaching a decision. Express your opinions now.</p> <h4 id="rfcs"><a class="toclink" href="#rfcs"><a href="https://github.com/rust-lang/rfcs/labels/final-comment-period">RFCs</a></a></h4> <ul> <li><em>No RFCs entered Final Comment Period this week.</em></li> </ul> <h4 id="tracking-issues-prs"><a class="toclink" href="#tracking-issues-prs"><a href="https://github.com/rust-lang/rust/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc">Tracking Issues &amp; PRs</a></a></h4> <ul> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/105300">rework min_choice algorithm of member constraints</a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/103695">fix: Unexpected trait bound not satisfied in HRTB and Associated Type</a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/107429">Stabilize feature <code>cstr_from_bytes_until_nul</code></a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/107490">rustdoc: remove inconsistently-present sidebar tooltips</a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/105798">Relax ordering rules for <code>asm!</code> operands</a></li> </ul> <h3 id="new-and-updated-rfcs"><a class="toclink" href="#new-and-updated-rfcs"><a href="https://github.com/rust-lang/rfcs/pulls">New and Updated RFCs</a></a></h3> <ul> <li>[new] <a href="https://github.com/rust-lang/rfcs/pull/3383"><code>recommended-bin-crates</code> field in <code>Cargo.toml</code></a></li> <li>[new] <a href="https://github.com/rust-lang/rfcs/pull/3382">Ref-wrapping</a></li> </ul> <h3 id="call-for-testing"><a class="toclink" href="#call-for-testing"><a href="https://github.com/rust-lang/rfcs/issues?q=label%3Acall-for-testing">Call for Testing</a></a></h3> <p>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:</p> <ul> <li><em>No RFCs issued a call for testing this week.</em></li> </ul> <p>If you are a feature implementer and would like your RFC to appear on the above list, add the new <code>call-for-testing</code> label to your RFC along with a comment providing testing instructions and/or guidance on which aspect(s) of the feature need testing.</p> <h2 id="upcoming-events"><a class="toclink" href="#upcoming-events">Upcoming Events</a></h2> <p>Rusty Events between 2023-02-08 - 2023-03-08 🦀</p> <h3 id="virtual"><a class="toclink" href="#virtual">Virtual</a></h3> <ul> <li>2023-02-08 | Virtual (Boulder, CO, US) | <a href="https://www.meetup.com/boulder-elixir-rust/">Boulder Elixir and Rust</a> <ul> <li><a href="https://www.meetup.com/boulder-elixir-rust/events/zvxcsryfcdblb/"><strong>Monthly Meetup</strong></a></li> </ul> </li> <li>2023-02-08 | Virtual (Redmond, WA, US; New York, NY, US; San Francisco, CA, US) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a> and <a href="https://www.meetup.com/microsoft-reactor-new-york/">Microsoft Rector New York</a> and <a href="https://www.meetup.com/microsoft-reactor-san-francisco/">Microsoft Reactor San Francisco</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/290224584/"><strong>Primeros pasos con Rust: QA y horas de comunidad</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-new-york/events/290224583/"><strong>New York Mirror</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-san-francisco/events/290224585/"><strong>San Francisco Mirror</strong></a></li> </ul> </li> <li>2023-02-09 | Virtual (Nürnberg, DE) | <a href="https://www.meetup.com/rust-noris/">Rust Nuremberg</a><ul> <li><a href="https://www.meetup.com/rust-noris/events/hlvbvsyfcdbmb/"><strong>Rust Nürnberg online</strong></a></li> </ul> </li> <li>2023-02-11 | Virtual | <a href="https://discord.gg/yNtPTb2">Rust GameDev</a><ul> <li><a href="https://discord.gg/yNtPTb2"><strong>Rust GameDev Monthly Meetup</strong></a></li> </ul> </li> <li>2023-02-13 | Virtual (Redmond, WA, US; New York, NY, US; San Francisco, CA, US) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a> and <a href="https://www.meetup.com/microsoft-reactor-new-york/">Microsoft Rector New York</a> and <a href="https://www.meetup.com/microsoft-reactor-san-francisco/">Microsoft Reactor San Francisco</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/290224610/"><strong>Primeros pasos con Rust - Escritura de pruebas automatizadas</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-new-york/events/290224608/"><strong>New York Mirror</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-san-francisco/events/290224609/"><strong>San Francisco Mirror</strong></a></li> </ul> </li> <li>2023-02-14 | Virtual (Berlin, DE) | <a href="https://www.meetup.com/opentechschool-berlin/">OpenTechSchool Berlin</a><ul> <li><a href="https://www.meetup.com/opentechschool-berlin/events/zdrzpsyfcdbsb/"><strong>Rust Hack and Learn</strong></a></li> </ul> </li> <li>2023-02-14 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/Dallas-Rust/">Dallas Rust</a><ul> <li><a href="https://www.meetup.com/dallas-rust/events/vndgwsyfcdbsb/"><strong>Second Tuesday</strong></a></li> </ul> </li> <li>2023-02-14 | Virtual (Redmond, WA, US; New York, NY, US; San Francisco, CA, US) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a> and <a href="https://www.meetup.com/microsoft-reactor-new-york/">Microsoft Rector New York</a> and <a href="https://www.meetup.com/microsoft-reactor-san-francisco/">Microsoft Reactor San Francisco</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/290224616/"><strong>Primeros pasos con Rust - Creamos un programa de ToDos en la línea de comandos</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-san-francisco/events/290224613/"><strong>San Francisco Mirror</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-new-york/events/290224617/"><strong>New York Mirror</strong></a></li> </ul> </li> <li>2023-02-14 | Virtual (Saarbrücken, DE) | <a href="https://www.meetup.com/rust-saar/">Rust-Saar</a><ul> <li><a href="https://www.meetup.com/rust-saar/events/290040138/"><strong>Meetup: 26u16</strong></a></li> </ul> </li> <li>2023-02-15 | Virtual | <a href="https://www.mongodb.com/">MongoDB</a><ul> <li><a href="https://www.mongodb.com/webinar/write-a-microservice-with-rust-and-mongodb"><strong>Write a Microservice With Rust and MongoDB</strong></a></li> </ul> </li> <li>2023-02-15 | Virtual (Redmond, WA, US; New York, NY, US; San Francisco, CA, US; São Paulo, BR) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a> and <a href="https://www.meetup.com/microsoft-reactor-new-york/">Microsoft Rector New York</a> and <a href="https://www.meetup.com/microsoft-reactor-san-francisco/">Microsoft Reactor San Francisco</a> and <a href="https://www.meetup.com/microsoft-reactor-sao-paulo">Microsoft Reactor São Paulo</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/290224624/"><strong>Primeros pasos con Rust: QA y horas de comunidad</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-redmond/events/290224624/"><strong>San Francisco Mirror</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-new-york/events/290224621/"><strong>New York Mirror</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-sao-paulo/events/290224623/"><strong>São Paulo Mirror</strong></a></li> </ul> </li> <li>2023-02-15 | Virtual (Vancouver, BC, CA) | <a href="https://www.meetup.com/vancouver-rust/">Vancouver Rust</a><ul> <li><a href="https://www.meetup.com/vancouver-rust/events/tqvhxsyfcdbtb/"><strong>Show &amp; Tell: Rust state machines in a file processor</strong></a></li> </ul> </li> <li>2023-02-16 | Virtual (Stuttgart, DE) | <a href="https://www.meetup.com/Rust-Community-Stuttgart/">Rust Community Stuttgart</a><ul> <li><a href="https://www.meetup.com/rust-community-stuttgart/events/qtvtvsyfcdbvb/"><strong>Rust-Meetup</strong></a></li> </ul> </li> <li>2023-02-21 | Virtual (Washington, DC, US) | <a href="https://www.meetup.com/rustdc/">Rust DC</a><ul> <li><a href="https://www.meetup.com/rustdc/events/vdhxgsyfcdbcc/"><strong>Mid-month Rustful</strong></a></li> </ul> </li> <li>2023-02-23 | Virtual (Charlottesville, VA, US) | <a href="https://www.meetup.com/charlottesville-rust-meetup/">Charlottesville Rust Meetup</a><ul> <li><a href="https://www.meetup.com/charlottesville-rust-meetup/events/291248593/"><strong>Tock, a Rust based Embedded Operating System</strong></a></li> </ul> </li> <li>2023-02-23 | Virtual (Kassel, DE) | <a href="https://www.meetup.com/java-user-group-hessen-jugh/">Java User Group Hessen</a><ul> <li><a href="https://www.meetup.com/java-user-group-hessen-jugh/events/290346591/"><strong>Eine Einführung in Rust (Stefan Baumgartner)</strong></a></li> </ul> </li> <li>2023-02-23 | Virtual (México City, MX) | <a href="https://www.meetup.com/rust-mx/">Rust MX</a><ul> <li><a href="https://www.meetup.com/rust-mx/events/291456677/"><strong>Rust: ¿por qué es una opción adecuada para implantar Blockchain?</strong></a></li> </ul> </li> <li>2023-02-28 | Virtual (Berlin, DE) | <a href="https://www.meetup.com/opentechschool-berlin/">Open Tech School Berlin</a><ul> <li><a href="https://www.meetup.com/opentechschool-berlin/events/290852327/"><strong>Rust Hack and Learn</strong></a></li> </ul> </li> <li>2023-02-28 | Virtual (Cardiff, UK) | <a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff">Rust and C++ Cardiff</a><ul> <li><a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/291338734/"><strong>Rust Nation - What we learnt</strong></a></li> </ul> </li> <li>2023-02-28 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/Dallas-Rust/">Dallas Rust</a><ul> <li><a href="https://www.meetup.com/dallas-rust/events/qndgwsyfcdblc/"><strong>Last Tuesday</strong></a></li> </ul> </li> <li>2023-02-28 | Virtual (Munich, DE) | <a href="https://www.meetup.com/rust-munich/">Rust Munich</a><ul> <li><a href="https://www.meetup.com/rust-munich/events/291437669/"><strong>Rust Munich 2023 / 1 - hybrid</strong></a></li> </ul> </li> <li>2023-03-01 | Virtual (Indianapolis, IN, US) | <a href="https://www.meetup.com/indyrs/">Indy Rust</a><ul> <li><a href="https://www.meetup.com/indyrs/events/qwtdjsyfcfbcb/"><strong>Indy.rs - with Social Distancing</strong></a></li> </ul> </li> <li>2023-03-02 | Virtual (Linz, AT) | <a href="https://www.meetup.com/rust-linz/">Rust Linz</a><ul> <li><a href="https://www.meetup.com/rust-linz/events/291483339/"><strong>Rust Meetup Linz - 30th Edition</strong></a></li> </ul> </li> <li>2023-03-07 | Virtual (Buffalo, NY, US) | <a href="https://www.meetup.com/buffalo-rust-meetup/">Buffalo Rust Meetup</a><ul> <li><a href="https://www.meetup.com/buffalo-rust-meetup/events/lsjbbtyfcfbkb/"><strong>First Tuesdays</strong></a></li> </ul> </li> <li>2023-03-08 | Virtual (Boulder, CO, US) | <a href="https://www.meetup.com/boulder-elixir-rust/">Boulder Elixir and Rust</a> <ul> <li><a href="https://www.meetup.com/boulder-elixir-rust/events/zvxcsryfcfblb/"><strong>Monthly Meetup</strong></a></li> </ul> </li> </ul> <h3 id="asia"><a class="toclink" href="#asia">Asia</a></h3> <ul> <li>2023-02-14 | Tokyo, JP | <a href="https://www.meetup.com/tokyo-rust-meetup">Tokyo Rust Meetup</a><ul> <li><a href="https://www.meetup.com/tokyo-rust-meetup/events/291349232/"><strong>Crafting Command Line Tools With Rust</strong></a></li> </ul> </li> <li>2023-02-20 | Tel Aviv, IL | <a href="https://www.meetup.com/rust-tlv/">Rust TLV</a><ul> <li><a href="https://www.meetup.com/rust-tlv/events/291182881/"><strong>February Edition - Redis and BioCatch talking Rust!</strong></a></li> </ul> </li> </ul> <h3 id="europe"><a class="toclink" href="#europe">Europe</a></h3> <ul> <li>2023-02-09 | Lille, FR | <a href="https://www.meetup.com/meetup-group-zgphbyet">Rust Lille</a><ul> <li><a href="https://www.meetup.com/meetup-group-zgphbyet/events/291046592/"><strong>Rust Lille #2</strong></a></li> </ul> </li> <li>2023-02-15 | London, UK | <a href="https://www.meetup.com/rust-london-user-group/">Rust London User Group</a><ul> <li><a href="https://www.meetup.com/rust-london-user-group/events/290903823/"><strong>Rust Nation Pre-Conference Reception with The Rust Foundation</strong></a></li> </ul> </li> <li>2023-02-15 | Trondheim, NO | <a href="https://www.meetup.com/rust-trondheim">Rust Trondheim</a><ul> <li><a href="https://www.meetup.com/rust-trondheim/events/290889889/"><strong>Rust New Year's Resolution Bug Hunt</strong></a></li> </ul> </li> <li>2023-02-16 | Bordeaux, FR | <a href="https://www.meetup.com/dedotalk/">DedoTalk</a><ul> <li><a href="https://www.meetup.com/dedotalk/events/291199962/"><strong>#1 DedoTalk 🎙️ : Rust pour un développeur Python</strong></a></li> </ul> </li> <li>2023-02-16, 2023-02-17 | London, UK | <a href="https://www.rustnationuk.com/">Rust Nation UK</a><ul> <li><a href="https://www.rustnationuk.com/"><strong>Rust Nation '23</strong></a></li> </ul> </li> <li>2023-02-18 | London, UK | <a href="https://www.meetup.com/rust-london-user-group/">Rust London User Group</a><ul> <li><a href="https://www.meetup.com/rust-london-user-group/events/291297886/"><strong>Post-Conference Rust in Enterprise Brunch Hosted at Red Badger</strong></a></li> </ul> </li> <li>2023-02-21 | Paris, FR | <a href="https://www.meetup.com/rust-paris/">Rust Paris</a><ul> <li><a href="https://www.meetup.com/rust-paris/events/291334081/"><strong>Rust Paris meetup #56</strong></a></li> </ul> </li> <li>2023-02-21 | Zurich, CH | <a href="https://www.meetup.com/rust-zurich/">Rust Zurich</a><ul> <li><a href="https://www.meetup.com/de-DE/rust-zurich/events/290915075/"><strong>Practical Cryptography - February Meetup (Registration opens 7 Feb 2023)</strong></a></li> </ul> </li> <li>2023-02-23 | Copenhagen, DK | <a href="https://www.meetup.com/copenhagen-rust-community">Copenhagen Rust Community</a><ul> <li><a href="https://www.meetup.com/copenhagen-rust-community/events/291288154/"><strong>Rust metup #33</strong></a></li> </ul> </li> <li>2023-02-23 | Vienna, AT | <a href="https://www.meetup.com/rust-vienna">Rust Vienna</a><ul> <li><a href="https://www.meetup.com/rust-vienna/events/291465732/"><strong>Rust Meetup Revived with an Exciting Exploration of Ownership!</strong></a></li> </ul> </li> <li>2023-02-28 | Munich, DE + Virtual | <a href="https://www.meetup.com/rust-munich/">Rust Munich</a><ul> <li><a href="https://www.meetup.com/rust-munich/events/291437669/"><strong>Rust Munich 2023 / 1 - hybrid</strong></a></li> </ul> </li> </ul> <h3 id="north-america"><a class="toclink" href="#north-america">North America</a></h3> <ul> <li>2023-02-09 | Mountain View, CA, US | <a href="https://www.meetup.com/rust-study-group/">Mountain View Rust Study Group</a><ul> <li><a href="https://www.meetup.com/rust-study-group/events/291190532/"><strong>Rust Study Group at Hacker Dojo</strong></a></li> </ul> </li> <li>2023-02-09 | New York, NY, US | <a href="https://www.meetup.com/rust-nyc/">Rust NYC</a><ul> <li><a href="https://www.meetup.com/rust-nyc/events/291239545/"><strong>A Night of Interop: Rust in React Native &amp; Rust in Golang (two talks)</strong></a></li> </ul> </li> <li>2023-02-13 | Minneapolis, MN, US | <a href="https://www.meetup.com/minneapolis-rust-meetup/">Minneapolis Rust Meetup</a><ul> <li><a href="https://www.meetup.com/minneapolis-rust-meetup/events/291299604/"><strong>Happy Hour and Beginner Embedded Rust Hacking Session (#3!)</strong></a></li> </ul> </li> <li>2023-02-21 | San Francisco, CA, US | <a href="https://www.meetup.com/san-francisco-rust-study-group/">San Francisco Rust Study Group</a><ul> <li><a href="https://www.meetup.com/san-francisco-rust-study-group/events/rwvwzsyfcdbcc/"><strong>Rust Hacking in Person</strong></a></li> </ul> </li> <li>2023-02-23 | Lehi, UT, US | <a href="https://www.meetup.com/utah-rust/">Utah Rust</a><ul> <li><a href="https://www.meetup.com/utah-rust/events/dsbpxsyfcdbfc/"><strong>Upcoming Event</strong></a></li> </ul> </li> </ul> <h3 id="oceania"><a class="toclink" href="#oceania">Oceania</a></h3> <ul> <li>2023-02-23 | Brisbane, QLD, AU | <a href="https://www.meetup.com/rust-brisbane/">Rust Brisbane</a><ul> <li><a href="https://www.meetup.com/rust-brisbane/events/291377036/"><strong>February Meetup</strong></a></li> </ul> </li> <li>2023-02-28 | Canberra, ACT, AU | <a href="https://www.meetup.com/rust-canberra/">Canberra Rust User Group</a><ul> <li><a href="https://www.meetup.com/rust-canberra/events/291278417/"><strong>February Meetup</strong></a></li> </ul> </li> <li>2023-03-01 | Sydney, NSW, AU | <a href="https://www.meetup.com/rust-sydney/">Rust Sydney</a><ul> <li><a href="https://www.meetup.com/rust-sydney/events/291265163/"><strong>🦀 Lightning Talks - We are back!</strong></a></li> </ul> </li> </ul> <h3 id="south-america"><a class="toclink" href="#south-america">South America</a></h3> <ul> <li>2023-02-22 | Montevideo, UY | <a href="https://www.meetup.com/rust-uruguay/">Rust Meetup Uruguay</a><ul> <li><a href="https://www.meetup.com/rust-uruguay/events/291386143/"><strong>Hands on: Lifetimes</strong></a></li> </ul> </li> </ul> <p>If you are running a Rust event please add it to the <a href="https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com">calendar</a> to get it mentioned here. Please remember to add a link to the event too. Email the <a href="mailto:community-team@rust-lang.org">Rust Community Team</a> for access.</p> <h2 id="jobs"><a class="toclink" href="#jobs">Jobs</a></h2> <!-- Rust Jobs: TWiR has stopped featuring individual job postings. You can read more about this change here: https://github.com/rust-lang/this-week-in-rust/issues/3412 --> <p>Please see the latest <a href="https://www.reddit.com/r/rust/comments/10nmtew/official_rrust_whos_hiring_thread_for_jobseekers/">Who's Hiring thread on r/rust</a></p> <h1 id="quote-of-the-week"><a class="toclink" href="#quote-of-the-week">Quote of the Week</a></h1> <blockquote> <p>It's been 7.5 years since <a href="https://github.com/rust-lang/rust/issues/27060">#27060 </a> was reported, but the problem is finally fixed for good. :‍)</p> </blockquote> <p>– <a href="https://github.com/rust-lang/rust/issues/82523#issuecomment-1416850743">Ralf Jung on github</a></p> <p>Thanks to <a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328/1371">scottmcm</a> for the suggestion!</p> <p><a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328">Please submit quotes and vote for next week!</a></p> <p><em>This Week in Rust is edited by: <a href="https://github.com/nellshamrell">nellshamrell</a>, <a href="https://github.com/llogiq">llogiq</a>, <a href="https://github.com/cdmistman">cdmistman</a>, <a href="https://github.com/ericseppanen">ericseppanen</a>, <a href="https://github.com/extrawurst">extrawurst</a>, <a href="https://github.com/andrewpollack">andrewpollack</a>, <a href="https://github.com/U007D">U007D</a>, <a href="https://github.com/kolharsam">kolharsam</a>, <a href="https://github.com/joelmarcey">joelmarcey</a>, <a href="https://github.com/mariannegoldin">mariannegoldin</a>, <a href="https://github.com/bennyvasquez">bennyvasquez</a>.</em></p> <p><em>Email list hosting is sponsored by <a href="https://foundation.rust-lang.org/">The Rust Foundation</a></em></p> <p><small><a href="https://www.reddit.com/r/rust/comments/10xiw1a/this_week_in_rust_481/">Discuss on r/rust</a></small></p> This Week in Rust 480 freedit 2023-02-01 2023-02-01 25 <p>Hello and welcome to another issue of <em>This Week in Rust</em>! <a href="https://www.rust-lang.org/">Rust</a> 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? Tag us at <a href="https://twitter.com/ThisWeekInRust">@ThisWeekInRust</a> on Twitter or <a href="https://mastodon.social/@thisweekinrust">@ThisWeekinRust</a> on mastodon.social, or <a href="https://github.com/rust-lang/this-week-in-rust">send us a pull request</a>. Want to get involved? <a href="https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md">We love contributions</a>.</p> <p><em>This Week in Rust</em> is openly developed <a href="https://github.com/rust-lang/this-week-in-rust">on GitHub</a>. If you find any errors in this week's issue, <a href="https://github.com/rust-lang/this-week-in-rust/pulls">please submit a PR</a>.</p> <h2 id="updates-from-rust-community"><a class="toclink" href="#updates-from-rust-community">Updates from Rust Community</a></h2> <!-- Dear community contributors: Please read README.md for guidance on submissions. Each submitted link should be of the form: * [Title of the Linked Page](https://example.com/my_article) If you don't know which category to use, feel free to submit a PR anyway and just ask the editors to select the category. --> <h3 id="official"><a class="toclink" href="#official">Official</a></h3> <ul> <li><a href="https://blog.rust-lang.org/2023/01/26/Rust-1.67.0.html">Announcing Rust 1.67.0</a></li> <li><a href="https://blog.rust-lang.org/inside-rust/2023/01/30/cargo-sparse-protocol.html">Help test Cargo's new index protocol</a></li> </ul> <h3 id="foundation"><a class="toclink" href="#foundation">Foundation</a></h3> <ul> <li><a href="https://foundation.rust-lang.org/news/rust-foundation-annual-report-2022/">Rust Foundation Annual Report 2022</a></li> </ul> <h3 id="newsletters"><a class="toclink" href="#newsletters">Newsletters</a></h3> <ul> <li><a href="https://gamedev.rs/news/041/">This Month in Rust GameDev #41 - December 2022</a></li> </ul> <h3 id="projecttooling-updates"><a class="toclink" href="#projecttooling-updates">Project/Tooling Updates</a></h3> <ul> <li><a href="https://github.com/hubblo-org/scaphandre/discussions/258">Scaphandre 0.5.0, to measure energy consumption of IT servers and computers, is released : windows compatibility (experimental), multiple sensors support, and much more...</a></li> <li><a href="https://intellij-rust.github.io/2023/01/30/changelog-187.html">IntelliJ Rust Changelog #187</a></li> <li><a href="https://rust-analyzer.github.io/thisweek/2023/01/30/changelog-166.html">rust-analyzer changelog #166</a></li> <li><a href="https://argmin-rs.org/blog/version-v0-8-0/">argmin 0.8.0 and argmin-math 0.3.0 released</a></li> <li><a href="https://www.fornjot.app/blog/weekly-release/2023-w05/">Fornjot (code-first CAD in Rust) - Weekly Release - The Usual Rabbit Hole</a></li> <li><a href="https://engineering.iog.io/2023-01-26-hs-bindgen-introduction/">One step forward, an easier interoperability between Rust and Haskell</a></li> <li><a href="https://xaeroxe.github.io/async-io/">Managing complex communication over raw I/O streams using <code>async-io-typed</code> and <code>async-io-converse</code></a></li> <li><a href="https://github.com/fiberplane/autometrics-rs">Autometrics - a macro that tracks metrics for any function &amp; inserts links to Prometheus charts right into each function's doc comments</a></li> </ul> <h3 id="observationsthoughts"><a class="toclink" href="#observationsthoughts">Observations/Thoughts</a></h3> <ul> <li><a href="https://orlp.net/blog/ordering-numbers/">Ordering Numbers, How Hard Can It Be?</a></li> <li><a href="https://matklad.github.io/2023/01/25/next-rust-compiler.html">Next Rust Compiler</a></li> <li><a href="https://fathy.fr/carbonyl">Forking Chrome to render in a terminal</a></li> <li><a href="https://medium.com/@xpf6677/40x-faster-we-rewrote-our-project-with-rust-120b006c6abe">40x Faster! We rewrote our project with Rust!</a></li> <li><a href="https://predr.ag/blog/moving-and-reexporting-rust-type-can-be-major-breaking-change/">Moving and re-exporting a Rust type can be a major breaking change</a></li> <li><a href="https://apollolabsblog.hashnode.dev/what-the-hal-the-quest-for-finding-a-suitable-embedded-rust-hal">What the HAL? The Quest for Finding a Suitable Embedded Rust HAL</a></li> <li><a href="https://predr.ag/blog/some-rust-breaking-changes-do-not-require-major-version/">Some Rust breaking changes don't require a major version</a></li> <li><a href="https://tweedegolf.nl/en/blog/82/crash-and-now-what">Crash! And now what?</a></li> </ul> <h3 id="rust-walkthroughs"><a class="toclink" href="#rust-walkthroughs">Rust Walkthroughs</a></h3> <ul> <li><a href="https://bmoxb.io/2023/01/28/integer-overflow-in-rust.html">Handling Integer Overflow in Rust</a></li> <li><a href="https://antoinerr.github.io/blog-website/2023/01/28/rust-anyhow.html">Rust error handling with anyhow</a></li> <li><a href="https://cetra3.github.io/blog/synchronising-with-websocket/">Synchronizing state with Websockets and JSON Patch</a></li> <li><a href="https://reorchestrate.com/posts/plugins-for-rust/">Plugins for Rust</a></li> <li>[series] <a href="https://d2718.net/blog/posts/protohax_00.html">Protohackers in Rust, Part 00: Dipping the toe in async and Tokio</a></li> <li><a href="https://konghq.com/blog/building-grpc-apis-with-rust">Building gRPC APIs with Rust using Tonic</a></li> </ul> <h3 id="miscellaneous"><a class="toclink" href="#miscellaneous">Miscellaneous</a></h3> <ul> <li><a href="https://matklad.github.io/2023/01/26/rusts-ugly-syntax.html">Rust's Ugly Syntax</a></li> <li>[video] <a href="https://www.youtube.com/watch?v=MWRPYBoCEaY">Rust's Witchcraft</a></li> <li>[DE] <a href="https://www.heise.de/news/CodeSandbox-Nun-auch-fuer-die-Rust-Entwicklung-7470518.html">CodeSandbox: Nun auch für die Rust-Entwicklung</a></li> </ul> <h2 id="crate-of-the-week"><a class="toclink" href="#crate-of-the-week">Crate of the Week</a></h2> <p>This week's crate is <a href="https://lib.rs/crates/symphonia">symphonia</a>, a collection of pure-Rust audio decoders for many common formats.</p> <p>Thanks to <a href="https://users.rust-lang.org/t/crate-of-the-week/2704/1151">Kornel</a> for the suggestion!</p> <p><a href="https://users.rust-lang.org/t/crate-of-the-week/2704">Please submit your suggestions and votes for next week</a>!</p> <h2 id="call-for-participation"><a class="toclink" href="#call-for-participation">Call for Participation</a></h2> <p>Always wanted to contribute to open-source projects but did not know where to start? Every week we highlight some tasks from the Rust community for you to pick and get started!</p> <p>Some of these tasks may also have mentors available, visit the task page for more information.</p> <ul> <li><a href="https://github.com/diesel-rs/diesel/issues/3386">diesel - Generate matching SQL types for Mysql enums</a></li> </ul> <p>If you are a Rust project owner and are looking for contributors, please submit tasks <a href="https://users.rust-lang.org/t/twir-call-for-participation/4821">here</a>.</p> <!-- https://users.rust-lang.org/t/twir-call-for-participation/4821/489 --> <h2 id="updates-from-the-rust-project"><a class="toclink" href="#updates-from-the-rust-project">Updates from the Rust Project</a></h2> <p>377 pull requests were <a href="https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2023-01-23..2023-01-30">merged in the last week</a></p> <ul> <li><a href="https://github.com/rust-lang/rust/pull/106745">move <code>format_args!()</code> into AST (and expand it during AST lowering)</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106946">implement Hash for <code>proc_macro::LineColumn</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/105552">add help message about function pointers</a></li> <li><a href="https://github.com/rust-lang/rust/pull/105345">add hint for missing lifetime bound on trait object when type alias is used</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107213">add suggestion to remove if in <code>let</code>..<code>else</code> block</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107197">assume MIR types are fully normalized in <code>ascribe_user_type</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/107425">check for missing space between fat arrow and range pattern</a></li> <li><a href="https://github.com/rust-lang/rust/pull/101692">compute generator saved locals on MIR</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106856">core: support variety of atomic widths in width-agnostic functions</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107306">correct suggestions for closure arguments that need a borrow</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107096">detect references to non-existant messages in Fluent resources</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107323">disable <code>ConstGoto</code> opt in cleanup blocks</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107373">don't merge vtables when full debuginfo is enabled</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107097">fix def-use dominance check</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107360">fix thin archive reading</a></li> <li><a href="https://github.com/rust-lang/rust/pull/97373">impl <code>DispatchFromDyn</code> for <code>Cell</code> and <code>UnsafeCell</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/106908">implement simple <code>CopyPropagation</code> based on SSA analysis</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106407">improve proc macro attribute diagnostics</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106540">insert whitespace to avoid ident concatenation in suggestion</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107406">only compute <code>mir_generator_witnesses</code> query in <code>drop_tracking_mir</code> mode</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106904">preserve split DWARF files when building archives</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107190">recover from more const arguments that are not wrapped in curly braces</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107172">reimplement <code>NormalizeArrayLen</code> based on <code>SsaLocals</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/106916">remove overlapping parts of multipart suggestions</a></li> <li><a href="https://github.com/rust-lang/rust/pull/103659">special-case deriving <code>PartialOrd</code> for enums with dataless variants</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106583">suggest coercion of <code>Result</code> using <code>?</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/107204">suggest qualifying bare associated constants</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106944">suggest using a lock for <code>*Cell: Sync</code> bounds</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106960">teach parser to understand fake anonymous enum syntax</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107304">use <code>can_eq</code> to compare types for default assoc type error</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107100">use proper <code>InferCtxt</code> when probing for associated types in astconv</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106227">use stable metric for const eval limit instead of current terminator-based logic</a></li> <li><a href="https://github.com/rust-lang/rust/pull/106836">remove optimistic spinning from <code>mpsc::SyncSender</code></a></li> <li><a href="https://github.com/rust-lang/rust/pull/104252">stabilize the <code>const_socketaddr</code> feature</a></li> <li><a href="https://github.com/rust-lang/rustc_codegen_gcc/pull/249">codegen_gcc: fix/signed integer overflow</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11612">cargo: <code>cargo add</code> check <code>[dependencies]</code> order without considering the dotted item</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11648">cargo: avoid saving the same <code>future_incompat</code> warning multiple times</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11347">cargo: fix split-debuginfo support detection</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11572">cargo: make cargo aware of dwp files</a></li> <li><a href="https://github.com/rust-lang/cargo/pull/11652">cargo: mention current default value in <code>publish.timeout</code> docs</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107054">rustdoc: collect rustdoc-reachable items during early doc link resolution</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107266">rustdoc: prohibit scroll bar on source viewer in Safari</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107284">rustdoc: use smarter encoding for playground URL</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107264">rustdoc: add option to include private items in library docs</a></li> <li><a href="https://github.com/rust-lang/rust/pull/107357">fix infinite loop in rustdoc <code>get_all_import_attributes</code> function</a></li> <li><a href="https://github.com/rust-lang/rustfmt/pull/5475">rustfmt: don't wrap comments that are part of a table</a></li> <li><a href="https://github.com/rust-lang/rustfmt/pull/5601">rustfmt: fix for handling empty code block in doc comment</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10231">clippy: <code>invalid_regex</code>: show full error when string value doesn't match source</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10260">clippy: <code>multiple_unsafe_ops_per_block</code>: don't lint in external macros</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10226">clippy: improve span for <code>module_name_repetitions</code></a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10248">clippy: missing config</a></li> <li><a href="https://github.com/rust-lang/rust-clippy/pull/10255">clippy: prevents <code>len_without_is_empty</code> from triggering when <code>len</code> takes arguments besides <code>&amp;self</code></a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14012">rust-analyzer: adding section for Visual Studio IDE Rust development support</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14038">rust-analyzer: don't fail workspace loading if sysroot can't be found</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14057">rust-analyzer: improve "match to let else" assist</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14041">rust-analyzer: show signature help when typing record literal</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14011">rust-analyzer: ide-assists: unwrap block when it parent is let stmt</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14023">rust-analyzer: fix config substitution failing extension activation</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14015">rust-analyzer: don't include lifetime or label apostrophe when renaming</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14039">rust-analyzer: fix "add missing impl members" assist for impls inside blocks</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14020">rust-analyzer: fix assoc item search finding unrelated definitions</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14025">rust-analyzer: fix process-changes not deduplicating changes correctly</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14037">rust-analyzer: handle boolean scrutinees in match <code>&lt;-&gt;</code> if let replacement assists better</a></li> <li><a href="https://github.com/rust-lang/rust-analyzer/pull/14019">rust-analyzer: substitute VSCode variables more generally</a></li> </ul> <h3 id="rust-compiler-performance-triage"><a class="toclink" href="#rust-compiler-performance-triage">Rust Compiler Performance Triage</a></h3> <p>Overall a positive week, with relatively few regressions overall and a number of improvements.</p> <p>Triage done by <strong>@simulacrum</strong>. Revision range: <a href="https://perf.rust-lang.org/?start=c8e6a9e8b6251bbc8276cb78cabe1998deecbed7&amp;end=a64ef7d07d0411315be85a646586cb85eeb9c136&amp;absolute=false&amp;stat=instructions%3Au">c8e6a9e..a64ef7d</a></p> <p><strong>Summary</strong>:</p> <table> <thead> <tr> <th align="center">(instructions:u)</th> <th align="center">mean</th> <th align="center">range</th> <th align="center">count</th> </tr> </thead> <tbody> <tr> <td align="center">Regressions ❌ <br /> (primary)</td> <td align="center">0.6%</td> <td align="center">[0.6%, 0.6%]</td> <td align="center">1</td> </tr> <tr> <td align="center">Regressions ❌ <br /> (secondary)</td> <td align="center">0.3%</td> <td align="center">[0.3%, 0.3%]</td> <td align="center">1</td> </tr> <tr> <td align="center">Improvements ✅ <br /> (primary)</td> <td align="center">-0.8%</td> <td align="center">[-2.0%, -0.2%]</td> <td align="center">27</td> </tr> <tr> <td align="center">Improvements ✅ <br /> (secondary)</td> <td align="center">-0.9%</td> <td align="center">[-1.9%, -0.5%]</td> <td align="center">11</td> </tr> <tr> <td align="center">All ❌✅ (primary)</td> <td align="center">-0.8%</td> <td align="center">[-2.0%, 0.6%]</td> <td align="center">28</td> </tr> </tbody> </table> <p>2 Regressions, 4 Improvements, 6 Mixed; 2 of them in rollups 44 artifact comparisons made in total</p> <p><a href="https://github.com/rust-lang/rustc-perf/blob/master/triage/2023-01-31.md">Full report here</a></p> <h3 id="approved-rfcs"><a class="toclink" href="#approved-rfcs"><a href="https://github.com/rust-lang/rfcs/commits/master">Approved RFCs</a></a></h3> <p>Changes to Rust follow the Rust <a href="https://github.com/rust-lang/rfcs#rust-rfcs">RFC (request for comments) process</a>. These are the RFCs that were approved for implementation this week:</p> <ul> <li><a href="https://github.com/rust-lang/rfcs/pull/3346">Create an Operational Semantics Team</a></li> </ul> <h3 id="final-comment-period"><a class="toclink" href="#final-comment-period">Final Comment Period</a></h3> <p>Every week, <a href="https://www.rust-lang.org/team.html">the team</a> announces the 'final comment period' for RFCs and key PRs which are reaching a decision. Express your opinions now.</p> <h4 id="rfcs"><a class="toclink" href="#rfcs"><a href="https://github.com/rust-lang/rfcs/labels/final-comment-period">RFCs</a></a></h4> <ul> <li><em>No RFCs entered Final Comment Period this week.</em></li> </ul> <h4 id="tracking-issues-prs"><a class="toclink" href="#tracking-issues-prs"><a href="https://github.com/rust-lang/rust/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc">Tracking Issues &amp; PRs</a></a></h4> <ul> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/107429">Stabilize feature <code>cstr_from_bytes_until_nul</code></a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/107043">Support <code>true</code> and <code>false</code> as boolean flag params</a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/107317">Implement <code>AsFd</code> and <code>AsRawFd</code> for <code>Rc</code></a></li> <li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/107141">rustdoc: compute maximum Levenshtein distance based on the query</a></li> </ul> <h3 id="new-and-updated-rfcs"><a class="toclink" href="#new-and-updated-rfcs"><a href="https://github.com/rust-lang/rfcs/pulls">New and Updated RFCs</a></a></h3> <ul> <li>[new] <a href="https://github.com/rust-lang/rfcs/pull/3380">Permissions</a></li> <li>[new] <a href="https://github.com/rust-lang/rfcs/pull/3379">Add text for the CFG OS Version RFC</a></li> </ul> <h3 id="call-for-testing"><a class="toclink" href="#call-for-testing"><a href="https://github.com/rust-lang/rfcs/issues?q=label%3Acall-for-testing">Call for Testing</a></a></h3> <p>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:</p> <ul> <li><a href="https://blog.rust-lang.org/inside-rust/2023/01/30/cargo-sparse-protocol.html">Feature: Help test Cargo's new index protocol</a></li> </ul> <p>If you are a feature implementer and would like your RFC to appear on the above list, add the new <code>call-for-testing</code> label to your RFC along with a comment providing testing instructions and/or guidance on which aspect(s) of the feature need testing.</p> <h2 id="upcoming-events"><a class="toclink" href="#upcoming-events">Upcoming Events</a></h2> <p>Rusty Events between 2023-02-01 - 2023-03-01 🦀</p> <h3 id="virtual"><a class="toclink" href="#virtual">Virtual</a></h3> <ul> <li>2023-02-01 | Virtual (Cardiff, UK) | <a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff">Rust and C++ Cardiff</a><ul> <li><a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/291184911/"><strong>New Year Virtual Social + Share</strong></a></li> </ul> </li> <li>2023-02-01 | Virtual (Indianapolis, IN, US) | <a href="https://www.meetup.com/indyrs/">Indy Rust</a><ul> <li><a href="https://www.meetup.com/indyrs/events/qwtdjsyfcdbcb/"><strong>Indy.rs - with Social Distancing</strong></a></li> </ul> </li> <li>2023-02-01 | Virtual (Redmond, WA, US; New York, NY, US; San Francisco, CA, US) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a> and <a href="https://www.meetup.com/microsoft-reactor-new-york/events/290224570/">Microsoft Reactor New York</a> and <a href="https://www.meetup.com/microsoft-reactor-san-francisco/">Microsoft Reactor San Francisco</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/290224566/"><strong>Primeros pasos con Rust: QA y horas de comunidad</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-new-york/events/290224570/"><strong>New York Mirror</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-san-francisco/events/290224568/"><strong>San Francisco Mirror</strong></a></li> </ul> </li> <li>2023-02-01 | Virtual (Stuttgart, DE) | <a href="https://www.meetup.com/Rust-Community-Stuttgart/">Rust Community Stuttgart</a><ul> <li><a href="https://www.meetup.com/rust-community-stuttgart/events/dvvtvsyfcdbcb/"><strong>Rust-Meetup</strong></a></li> </ul> </li> <li>2023-02-06 | Virtual (Redmond, WA, US; New York, NY, US; San Francisco, CA, US) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a> and <a href="https://www.meetup.com/microsoft-reactor-new-york/events/290224572/">Microsoft Reactor New York</a> and <a href="https://www.meetup.com/microsoft-reactor-san-francisco/">Microsoft Reactor San Francisco</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/290224576/"><strong>Primeros pasos con Rust - Implementación de tipos y rasgos genéricos</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-new-york/events/290224572/"><strong>New York Mirror</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-san-francisco/events/290224573/"><strong>San Francisco Mirror</strong></a></li> </ul> </li> <li>2023-02-07 | Virtual (Beijing, CN) | <a href="https://www.meetup.com/wasm-rust-meetup/">WebAssembly and Rust Meetup (Rustlang)</a><ul> <li><a href="https://www.meetup.com/wasm-rust-meetup/events/290609896/"><strong>Monthly WasmEdge Community Meeting, a CNCF sandbox WebAssembly runtime</strong></a></li> </ul> </li> <li>2023-02-07 | Virtual (Buffalo, NY, US) | <a href="https://www.meetup.com/buffalo-rust-meetup/">Buffalo Rust Meetup</a><ul> <li><a href="https://www.meetup.com/buffalo-rust-meetup/events/lsjbbtyfcdbkb/"><strong>Buffalo Rust User Group, First Tuesdays</strong></a></li> </ul> </li> <li>2023-02-07 | Virtual (Redmond, WA, US; New York, NY, US; San Francisco, CA, US) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a> and <a href="https://www.meetup.com/microsoft-reactor-new-york/">Microsoft Reactor New York</a> and <a href="https://www.meetup.com/microsoft-reactor-san-francisco/">Microsoft Reactor San Francisco</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/290224578/"><strong>Primeros pasos con Rust - Módulos, paquetes y contenedores de terceros</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-new-york/events/290224577/"><strong>New York Mirror</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-san-francisco/events/290224579/"><strong>San Francisco Mirror</strong></a></li> </ul> </li> <li>2023-02-08 | Virtual (Boulder, CO, US) | <a href="https://www.meetup.com/boulder-elixir-rust/">Boulder Elixir and Rust</a> <ul> <li><a href="https://www.meetup.com/boulder-elixir-rust/events/zvxcsryfcdblb/"><strong>Monthly Meetup</strong></a></li> </ul> </li> <li>2023-02-08 | Virtual (Redmond, WA, US; New York, NY, US; San Francisco, CA, US) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a> and <a href="https://www.meetup.com/microsoft-reactor-new-york/">Microsoft Rector New York</a> and <a href="https://www.meetup.com/microsoft-reactor-san-francisco/">Microsoft Reactor San Francisco</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/290224584/"><strong>Primeros pasos con Rust: QA y horas de comunidad</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-new-york/events/290224583/"><strong>New York Mirror</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-san-francisco/events/290224585/"><strong>San Francisco Mirror</strong></a></li> </ul> </li> <li>2023-02-09 | Virtual (Nürnberg, DE) | <a href="https://www.meetup.com/rust-noris/">Rust Nuremberg</a><ul> <li><a href="https://www.meetup.com/rust-noris/events/hlvbvsyfcdbmb/"><strong>Rust Nürnberg online</strong></a></li> </ul> </li> <li>2023-02-11 | Virtual | <a href="https://discord.gg/yNtPTb2">Rust GameDev</a><ul> <li><a href="https://discord.gg/yNtPTb2"><strong>Rust GameDev Monthly Meetup</strong></a></li> </ul> </li> <li>2023-02-13 | Virtual (Redmond, WA, US; New York, NY, US; San Francisco, CA, US) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a> and <a href="https://www.meetup.com/microsoft-reactor-new-york/">Microsoft Rector New York</a> and <a href="https://www.meetup.com/microsoft-reactor-san-francisco/">Microsoft Reactor San Francisco</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/290224610/"><strong>Primeros pasos con Rust - Escritura de pruebas automatizadas</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-new-york/events/290224608/"><strong>New York Mirror</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-san-francisco/events/290224609/"><strong>San Francisco Mirror</strong></a></li> </ul> </li> <li>2023-02-14 | Virtual (Berlin, DE) | <a href="https://www.meetup.com/opentechschool-berlin/">OpenTechSchool Berlin</a><ul> <li><a href="https://www.meetup.com/opentechschool-berlin/events/zdrzpsyfcdbsb/"><strong>Rust Hack and Learn</strong></a></li> </ul> </li> <li>2023-02-14 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/Dallas-Rust/">Dallas Rust</a><ul> <li><a href="https://www.meetup.com/dallas-rust/events/vndgwsyfcdbsb/"><strong>Second Tuesday</strong></a></li> </ul> </li> <li>2023-02-14 | Virtual (Redmond, WA, US; New York, NY, US; San Francisco, CA, US) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a> and <a href="https://www.meetup.com/microsoft-reactor-new-york/">Microsoft Rector New York</a> and <a href="https://www.meetup.com/microsoft-reactor-san-francisco/">Microsoft Reactor San Francisco</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/290224616/"><strong>Primeros pasos con Rust - Creamos un programa de ToDos en la línea de comandos</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-san-francisco/events/290224613/"><strong>San Francisco Mirror</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-new-york/events/290224617/"><strong>New York Mirror</strong></a></li> </ul> </li> <li>2023-02-14 | Virtual (Saarbrücken, DE) | <a href="https://www.meetup.com/rust-saar/">Rust-Saar</a><ul> <li><a href="https://www.meetup.com/rust-saar/events/290040138/"><strong>Meetup: 26u16</strong></a></li> </ul> </li> <li>2023-02-15 | Virtual (Redmond, WA, US; New York, NY, US; San Francisco, CA, US; São Paulo, BR) | <a href="https://www.meetup.com/microsoft-reactor-redmond/">Microsoft Reactor Redmond</a> and <a href="https://www.meetup.com/microsoft-reactor-new-york/">Microsoft Rector New York</a> and <a href="https://www.meetup.com/microsoft-reactor-san-francisco/">Microsoft Reactor San Francisco</a> and <a href="https://www.meetup.com/microsoft-reactor-sao-paulo">Microsoft Reactor São Paulo</a><ul> <li><a href="https://www.meetup.com/microsoft-reactor-redmond/events/290224624/"><strong>Primeros pasos con Rust: QA y horas de comunidad</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-redmond/events/290224624/"><strong>San Francisco Mirror</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-new-york/events/290224621/"><strong>New York Mirror</strong></a> | <a href="https://www.meetup.com/microsoft-reactor-sao-paulo/events/290224623/"><strong>São Paulo Mirror</strong></a></li> </ul> </li> <li>2023-02-15 | Virtual (Vancouver, BC, CA) | <a href="https://www.meetup.com/vancouver-rust/">Vancouver Rust</a><ul> <li><a href="https://www.meetup.com/vancouver-rust/events/tqvhxsyfcdbtb/"><strong>Rust Study/Hack/Hang-out</strong></a></li> </ul> </li> <li>2023-02-21 | Virtual (Washington, DC, US) | <a href="https://www.meetup.com/rustdc/">Rust DC</a><ul> <li><a href="https://www.meetup.com/rustdc/events/vdhxgsyfcdbcc/"><strong>Mid-month Rustful</strong></a></li> </ul> </li> <li>2023-02-23 | Virtual (Charlottesville, VA, US) | <a href="https://www.meetup.com/charlottesville-rust-meetup/">Charlottesville Rust Meetup</a><ul> <li><a href="https://www.meetup.com/charlottesville-rust-meetup/events/291248593/"><strong>Tock, a Rust based Embedded Operating System</strong></a></li> </ul> </li> <li>2023-02-23 | Virtual (Kassel, DE) | <a href="https://www.meetup.com/java-user-group-hessen-jugh/">Java User Group Hessen</a><ul> <li><a href="https://www.meetup.com/java-user-group-hessen-jugh/events/290346591/"><strong>Eine Einführung in Rust (Stefan Baumgartner)</strong></a></li> </ul> </li> <li>2023-02-28 | Virtual (Berlin, DE) | <a href="https://www.meetup.com/opentechschool-berlin/">Open Tech School Berlin</a><ul> <li><a href="https://www.meetup.com/opentechschool-berlin/events/290852327/"><strong>Rust Hack and Learn</strong></a></li> </ul> </li> <li>2023-02-28 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/Dallas-Rust/">Dallas Rust</a><ul> <li><a href="https://www.meetup.com/dallas-rust/events/qndgwsyfcdblc/"><strong>Last Tuesday</strong></a></li> </ul> </li> <li>2023-03-01 | Virtual (Indianapolis, IN, US) | <a href="https://www.meetup.com/indyrs/">Indy Rust</a><ul> <li><a href="https://www.meetup.com/indyrs/events/qwtdjsyfcfbcb/"><strong>Indy.rs - with Social Distancing</strong></a></li> </ul> </li> </ul> <h3 id="asia"><a class="toclink" href="#asia">Asia</a></h3> <ul> <li>2023-02-01 | Kyoto, JP | <a href="https://www.meetup.com/kansai-rust">Kansai Rust</a><ul> <li><a href="https://www.meetup.com/kansai-rust/events/291020672"><strong>Rust talk: How to implement Iterator on tuples... kind of</strong></a></li> </ul> </li> <li>2023-02-20 | Tel Aviv, IL | <a href="https://www.meetup.com/rust-tlv/">Rust TLV</a><ul> <li><a href="https://www.meetup.com/rust-tlv/events/291182881/"><strong>February Edition - Redis and BioCatch talking Rust!</strong></a></li> </ul> </li> </ul> <h3 id="europe"><a class="toclink" href="#europe">Europe</a></h3> <ul> <li>2023-02-02 | Berlin, DE | <a href="https://www.meetup.com/prenzlauer-berg-software-engineers/">Prenzlauer Berg Software Engineers</a><ul> <li><a href="https://www.meetup.com/prenzlauer-berg-software-engineers/events/290513923/"><strong>PBerg engineers - inaugural meetup; Lukas: Serverless APIs using Rust and Azure functions (Fee)</strong></a></li> </ul> </li> <li>2023-02-02 | Hamburg, DE | <a href="https://www.meetup.com/rust-meetup-hamburg/">Rust Meetup Hamburg</a><ul> <li><a href="https://www.meetup.com/rust-meetup-hamburg/events/290824576/"><strong>Rust Hack &amp; Learn February 2023</strong></a></li> </ul> </li> <li>2023-02-02 | Lyon, FR | <a href="https://mobilizon.fr/events/b8577678-d072-4d9a-9562-974715f1dfbb">Rust Lyon</a><ul> <li><a href="https://mobilizon.fr/events/b8577678-d072-4d9a-9562-974715f1dfbb"><strong>Rust Lyon meetup #01</strong></a></li> </ul> </li> <li>2023-02-04 | Brussels, BE | <a href="https://fosdem.org/">FOSDEM</a><ul> <li><a href="https://fosdem.org/2023/schedule/track/rust/"><strong>FOSDEM 2023 Conference: Rust devroom</strong></a></li> </ul> </li> <li>2023-02-09 | Lille, FR | <a href="https://www.meetup.com/meetup-group-zgphbyet">Rust Lille</a><ul> <li><a href="https://www.meetup.com/meetup-group-zgphbyet/events/291046592/"><strong>Rust Lille #2</strong></a></li> </ul> </li> <li>2023-02-15 | London, UK | <a href="https://www.meetup.com/rust-london-user-group/">Rust London User Group</a><ul> <li><a href="https://www.meetup.com/rust-london-user-group/events/290903823/"><strong>Rust Nation Pre-Conference Reception with The Rust Foundation</strong></a></li> </ul> </li> <li>2023-02-15 | Trondheim, NO | <a href="https://www.meetup.com/rust-trondheim">Rust Trondheim</a><ul> <li><a href="https://www.meetup.com/rust-trondheim/events/290889889/"><strong>Rust New Year's Resolution Bug Hunt</strong></a></li> </ul> </li> <li>2023-02-16, 2023-02-17 | London, UK | <a href="https://www.rustnationuk.com/">Rust Nation UK</a><ul> <li><a href="https://www.rustnationuk.com/"><strong>Rust Nation '23</strong></a></li> </ul> </li> <li>2023-02-18 | London, UK | <a href="https://www.meetup.com/rust-london-user-group/">Rust London User Group</a><ul> <li><a href="https://www.meetup.com/rust-london-user-group/events/291297886/"><strong>Post-Conference Rust in Enterprise Brunch Hosted at Red Badger</strong></a></li> </ul> </li> <li>2023-02-21 | Zurich, CH | <a href="https://www.meetup.com/rust-zurich/">Rust Zurich</a><ul> <li><a href="https://www.meetup.com/de-DE/rust-zurich/events/290915075/"><strong>Practical Cryptography - February Meetup (Registration opens 7 Feb 2023)</strong></a></li> </ul> </li> <li>2023-02-23 | Copenhagen, DK | <a href="https://www.meetup.com/copenhagen-rust-community">Copenhagen Rust Community</a><ul> <li><a href="https://www.meetup.com/copenhagen-rust-community/events/291288154/"><strong>Rust metup #33</strong></a></li> </ul> </li> </ul> <h3 id="north-america"><a class="toclink" href="#north-america">North America</a></h3> <ul> <li>2023-02-09 | Mountain View, CA, US | <a href="https://www.meetup.com/rust-study-group/">Mountain View Rust Study Group</a><ul> <li><a href="https://www.meetup.com/rust-study-group/events/291190532/"><strong>Rust Study Group at Hacker Dojo</strong></a></li> </ul> </li> <li>2023-02-09 | New York, NY, US | <a href="https://www.meetup.com/rust-nyc/">Rust NYC</a><ul> <li><a href="https://www.meetup.com/rust-nyc/events/291239545/"><strong>A Night of Interop: Rust in React Native &amp; Rust in Golang (two talks)</strong></a></li> </ul> </li> <li>2023-02-13 | Minneapolis, MN, US | <a href="https://www.meetup.com/minneapolis-rust-meetup/">Minneapolis Rust Meetup</a><ul> <li><a href="https://www.meetup.com/minneapolis-rust-meetup/events/291299604/"><strong>Happy Hour and Beginner Embedded Rust Hacking Session (#3!)</strong></a></li> </ul> </li> <li>2023-02-21 | San Francisco, CA, US | <a href="https://www.meetup.com/san-francisco-rust-study-group/">San Francisco Rust Study Group</a><ul> <li><a href="https://www.meetup.com/san-francisco-rust-study-group/events/rwvwzsyfcdbcc/"><strong>Rust Hacking in Person</strong></a></li> </ul> </li> <li>2023-02-23 | Lehi, UT, US | <a href="https://www.meetup.com/utah-rust/">Utah Rust</a><ul> <li><a href="https://www.meetup.com/utah-rust/events/dsbpxsyfcdbfc/"><strong>Upcoming Event</strong></a></li> </ul> </li> </ul> <h3 id="oceania"><a class="toclink" href="#oceania">Oceania</a></h3> <ul> <li>2023-02-28 | Canberra, ACT, AU | <a href="https://www.meetup.com/rust-canberra/">Canberra Rust User Group</a><ul> <li><a href="https://www.meetup.com/rust-canberra/events/291278417/"><strong>February Meetup</strong></a></li> </ul> </li> <li>2023-03-01 | Sydney, NSW, AU | <a href="https://www.meetup.com/rust-sydney/">Rust Sydney</a><ul> <li><a href="https://www.meetup.com/rust-sydney/events/291265163/"><strong>🦀 Lightning Talks - We are back!</strong></a></li> </ul> </li> </ul> <p>If you are running a Rust event please add it to the <a href="https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com">calendar</a> to get it mentioned here. Please remember to add a link to the event too. Email the <a href="mailto:community-team@rust-lang.org">Rust Community Team</a> for access.</p> <h2 id="jobs"><a class="toclink" href="#jobs">Jobs</a></h2> <!-- Rust Jobs: TWiR has stopped featuring individual job postings. You can read more about this change here: https://github.com/rust-lang/this-week-in-rust/issues/3412 --> <p>Please see the latest <a href="https://www.reddit.com/r/rust/comments/10nmtew/official_rrust_whos_hiring_thread_for_jobseekers/">Who's Hiring thread on r/rust</a></p> <h1 id="quote-of-the-week"><a class="toclink" href="#quote-of-the-week">Quote of the Week</a></h1> <blockquote> <p>Compilers are an error reporting tool with a code generation side-gig.</p> </blockquote> <p>– <a href="https://news.ycombinator.com/item?id=34544449">Esteban Küber on Hacker News</a></p> <p>Thanks to <a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328/1369">Stefan Majewsky</a> for the suggestion!</p> <p><a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328">Please submit quotes and vote for next week!</a></p> <p><em>This Week in Rust is edited by: <a href="https://github.com/nellshamrell">nellshamrell</a>, <a href="https://github.com/llogiq">llogiq</a>, <a href="https://github.com/cdmistman">cdmistman</a>, <a href="https://github.com/ericseppanen">ericseppanen</a>, <a href="https://github.com/extrawurst">extrawurst</a>, <a href="https://github.com/andrewpollack">andrewpollack</a>, <a href="https://github.com/U007D">U007D</a>, <a href="https://github.com/kolharsam">kolharsam</a>, <a href="https://github.com/joelmarcey">joelmarcey</a>, <a href="https://github.com/mariannegoldin">mariannegoldin</a>, <a href="https://github.com/bennyvasquez">bennyvasquez</a>.</em></p> <p><em>Email list hosting is sponsored by <a href="https://foundation.rust-lang.org/">The Rust Foundation</a></em></p> <p><small><a href="https://www.reddit.com/r/rust/comments/10rbkhz/this_week_in_rust_480/">Discuss on r/rust</a></small></p> Announcing Rustup 1.25.2 freedit 2023-02-01 2023-02-01 27 <p>The rustup working group is announcing the release of rustup version 1.25.2. Rustup is the recommended tool to install Rust, a programming language that is empowering everyone to build reliable and efficient software.</p> <p>If you have a previous version of rustup installed, getting rustup 1.25.2 is as easy as stopping any programs which may be using Rustup (e.g. closing your IDE) and running:</p> <pre><code>rustup self update </code></pre> <p>Rustup will also automatically update itself at the end of a normal toolchain update:</p> <pre><code>rustup update </code></pre> <p>If you don't have it already, you can <a href="https://rustup.rs/">get rustup</a> from the appropriate page on our website.</p> <h2><a href="#whats-new-in-rustup-1252" aria-hidden="true" class="anchor" id="whats-new-in-rustup-1252"></a>What's new in rustup 1.25.2</h2> <p>This version of rustup fixes a warning incorrectly saying that signature verification failed for Rust releases. The warning was due to a dependency of Rustup including a time-based check preventing the use of SHA-1 from February 1st, 2023 onwards.</p> <p>Unfortunately Rust's release signing key uses SHA-1 to sign its subkeys, which resulted in all signatures being marked as invalid. Rustup 1.25.2 temporarily fixes the problem by allowing again the use of SHA-1.</p> <h2><a href="#why-is-signature-verification-failure-only-a-warning" aria-hidden="true" class="anchor" id="why-is-signature-verification-failure-only-a-warning"></a>Why is signature verification failure only a warning?</h2> <p>Signature verification is currently an experimental and incomplete feature included in rustup, as it's still missing crucial features like key rotation. Until the feature is complete and ready for use, its outcomes are only displayed as warnings without a way to turn them into errors.</p> <p>This is done to avoid potentially breaking installations of rustup. Signature verification will error out on failure only after the design and implementation of the feature will be finished.</p> <h2><a href="#thanks" aria-hidden="true" class="anchor" id="thanks"></a>Thanks</h2> <p>Thanks again to all the contributors who made rustup 1.25.2 possible!</p> <ul> <li>Daniel Silverstone (kinnison)</li> <li>Pietro Albini (pietroalbini)</li> </ul> Announcing Rust 1.67.0 freedit 2023-01-26 2023-01-26 28 <p>The Rust team is happy to announce a new version of Rust, 1.67.0. Rust is a programming language empowering everyone to build reliable and efficient software.</p> <p>If you have a previous version of Rust installed via rustup, you can get 1.67.0 with:</p> <pre><code class="language-console">rustup update stable </code></pre> <p>If you don't have it already, you can <a href="https://www.rust-lang.org/install.html">get <code>rustup</code></a> from the appropriate page on our website, and check out the <a href="https://github.com/rust-lang/rust/blob/master/RELEASES.md#version-1670-2023-01-26">detailed release notes for 1.67.0</a> on GitHub.</p> <p>If you'd like to help us out by testing future releases, you might consider updating locally to use the beta channel (<code>rustup default beta</code>) or the nightly channel (<code>rustup default nightly</code>). Please <a href="https://github.com/rust-lang/rust/issues/new/choose">report</a> any bugs you might come across!</p> <h2><a href="#whats-in-1670-stable" aria-hidden="true" class="anchor" id="whats-in-1670-stable"></a>What's in 1.67.0 stable</h2> <h3><a href="#must_use-effective-on-async-fn" aria-hidden="true" class="anchor" id="must_use-effective-on-async-fn"></a><code>#[must_use]</code> effective on <code>async fn</code></h3> <p><code>async</code> functions annotated with <code>#[must_use]</code> now apply that attribute to the output of the returned <code>impl Future</code>. The <code>Future</code> trait itself is already annotated with <code>#[must_use]</code>, so all types implementing <code>Future</code> are automatically <code>#[must_use]</code>, which meant that previously there was no way to indicate that the output of the <code>Future</code> is itself significant and should be used in some way.</p> <p>With 1.67, the compiler will now warn if the output isn't used in some way.</p> <pre><code class="language-rust">#[must_use] async fn bar() -&gt; u32 { 0 } async fn caller() { bar().await; } </code></pre> <pre><code>warning: unused output of future returned by `bar` that must be used --&gt; src/lib.rs:5:5 | 5 | bar().await; | ^^^^^^^^^^^ | = note: `#[warn(unused_must_use)]` on by default </code></pre> <h3><a href="#stdsyncmpsc-implementation-updated" aria-hidden="true" class="anchor" id="stdsyncmpsc-implementation-updated"></a><code>std::sync::mpsc</code> implementation updated</h3> <p>Rust's standard library has had a multi-producer, single-consumer channel since before 1.0, but in this release the implementation is switched out to be based on <a href="https://crates.io/crates/crossbeam-channel"><code>crossbeam-channel</code></a>. This release contains no API changes, but the new implementation fixes a number of bugs and improves the performance and maintainability of the implementation.</p> <p>Users should not notice any significant changes in behavior as of this release.</p> <h3><a href="#stabilized-apis" aria-hidden="true" class="anchor" id="stabilized-apis"></a>Stabilized APIs</h3> <ul> <li><a href="https://doc.rust-lang.org/stable/std/primitive.i32.html#method.checked_ilog"><code>{integer}::checked_ilog</code></a></li> <li><a href="https://doc.rust-lang.org/stable/std/primitive.i32.html#method.checked_ilog2"><code>{integer}::checked_ilog2</code></a></li> <li><a href="https://doc.rust-lang.org/stable/std/primitive.i32.html#method.checked_ilog10"><code>{integer}::checked_ilog10</code></a></li> <li><a href="https://doc.rust-lang.org/stable/std/primitive.i32.html#method.ilog"><code>{integer}::ilog</code></a></li> <li><a href="https://doc.rust-lang.org/stable/std/primitive.i32.html#method.ilog2"><code>{integer}::ilog2</code></a></li> <li><a href="https://doc.rust-lang.org/stable/std/primitive.i32.html#method.ilog10"><code>{integer}::ilog10</code></a></li> <li><a href="https://doc.rust-lang.org/stable/std/num/struct.NonZeroU32.html#method.ilog2"><code>NonZeroU*::ilog2</code></a></li> <li><a href="https://doc.rust-lang.org/stable/std/num/struct.NonZeroU32.html#method.ilog10"><code>NonZeroU*::ilog10</code></a></li> <li><a href="https://doc.rust-lang.org/stable/std/num/struct.NonZeroU32.html#associatedconstant.BITS"><code>NonZero*::BITS</code></a></li> </ul> <p>These APIs are now stable in const contexts:</p> <ul> <li><a href="https://doc.rust-lang.org/stable/std/primitive.char.html#method.from_u32"><code>char::from_u32</code></a></li> <li><a href="https://doc.rust-lang.org/stable/std/primitive.char.html#method.from_digit"><code>char::from_digit</code></a></li> <li><a href="https://doc.rust-lang.org/stable/std/primitive.char.html#method.to_digit"><code>char::to_digit</code></a></li> <li><a href="https://doc.rust-lang.org/stable/core/char/fn.from_u32.html"><code>core::char::from_u32</code></a></li> <li><a href="https://doc.rust-lang.org/stable/core/char/fn.from_digit.html"><code>core::char::from_digit</code></a></li> </ul> <p>Check out everything that changed in <a href="https://github.com/rust-lang/rust/blob/stable/RELEASES.md#version-1670-2023-01-26">Rust</a>, <a href="https://github.com/rust-lang/cargo/blob/master/CHANGELOG.md#cargo-167-2023-01-26">Cargo</a>, and <a href="https://github.com/rust-lang/rust-clippy/blob/master/CHANGELOG.md#rust-167">Clippy</a>.</p> <h3><a href="#contributors-to-1670" aria-hidden="true" class="anchor" id="contributors-to-1670"></a>Contributors to 1.67.0</h3> <p>Many people came together to create Rust 1.67.0. We couldn't have done it without all of you. <a href="https://thanks.rust-lang.org/rust/1.67.0/">Thanks!</a></p> Officially announcing the types team freedit 2023-01-20 2023-01-20 29 <p>Oh hey, it's <a href="https://blog.rust-lang.org/inside-rust/2022/09/29/announcing-the-rust-style-team.html">another</a> new team announcement. But I will admit: if you follow the <a href="https://github.com/rust-lang/rfcs/pull/3254">RFCs repository</a>, the <a href="https://rust-lang.zulipchat.com/#narrow/stream/144729-t-types">Rust zulip</a>, or were particularly observant on the <a href="https://blog.rust-lang.org/2022/10/28/gats-stabilization.html">GATs stabilization announcement post</a>, then this <em>might</em> not be a surprise for you. In fact, this &quot;new&quot; team was officially established at the end of May last year.</p> <p>There are a few reasons why we're sharing this post now (as opposed to months before or...never). First, the team finished a three day in-person/hybrid meetup at the beginning of December and we'd like to share the purpose and outcomes of that meeting. Second, posting this announcement now is just around 7 months of activity and we'd love to share what we've accomplished within this time. Lastly, as we enter into the new year of 2023, it's a great time to share a bit of where we expect to head in this year and beyond.</p> <h2><a href="#background---how-did-we-get-here" aria-hidden="true" class="anchor" id="background---how-did-we-get-here"></a>Background - How did we get here?</h2> <p>Rust has grown significantly in the last several years, in many metrics: users, contributors, features, tooling, documentation, and more. As it has grown, the list of <em>things</em> people want to do with it has grown just as quickly. On top of powerful and ergonomic features, the demand for powerful tools such as IDEs or learning tools for the language has become more and more apparent. New compilers (frontend and backend) are being written. And, to top it off, we want Rust to continue to maintain one of its core design principles: safety.</p> <p>All of these points highlights some key needs: to be able to <em>know</em> how the Rust language should work, to be able to <em>extend</em> the language and compiler with new features in a relatively painless way, to be able to <em>hook into</em> the compiler and be able to query important information about programs, and finally to be able to <em>maintain</em> the language and compiler in an amenable and robust way. Over the years, considerable effort has been put into these needs, but we haven't <em>quite</em> achieved these key requirements.</p> <p>To extend a little, and put some numbers to paper, there are currently around 220 open tracking issues for <a href="https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AC-tracking-issue+label%3AT-lang">language</a>, <a href="https://github.com/rust-lang/rust/issues?page=1&amp;q=is%3Aopen+is%3Aissue+label%3AC-tracking-issue+label%3AT-compiler">compiler</a>, or <a href="https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AC-tracking-issue+label%3AT-types">types</a> features that have been accepted but are not completely implemented, of which about half are at least 3 years old and many are several years older than that. Many of these tracking issues have been open for so long not solely because of bandwidth, but because working on these features is hard, in large part because putting the relevant semantics in context of the larger language properly is hard; it's not easy for anyone to take a look at them and know what needs to be done to finish them. It's clear that we still need better foundations for making changes to the language and compiler.</p> <p>Another number that might shock you: there are currently 62 open <a href="https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AI-unsound">unsoundness issues</a>. This sounds <em>much</em> scarier than it really is: nearly all of these are edges of the compiler and language that have been found by people who specifically poke and prod to find them; in practice these will not pop up in the programs you write. Nevertheless, these are edges we want to iron out.</p> <h2><a href="#the-types-team" aria-hidden="true" class="anchor" id="the-types-team"></a>The Types Team</h2> <p>Moving forward, let's talk about a smaller subset of Rust rather than the entire language and compiler. Specifically, the parts relevant here include the type checker - loosely, defining the semantics and implementation of how variables are assigned their type, trait solving - deciding what traits are defined for which types, and borrow checking - proving that Rust's ownership model always holds. All of these can be thought of cohesively as the &quot;type system&quot;.</p> <p>As of <a href="https://rust-lang.github.io/rfcs/3254-types-team.html">RFC 3254</a>, the above subset of the Rust language and compiler are under the purview of the types team. So, what exactly does this entail?</p> <p>First, since around 2018, there existed the &quot;traits working group&quot;, which had the primary goal of creating a performant and extensible definition and implementation of Rust's trait system (including the <a href="https://github.com/rust-lang/chalk">Chalk</a> trait-solving library). As time progressed, and particularly in the latter half of 2021 into 2022, the working group's influence and responsibility naturally expanded to the type checker and borrow checker too - they are actually strongly linked and its often hard to disentangle the trait solver from the other two. So, in some ways, the types team essentially subsumes the former traits working group.</p> <p>Another relevant working group is the <a href="https://rust-lang.github.io/compiler-team/working-groups/polonius/">polonius working group</a>, which primarily works on the design and implementation of the <a href="https://github.com/rust-lang/polonius">Polonius</a> borrow-checking library. While the working group itself will remain, it is now also under the purview of the types team.</p> <p>Now, although the traits working group was essentially folded into the types team, the creation of a <em>team</em> has some benefits. First, like the <a href="https://blog.rust-lang.org/inside-rust/2022/09/29/announcing-the-rust-style-team.html">style team</a> (and many other teams), the types team is not a <em>top level</em> team. It actually, currently uniquely, has <em>two</em> parent teams: the lang and compiler teams. Both teams have decided to delegate decision-making authority covering the type system.</p> <p>The language team has delegated the part of the <em>design</em> of type system. However, importantly, this design covers less of the &quot;feel&quot; of the features of type system and more of how it &quot;works&quot;, with the expectation that the types team will advise and bring concerns about new language extensions where required. (This division is not strongly defined, but the expectation is generally to err on the side of more caution). The compiler team, on the other hand, has delegated the responsibility of defining and maintaining the implementation of the trait system.</p> <p>One particular responsibility that has traditionally been shared between the language and compiler teams is the assessment and fixing of soundness bugs in the language related to the type system. These often arise from implementation-defined language semantics and have in the past required synchronization and input from both lang and compiler teams. In the majority of cases, the types team now has the authority to assess and implement fixes without the direct input from either parent team. This applies, importantly, for fixes that are <em>technically</em> backwards-incompatible. While fixing safety holes is <a href="https://blog.rust-lang.org/2014/10/30/Stability.html#what-are-the-stability-caveats">not covered under Rust's backwards compatibility guarantees</a>, these decisions are not taken lightly and generally require team signoff and are assessed for potential ecosystem breakage with <a href="https://github.com/rust-lang/crater">crater</a>. However, this can now be done under one team rather than requiring the coordination of two separate teams, which makes closing these soundness holes easier (I will discuss this more later.)</p> <h2><a href="#formalizing-the-rust-type-system" aria-hidden="true" class="anchor" id="formalizing-the-rust-type-system"></a>Formalizing the Rust type system</h2> <p>As mentioned above, a nearly essential element of the growing Rust language is to know how it <em>should</em> work (and to have this well documented). There are relatively recent efforts pushing for a Rust specification (like <a href="https://github.com/ferrocene/specification">Ferrocene</a> or <a href="https://github.com/rust-lang/rfcs/pull/3355">this open RFC</a>), but it would be hugely beneficial to have a formalized definition of the type system, regardless of its potential integration into a more general specification. In fact the existence of a formalization would allow a better assessment of potential new features or soundness holes, without the subtle intricacies of the rest of the compiler.</p> <p>As far back as 2015, not long after the release of Rust 1.0, an experimental Rust trait solver called Chalk began to be written. The core idea of Chalk is to translate the surface syntax and ideas of the Rust trait system (e.g. traits, impls, where clauses) into a set of logic rules that can be solved using a Prolog-like solver. Then, once this set of logic and solving reaches parity with the trait solver within the compiler itself, the plan was to simply replace the existing solver. In the meantime (and continuing forward), this new solver could be used by other tools, such as rust-analyzer, where it is used today.</p> <p>Now, given Chalk's age and the promises it had been hoped to be able to deliver on, you might be tempted to ask the question &quot;Chalk, when?&quot; - and plenty have. However, we've learned over the years that Chalk is likely not the correct long-term solution for Rust, for a few reasons. First, as mentioned a few times in this post, the trait solver is only but a part of a larger type system; and modeling how the entire type system fits together gives a more complete picture of its details than trying to model the parts separately. Second, the needs of the <em>compiler</em> are quite different than the needs of a <em>formalization</em>: the compiler needs performant code with the ability to track information required for powerful diagnostics; a good formalization is one that is not only complete, but also easy to maintain, read, and understand. Over the years, Chalk has tried to have both and it has so far ended up with neither.</p> <p>So, what are the plans going forward? Well, first the types team has begun working on a formalization of the Rust typesystem, currently coined <a href="https://github.com/nikomatsakis/a-mir-formality/">a-mir-formality</a>. An initial experimental phase was written using <a href="https://redex.racket-lang.org/">PLT redex</a>, but a Rust port is in-progress. There's lot to do still (including modeling more of the trait system, writing an RFC, and moving it into the rust-lang org), but it's already showing great promise.</p> <p>Second, we've begun an <a href="https://github.com/rust-lang/types-team/issues/58">initiative</a> for writing a new trait solver in-tree. This new trait solver is more limited in scope than a-mir-formality (i.e. not intending to encompass the entire type system). In many ways, it's expected to be quite similar to Chalk, but leverage bits and pieces of the existing compiler and trait solver in order to make the transition as painless as possible. We do expect it to be pulled out-of-tree at some point, so it's being written to be as modular as possible. During our types team meetup earlier this month, we were able to hash out what we expect the structure of the solver to look like, and we've already gotten that <a href="https://github.com/rust-lang/rust/pull/105661">merged into the source tree</a>.</p> <p>Finally, Chalk is no longer going to be a focus of the team. In the short term, it still may remain a useful tool for experimentation. As said before, rust-analyzer uses Chalk as its trait solver. It's also able to be used in rustc under an unstable feature flag. Thus, new ideas currently could be implemented in Chalk and battle-tested in practice. However, this benefit will likely not last long as a-mir-formality and the new in-tree trait solver get more usable and their interfaces become more accessible. All this is not to say that Chalk has been a failure. In fact, Chalk has taught us a lot about how to think about the Rust trait solver in a logical way and the current Rust trait solver has evolved over time to more closely model Chalk, even if incompletely. We expect to still support Chalk in some capacity for the time being, for rust-analyzer and potentially for those interested in experimenting with it.</p> <h2><a href="#closing-soundness-holes" aria-hidden="true" class="anchor" id="closing-soundness-holes"></a>Closing soundness holes</h2> <p>As brought up previously, a big benefit of creating a new types team with delegated authority from both the lang and compiler teams is the authority to assess and fix unsoundness issues mostly independently. However, a secondary benefit has actually just been better procedures and knowledge-sharing that allows the members of the team to get on the same page for what soundness issues there are, why they exist, and what it takes to fix them. For example, during our meetup earlier this month, we were able to go through the full list of soundness issues (focusing on those relevant to the type system), identify their causes, and discuss expected fixes (though most require prerequisite work discussed in the previous section).</p> <p>Additionally, the team has already made a number of soundness fixes and has a few more in-progress. I won't go into details, but instead am just opting to putting them in list form:</p> <ul> <li><a href="https://github.com/rust-lang/rust/pull/99217">Consider unnormalized types for implied bounds</a>: landed in 1.65, no regressions found</li> <li><a href="https://github.com/rust-lang/rust/pull/95474">Neither require nor imply lifetime bounds on opaque type for well formedness</a>: landed in 1.66, no regressions found</li> <li><a href="https://github.com/rust-lang/rust/pull/105575">Add <code>IMPLIED_BOUNDS_ENTAILMENT</code> lint</a>: landing in 1.68, future-compat lint because many regressions found (of unsoundness)</li> <li><a href="https://github.com/rust-lang/rust/pull/105102">Check ADT fields for copy implementations considering regions</a>: currently open, ready to land</li> <li><a href="https://github.com/rust-lang/rust/pull/100046">Register wf obligation before normalizing in wfcheck</a>: currently open, regressions found, needs additional work</li> <li><a href="https://github.com/rust-lang/rust/pull/100555">Handle projections as uncovered types during coherence check</a>: currently open, some regressions found, future-compat lint suggested</li> <li><a href="https://github.com/rust-lang/rust/pull/101947">Don't normalize in AstConv</a>: landing in 1.68, 1 small regression found</li> </ul> <p>As you can see, we're making progress on closing soundness holes. These sometimes break code, as assessed by crater. However, we do what we can to mitigate this, even when the code being broken is technically unsound.</p> <h2><a href="#new-features" aria-hidden="true" class="anchor" id="new-features"></a>New features</h2> <p>While it's not technically under the types team purview to <em>propose and design</em> new features (these fall more under lang team proper), there are a few instances where the team is heavily involved (if not driving) feature design.</p> <p>These can be small additions, which are close to bug fixes. For example, <a href="https://github.com/rust-lang/rust/pull/104765">this PR</a> allows more permutations of lifetime outlives bounds than what compiled previously. Or, these PRs can be larger, more impactful changes, that don't fit under a &quot;feature&quot;, but instead are tied heavily to the type system. For example, <a href="https://github.com/rust-lang/rust/pull/100386">this PR</a> makes the <code>Sized</code> trait coinductive, which effectively makes more cyclic bounds compile (see <a href="https://github.com/rust-lang/rust/pull/100386/files#diff-7efe7060b98871be57269858d3abd0c9a6f877a6c65fd0fba54ef122cd2d5281">this test</a> for an example).</p> <p>There are also a few larger features and feature sets that have been driven by the types team, largely due to the heavy intersection with the type system. Here are a few examples:</p> <ul> <li>Generic associated types (GATs) - The feature long predates the types team and is the only one in this list that has actually been stabilized so far. But due to heavy type system interaction, the team was able to navigate the issues that came on its final path to stabilization. See <a href="https://blog.rust-lang.org/2022/10/28/gats-stabilization.html">this blog post</a> for much more details.</li> <li>Type alias impl trait (TAITs) - Implementing this feature <em>properly</em> requires a thorough understanding of the type checker. This is close to stabilization. For more information, see <a href="https://github.com/rust-lang/rust/issues/63063">the tracking issue</a>.</li> <li>Trait upcasting - This one is relatively small, but has some type system interaction. Again, see <a href="https://github.com/rust-lang/rust/issues/65991">the tracking issue</a> for an explanation of the feature.</li> <li>Negative impls - This too predates the types team, but has recently been worked on by the team. There are still open bugs and soundness issues, so this is a bit away from stabilization, but you can follow <a href="https://github.com/rust-lang/rust/issues/68318">here</a>.</li> <li>Return position impl traits in traits (RPITITs) and async functions in traits (AFITs) - These have only recently been possible with advances made with GATs and TAITs. They are currently tracked under a single <a href="https://github.com/rust-lang/rust/issues/91611">tracking issue</a>.</li> </ul> <h2><a href="#roadmap" aria-hidden="true" class="anchor" id="roadmap"></a>Roadmap</h2> <p>To conclude, let's put all of this onto a roadmap. As always, goals are best when they are specific, measurable, and time-bound. For this, we've decided to split our goals into roughly 4 stages: summer of 2023, end-of-year 2023, end-of-year 2024, and end-of-year 2027 (6 months, 1 year, 2 years, and 5 years). Overall, our goals are to build a platform to maintain a sound, testable, and documented type system that can scale to new features need by the Rust language. Furthermore, we want to cultivate a sustainable and open-source team (the types team) to maintain that platform and type system.</p> <p>A quick note: some of the things here have not quite been explained in this post, but they've been included in the spirit of completeness. So, without further ado:</p> <p><strong>6 months</strong></p> <ul> <li>The work-in-progress new trait solver should be testable</li> <li>a-mir-formality should be testable against the Rust test suite</li> <li>Both TAITs and RPITITs/AFITs should be stabilized or on the path to stabilization.</li> </ul> <p><strong>EOY 2023</strong></p> <ul> <li>New trait solver replaces part of existing trait solver, but not used everywhere</li> <li>We have an onboarding plan (for the team) and documentation for the new trait solver</li> <li>a-mir-formality is integrated into the language design process</li> </ul> <p><strong>EOY 2024</strong></p> <ul> <li>New trait solver shared by rustc and rust-analyzer <ul> <li>Milestone: Type IR shared</li> </ul> </li> <li>We have a clean API for extensible trait errors that is available at least internally</li> <li>&quot;Shiny features&quot; <ul> <li>Polonius in a usable state</li> <li>Implied bounds in higher-ranked trait bounds (see <a href="https://github.com/rust-lang/rust/issues/90696">this issue</a> for an example of an issue this would fix)</li> <li>Being able to use <code>impl Trait</code> basically anywhere</li> </ul> </li> <li>Potential edition boundary changes</li> </ul> <p><strong>EOY 2027</strong></p> <ul> <li>(Types) unsound issues resolved</li> <li>Most language extensions are easy to do; large extensions are feasible</li> <li>a-mir-formality passes 99.9% of the Rust test suite</li> </ul> <h2><a href="#conclusion" aria-hidden="true" class="anchor" id="conclusion"></a>Conclusion</h2> <p>It's an exciting time for Rust. As its userbase and popularity grows, the language does as well. And as the language grows, the need for a sustainable type system to support the language becomes ever more apparent. The project has formed this new types team to address this need and hopefully, in this post, you can see that the team has so far accomplished a lot. And we expect that trend to only continue over the next many years.</p> <p>As always, if you'd like to get involved or have questions, please drop by the <a href="https://rust-lang.zulipchat.com/#narrow/stream/144729-t-types">Rust zulip</a>.</p> Security advisory for Cargo (CVE-2022-46176) freedit 2023-01-10 2023-01-10 30 <blockquote> <p>This is a cross-post of <a href="https://groups.google.com/g/rustlang-security-announcements/c/v5cFFJ7T0RY">the official security advisory</a>. The official advisory contains a signed version with our PGP key, as well.</p> </blockquote> <p>The Rust Security Response WG was notified that Cargo did not perform SSH host key verification when cloning indexes and dependencies via SSH. An attacker could exploit this to perform man-in-the-middle (MITM) attacks.</p> <p>This vulnerability has been assigned CVE-2022-46176.</p> <h2><a href="#overview" aria-hidden="true" class="anchor" id="overview"></a>Overview</h2> <p>When an SSH client establishes communication with a server, to prevent MITM attacks the client should check whether it already communicated with that server in the past and what the server's public key was back then. If the key changed since the last connection, the connection must be aborted as a MITM attack is likely taking place.</p> <p>It was discovered that Cargo never implemented such checks, and performed no validation on the server's public key, leaving Cargo users vulnerable to MITM attacks.</p> <h2><a href="#affected-versions" aria-hidden="true" class="anchor" id="affected-versions"></a>Affected Versions</h2> <p>All Rust versions containing Cargo before 1.66.1 are vulnerable.</p> <p>Note that even if you don't explicitly use SSH for alternate registry indexes or crate dependencies, you might be affected by this vulnerability if you have configured git to replace HTTPS connections to GitHub with SSH (through git's <a href="https://git-scm.com/docs/git-config#Documentation/git-config.txt-urlltbasegtinsteadOf"><code>url.&lt;base&gt;.insteadOf</code></a> setting), as that'd cause you to clone the crates.io index through SSH.</p> <h2><a href="#mitigations" aria-hidden="true" class="anchor" id="mitigations"></a>Mitigations</h2> <p>We will be releasing Rust 1.66.1 today, 2023-01-10, changing Cargo to check the SSH host key and abort the connection if the server's public key is not already trusted. We recommend everyone to upgrade as soon as possible.</p> <p>Patch files for Rust 1.66.0 are also available <a href="https://github.com/rust-lang/wg-security-response/tree/main/patches/CVE-2022-46176">here</a> for custom-built toolchains.</p> <p>For the time being Cargo will not ask the user whether to trust a server's public key during the first connection. Instead, Cargo will show an error message detailing how to add that public key to the list of trusted keys. Note that this might break your automated builds if the hosts you clone dependencies or indexes from are not already trusted.</p> <p>If you can't upgrade to Rust 1.66.1 yet, we recommend configuring Cargo to use the <code>git</code> CLI instead of its built-in git support. That way, all git network operations will be performed by the <code>git</code> CLI, which is not affected by this vulnerability. You can do so by adding this snippet to your <a href="https://doc.rust-lang.org/cargo/reference/config.html">Cargo configuration file</a>:</p> <pre><code class="language-toml">[net] git-fetch-with-cli = true </code></pre> <h2><a href="#acknowledgments" aria-hidden="true" class="anchor" id="acknowledgments"></a>Acknowledgments</h2> <p>Thanks to the Julia Security Team for disclosing this to us according to our <a href="https://www.rust-lang.org/policies/security">security policy</a>!</p> <p>We also want to thank the members of the Rust project who contributed to fixing this issue. Thanks to Eric Huss and Weihang Lo for writing and reviewing the patch, Pietro Albini for coordinating the disclosure and writing this advisory, and Josh Stone, Josh Triplett and Jacob Finkelman for advising during the disclosure.</p> <p><em>Updated on 2023-01-10 at 21:30 UTC to include additional mitigations.</em></p>