206 lines
20 KiB
Plaintext
206 lines
20 KiB
Plaintext
<p>Hello and welcome to another issue of <em>This Week in Rust</em>!
|
||
<a href="http://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? Tweet us at <a href="https://twitter.com/ThisWeekInRust">@ThisWeekInRust</a> 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">Updates from Rust Community</h2>
|
||
<h3 id="official">Official</h3>
|
||
<ul>
|
||
<li><a href="https://blog.rust-lang.org/inside-rust/2021/10/08/Lang-team-Oct-update.html">Lang team October update</a></li>
|
||
</ul>
|
||
<h3 id="projecttooling-updates">Project/Tooling Updates</h3>
|
||
<ul>
|
||
<li><a href="https://aaronerhardt.github.io/blog/posts/announcing_relm4_v0.2/">Announcing Relm4 v0.2</a></li>
|
||
<li><a href="https://sixtyfps.io/thisweek/2021-10-11.html">SixtyFPS (GUI crate) weekly update for 10th of October 2021</a></li>
|
||
<li><a href="https://www.fluvio.io/news/this-week-in-fluvio-0008/">This week in Fluvio #8: the programmable streaming platform</a></li>
|
||
<li><a href="https://ferrous-systems.com/blog/knurling-changelog-32/">Knurling-rs changelog #32</a></li>
|
||
<li><a href="https://gfx-rs.github.io/2021/10/07/release-0.11.html">wgpu: Release of 0.11 with beta WebGL support</a></li>
|
||
<li><a href="https://datafuselabs.github.io/weekly/2021-10-13-databend-weekly/">This week in Databend #11: an elastic and reliable cloud warehouse</a></li>
|
||
<li><a href="https://www.rtl-sdr.com/futuresdr-an-async-sdr-framework-implemented-in-rust/">FutureSDR: An Async Software Defined Radio Framework Implemented in Rust</a></li>
|
||
<li><a href="https://rust-analyzer.github.io/thisweek/2021/10/11/changelog-98.html">Rust Analyzer Changelog #98</a></li>
|
||
<li><a href="https://intellij-rust.github.io/2021/10/11/changelog-157.html">IntelliJ Rust Changelog #157</a></li>
|
||
<li><a href="https://kentiklabs.com/blog/container-visibility/">Convis - Open Source Container Visibility</a></li>
|
||
</ul>
|
||
<h3 id="newsletters">Newsletters</h3>
|
||
<ul>
|
||
<li><a href="https://gamedev.rs/news/026/">This Month in Rust GameDev #26 - September 2021</a></li>
|
||
</ul>
|
||
<h3 id="observationsthoughts">Observations/Thoughts</h3>
|
||
<ul>
|
||
<li><a href="https://tevps.net/blog/2021/10/10/awesome-rust-projects-hacktoberfest/">Awesome Rust projects for Hacktoberfest</a></li>
|
||
<li><a href="https://swatinem.de/blog/zero-cost-async/">Rust async can truly be zero-cost</a></li>
|
||
<li><a href="https://davidkoloski.me/blog/intelligent-brute-forcing/">Intelligent brute forcing</a></li>
|
||
<li><a href="https://acrimon.dev/blog/async-locks/">Locks in asynchronous applications in Rust</a></li>
|
||
<li><a href="https://www.getsynth.com/docs/blog/2021/10/11/nightly">The nightly elephant in the room</a></li>
|
||
<li><a href="https://lwn.net/Articles/871283/">Rust and GCC, two different ways</a></li>
|
||
<li>[video] <a href="https://www.p99conf.io/session/whoops-i-rewrote-it-in-rust/">Whoops! I Rewrote It in Rust</a></li>
|
||
<li>[video] <a href="https://www.p99conf.io/session/rust-is-safe-but-is-it-fast/">Rust Is Safe. But Is It Fast?</a></li>
|
||
<li>[video] <a href="https://www.youtube.com/watch?v=cuvp-e4ztC0">Rust, Wright's Law, and the Future of Low-Latency Systems</a></li>
|
||
</ul>
|
||
<h3 id="rust-walkthroughs">Rust Walkthroughs</h3>
|
||
<ul>
|
||
<li><a href="https://jeffa.io/rust_guide_generics_demystified_part_1">Rust Guide: Generics Demystified Part 1</a></li>
|
||
<li><a href="https://nickymeuleman.netlify.app/blog/multithreading-rust">Multithreading in Rust</a></li>
|
||
<li><a href="https://www.greyblake.com/blog/2021-10-11-phantom-types-in-rust/">Phantom Types in Rust 👻</a></li>
|
||
<li><a href="https://gill.net.in/posts/pic32-blink-led-rust/">Programming PIC32 Microcontroller with Rust</a></li>
|
||
<li><a href="https://vorner.github.io/2021/10/10/testing-with-spirit.html">Testing with Spirit</a></li>
|
||
<li><a href="https://alexis-lozano.com/hexagonal-architecture-in-rust-6/">Hexagonal architecture in Rust #6 - CLI</a></li>
|
||
<li><a href="https://www.secondstate.io/articles/embed-javascript-in-rust/">Incorporating JavaScript into a Rust app</a></li>
|
||
<li><a href="https://itnext.io/rust-iterators-2f0bb958aa08">Rust Iterators</a></li>
|
||
<li><a href="https://www.ballpointcarrot.net/posts/rust-arm-lambdas/">Running Rust on AWS Lambda on ARM64</a></li>
|
||
<li><a href="https://source.android.com/setup/build/rust/building-rust-modules/overview">Android Rust Introduction</a></li>
|
||
<li><a href="https://dev.to/akkoro/lambda-function-http-authorization-with-auth0-and-assemblylift-webassembly-lambda-api-gateway-rust-4fl8">Lambda function HTTP authorization with Auth0 and AssemblyLift (WebAssembly + Lambda + API Gateway + Rust) </a></li>
|
||
<li><a href="https://dev.to/dineshgdk/game-of-life-in-rust-4mfc">Game of Life in Rust</a></li>
|
||
<li>[series] <a href="https://medium.com/@otukof/build-your-text-editor-with-rust-part-6-3cff61dc2de5">Build Your Text Editor With Rust! Part 6</a></li>
|
||
<li>[series] <a href="https://dev.to/mileswatson/url-shortener-with-rust-svelte-aws-6-deploying-to-aws-2gi0">URL Shortener with Rust, Svelte, & AWS (6/): Deploying to AWS</a></li>
|
||
<li>[series]<a href="https://dev.to/penumbra23/container-runtime-in-rust-part-ii-34em">Container Runtime in Rust - Part II</a></li>
|
||
<li>[video] <a href="https://www.youtube.com/watch?v=NtUkr_z7l84">Getting started with Rust 🦀 2021: 7a. Building a GUI app in Rust [Part A]</a></li>
|
||
<li>[video] <a href="https://www.youtube.com/watch?v=bnnacleqg6k">Type-Driven API Design in Rust</a></li>
|
||
<li>[video] <a href="https://www.youtube.com/watch?v=rDoqT-a6UFg">Visualizing memory layout of Rust's data types</a></li>
|
||
<li>[video] <a href="https://www.youtube.com/watch?v=dHkzSZnYXmk">Crust of Rust: functions, closures, and their traits</a></li>
|
||
<li>[video] <a href="https://www.youtube.com/watch?v=LDlBTbO8oQ4">LRG-01: The essence of Rust</a></li>
|
||
</ul>
|
||
<h2 id="crate-of-the-week">Crate of the Week</h2>
|
||
<p>This week's crate is <a href="https://github.com/fzyzcjy/flutter_rust_bridge">flutter_rust_bridge</a>, a memory-safe binding generator for Flutter/Dart ↔ Rust.</p>
|
||
<p>Thanks to <a href="https://users.rust-lang.org/t/crate-of-the-week/2704/972">fzyzcjy</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">Call for Participation</h2>
|
||
<p>Always wanted to contribute to open-source projects but didn't know where to start?
|
||
Every week we highlight some tasks from the Rust community for you to pick and get started!</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/ockam-network/ockam/issues/1998">ockam - Make TryAsyncClone trait derivable. Add TryAsyncClone impl for structs that implement Clone</a></li>
|
||
<li><a href="https://github.com/ockam-network/ockam/issues/1999">ockam - Use async_trait through ockam_core</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>
|
||
<ul>
|
||
<li><a href="https://github.com/rust-lang/this-week-in-rust/issues/2469">This Week in Rust is looking for additional editors</a></li>
|
||
</ul>
|
||
<h2 id="updates-from-the-rust-project">Updates from the Rust Project</h2>
|
||
<p>353 pull requests were <a href="https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2021-10-04..2021-10-11">merged in the last week</a></p>
|
||
<ul>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/88952">add new tier-3 target: armv7-unknown-linux-uclibceabihf</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/88090">perform type inference in range pattern</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/88780">add abs_diff for integer types</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/89082">implement #85440 (Random test ordering)</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/89413">correctly handle supertraits for min_specialization</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/89323">consider unfulfilled obligations in binop errors</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/89461">add <code>deref_into_dyn_supertrait</code> lint</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/89501">note specific regions involved in 'borrowed data escapes' error</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/89528">fix suggestion to borrow when casting from pointer to reference</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/89428">feature gate the non_exhaustive_omitted_patterns lint</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/89423">fix ICE caused by non_exaustive_omitted_patterns struct lint</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/89454">perf: only check for <code>rustc_trivial_field_reads</code> attribute on traits, not items, impls, etc.</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/89534">perf: introduce <code>tcx.get_diagnostic_name</code></a></li>
|
||
<li><a href="https://github.com/rust-lang/rust-clippy/pull/7770">improved help message for <code>suspicious_map</code></a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/89585">emit item no type error even if type inference fails</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/89582">optimize File::read_to_end and read_to_string</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/89576">prevent error reporting from outputting a recursion error if it finds an ambiguous trait impl during suggestions</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/89597">create more accurate debuginfo for vtables.</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/89596">make cfg imply doc(cfg)</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/89633">show detailed expected/found types in error message when trait paths are the same</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/89632">fix docblock code display on mobile</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/89622">use correct edition for panic in (<code>debug_</code>)<code>assert!()</code></a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/75644">add <code>core::array::from_fn</code> and <code>core::array::try_from_fn</code></a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/86434">add <code>Ipv6Addr::is_benchmarking</code></a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/87601">add functions to add unsigned and signed integers</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/87091">implement advance_(back_)_by on more iterators</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/86525">array <code>.len()</code> MIR optimization pass</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/89270"><code>path.push()</code> should work as expected on windows verbatim paths</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/89219">use get_unchecked in <code>str::</code>(<code>r</code>)<code>split_once</code></a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/87993">stabilize <code>try_reserve</code></a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/89735">stabilize <code>proc_macro::is_available</code></a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/89508">stabilize <code>const_panic</code></a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/88436">stabilize <code>command_access</code></a></li>
|
||
<li><a href="https://github.com/rust-lang/futures-rs/pull/2505">futures: make <code>futures::task::noop_waker_ref</code> available without <code>std</code>.</a></li>
|
||
<li><a href="https://github.com/rust-lang/rustc_codegen_gcc/pull/100"><code>rustc_codegen_gcc</code>: add missing cast and change some bitcasts to casts to avoid a gimple verification failure</a></li>
|
||
<li><a href="https://github.com/rust-lang/rustfmt/pull/5020">rustfmt: stabilize <code>match_block_trailing_comma</code></a></li>
|
||
<li><a href="https://github.com/rust-lang/rustfmt/pull/4994">rustfmt: wrap long array and slice patterns.</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust/pull/88816">rustdoc: migrate to table so the gui can handle >2k constants</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust-clippy/pull/7748">clippy: add <code>undocumented_unsafe_blocks</code> lint</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust-clippy/pull/7795">clippy: fix false positive in external macros for <code>mut_mut</code> lint</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust-clippy/pull/7794">clippy: fix false positive when <code>Drop</code> and <code>Copy</code> involved in <code>field_reassign_with_default</code> lint</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust-clippy/pull/7772">clippy: handle intra-doc links in <code>doc_markdown</code></a></li>
|
||
<li><a href="https://github.com/rust-lang/rust-clippy/pull/7800">clippy: refactor <code>clippy::match_ref_pats</code> to check for multiple reference patterns</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust-clippy/pull/7782">clippy: make <code>shadow_reuse</code> suggestion less verbose</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust-clippy/pull/7793">clippy: add option to <code>new_lint</code> to generate MSRV enabled lint</a></li>
|
||
<li><a href="https://github.com/rust-lang/rust-clippy/pull/7774">clippy: drop exponent on suggestion when exponent value is zero</a></li>
|
||
</ul>
|
||
<h3 id="rust-compiler-performance-triage">Rust Compiler Performance Triage</h3>
|
||
<p>A relatively quiet week: two smallish regressions, and one largish regression that is isolated to doc builds. A couple of nice small wins as well.</p>
|
||
<p>Triage done by <strong>@pnkfelix</strong>.
|
||
Revision range: <a href="https://perf.rust-lang.org/?start=25ec8273855fde2d72ae877b397e054de5300e10&end=9475e609b8458fff9e444934a6017d2e590642cf&absolute=false&stat=instructions%3Au">25ec82..9475e6</a></p>
|
||
<p>2 Regressions, 2 Improvements, 2 Mixed; 1 of them in rollups
|
||
42 comparisons made in total</p>
|
||
<p><a href="https://github.com/rust-lang/rustc-perf/blob/master/triage/2021-10-12.md">Full report here</a></p>
|
||
<h3 id="approved-rfcs">Approved RFCs</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>
|
||
<p><em>No RFCs were approved this week.</em></p>
|
||
<h3 id="final-comment-period">Final Comment Period</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>
|
||
<h3 id="rfcs"><a href="https://github.com/rust-lang/rfcs/labels/final-comment-period">RFCs</a></h3>
|
||
<p><em>No RFCs are currently in the final comment period.</em></p>
|
||
<h3 id="tracking-issues-prs"><a href="https://github.com/rust-lang/rust/labels/final-comment-period">Tracking Issues & PRs</a></h3>
|
||
<ul>
|
||
<li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/89677">Stabilize is_symlink() for Metadata and Path</a></li>
|
||
<li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/89542">Partially stabilize duration_consts_2</a></li>
|
||
<li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/89509">Stabilize unreachable_unchecked as const fn</a></li>
|
||
<li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/89507">Add <code>#[repr(i8)]</code> to Ordering</a></li>
|
||
<li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/89433">Fix ctrl-c causing reads of stdin to return empty on Windows.</a></li>
|
||
<li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/88652">linux/aarch64 Now() should be actually_monotonic()</a></li>
|
||
<li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/88300">Stabilise unix_process_wait_more, extra ExitStatusExt methods</a></li>
|
||
<li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/88041">Make all proc-macro back-compat lints deny-by-default</a></li>
|
||
<li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/87704">Windows: Resolve process::Command program without using the current directory</a></li>
|
||
<li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/87467">Implement RefUnwindSafe for <code>Rc<T></code></a></li>
|
||
<li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/87339">Make two Paths unequal if they differ in trailing slash</a></li>
|
||
<li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/86984">Reject octal zeros in IPv4 addresses</a></li>
|
||
<li>[disposition: merge] <a href="https://github.com/rust-lang/rust/pull/86479">Automatic exponential formatting in Debug</a></li>
|
||
<li>[disposition: merge] <a href="https://github.com/rust-lang/rust/issues/73179">Tracking Issue for methods to go from nul-terminated <code>Vec<u8></code> to CString </a></li>
|
||
</ul>
|
||
<h3 id="new-rfcs">New RFCs</h3>
|
||
<p><em>No new RFCs were proposed this week.</em></p>
|
||
<h2 id="upcoming-events">Upcoming Events</h2>
|
||
<h3 id="online">Online</h3>
|
||
<ul>
|
||
<li><a href="https://rust.bettercode.eu/">October 13, 2021 - betterCode Rust</a></li>
|
||
<li><a href="https://www.meetup.com/MUCplusplus/events/281231257">October 13, 2021 - C++/Rust: Learning from Each Other - MUC++</a></li>
|
||
<li><a href="https://www.meetup.com/Rust-Los-Angeles/events/280981968/">October 13, 2021, Los Angeles, CA, US - Processing shaders in Rust with Dzmitry Malyshau - Rust Los Angeles</a></li>
|
||
<li><a href="https://www.meetup.com/Buffalo-Rust-Meetup/events/281236385/">October 20, 2021, Buffalo, NY, US - Buffalo Rust User Group, Alternate Day - Buffalo Rust</a></li>
|
||
<li><a href="https://www.meetup.com/Vancouver-Rust/events/zkqvjsyccnbbc/">October 20, 2021, Vancouver, BC, CA - WASM plugin for Istio - Vancouver Rust</a></li>
|
||
</ul>
|
||
<h3 id="north-america">North America</h3>
|
||
<ul>
|
||
<li><a href="https://www.meetup.com/Rust-ATL/events/lhpkmsyccnbrb/">October 13, 2021, Atlanta, GA, US - Grab a beer with fellow Rustaceans - Rust Atlanta</a></li>
|
||
<li><a href="https://rust-meetup.ir/">October 22, 2021, IR - The First Rust Iran online meetup - Rust Iran Meetup</a></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>
|
||
<h1 id="rust-jobs">Rust Jobs</h1>
|
||
<p><strong>System 76</strong></p>
|
||
<ul>
|
||
<li><a href="https://system76.com/careers/pop_os-software-engineer-rust">Pop! OS Software Engineer (Rust) (Remote US)</a></li>
|
||
</ul>
|
||
<p><strong>Enso</strong></p>
|
||
<ul>
|
||
<li><a href="https://github.com/enso-org/hiring/blob/main/people/senior-rust-developer.md">Senior Rust Developer (Remote)</a></li>
|
||
</ul>
|
||
<p><strong>Second Spectrum</strong></p>
|
||
<ul>
|
||
<li><a href="https://www.secondspectrum.com/careers/opportunities.html#job-780636">Software Engineer Rust (Remote)</a></li>
|
||
</ul>
|
||
<p><em>Tweet us at <a href="https://twitter.com/ThisWeekInRust">@ThisWeekInRust</a> to get your job offers listed here!</em></p>
|
||
<h1 id="quote-of-the-week">Quote of the Week</h1>
|
||
<blockquote>
|
||
<p>Rust is the language where you get the hangover first.</p>
|
||
</blockquote>
|
||
<p>– <a href="https://www.youtube.com/watch?v=ylOpCXI2EMM&t=565s">unattributed via Niko Matsakis' RustConf keynote</a></p>
|
||
<p>Thanks to <a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328/1122">Alice Ryhl</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>, and <a href="https://github.com/cdmistman">cdmistman</a>.</em></p>
|
||
<p><small><a href="https://www.reddit.com/r/rust/comments/q7sltn/this_week_in_rust_412/">Discuss on r/rust</a></small></p> |