<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Rust on BIT &amp; 42</title><link>https://CoderAmedal.github.io/tags/rust/</link><description>Recent content in Rust on BIT &amp; 42</description><generator>Hugo -- 0.160.1</generator><language>zh-CN</language><copyright>2025 Bit &amp;amp; 42. 这是生命、宇宙以及一切的终极版权声明</copyright><lastBuildDate>Tue, 14 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://CoderAmedal.github.io/tags/rust/index.xml" rel="self" type="application/rss+xml"/><item><title>Rust Unlimited Intro - Three Times Failed</title><link>https://CoderAmedal.github.io/en/posts/three-times-rust-learning/</link><pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate><guid>https://CoderAmedal.github.io/en/posts/three-times-rust-learning/</guid><description>&lt;h1 id="rust-unlimited-intro---three-times-failed"&gt;Rust Unlimited Intro - Three Times Failed&lt;/h1&gt;
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Rust has topped Stack Overflow&amp;rsquo;s &amp;ldquo;most loved language&amp;rdquo; survey for years, but its learning curve is equally famous. I started and quit learning Rust three times since 2023 before finally getting past the initial barrier. This is the story of that journey.&lt;/p&gt;
&lt;h2 id="why-learn-rust"&gt;Why Learn Rust?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Performance &amp;amp; Safety&lt;/strong&gt;: Memory safety without garbage collection — no more GC pause nightmares or segfaults&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Modern Toolchain&lt;/strong&gt;: Cargo, rustfmt, and Clippy create a seamless build/test/lint experience that makes C++ tooling feel archaic&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Type System That Catches Bugs Early&lt;/strong&gt;: The compiler catches an incredible amount of errors before runtime — fewer 3 AM on-call wake-ups&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Growing Industry Adoption&lt;/strong&gt;: From Linux kernel modules to cloud infrastructure (AWS, Cloudflare), Rust is becoming the standard for systems-level work&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="three-attempts-three-failures"&gt;Three Attempts, Three Failures&lt;/h2&gt;
&lt;h3 id="attempt-1-ownership-sent-me-running"&gt;Attempt 1: Ownership sent me running&lt;/h3&gt;
&lt;p&gt;The first three chapters of The Rust Book felt comfortable — modern syntax, immutability by default, elegant pattern matching. Then Chapter 4 on Ownership hit:&lt;/p&gt;</description></item><item><title>三入三废的Rust的入门</title><link>https://CoderAmedal.github.io/posts/three-times-rust-learning/</link><pubDate>Fri, 24 Oct 2025 00:00:00 +0000</pubDate><guid>https://CoderAmedal.github.io/posts/three-times-rust-learning/</guid><description>&lt;h1 id="三入三废的rust的入门"&gt;三入三废的Rust的入门&lt;/h1&gt;
&lt;h2 id="前言"&gt;前言&lt;/h2&gt;
&lt;p&gt;Rust 连续多年在 Stack Overflow 的&amp;quot;最受喜爱语言&amp;quot;调查中排第一，但同样有名的还有它的学习曲线。我从 2023 年开始，前后三次打开 The Rust Book，又三次关上——直到最近才终于摸到了一点门道。这篇文章记录我反复放弃又重新开始的过程，以及这次觉得终于&amp;quot;入门了&amp;quot;的几个关键点。&lt;/p&gt;
&lt;h2 id="为什么要学-rust"&gt;为什么要学 Rust&lt;/h2&gt;
&lt;p&gt;对我个人而言，有几个朴素的动机：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;写过高并发服务被 GC 停顿坑过&lt;/strong&gt;：Rust 无 GC 的内存安全保证，解决了&amp;quot;要性能还是安全&amp;quot;的两难&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cargo 生态太舒服了&lt;/strong&gt;：一个命令搞定构建、依赖、测试、发布，比 C++ 的 CMake 地狱友好太多&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;类型系统的安全感&lt;/strong&gt;：Rust 的类型系统让很多 bug 在编译期就被拦截，而不是半夜被报警叫起来排查&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="三次放弃的心路历程"&gt;三次放弃的心路历程&lt;/h2&gt;
&lt;h3 id="第一次所有权直接劝退"&gt;第一次：所有权直接劝退&lt;/h3&gt;
&lt;p&gt;第一次翻开 The Rust Book，前三章还挺舒服——语法挺现代的，变量默认不可变，模式匹配很优雅。到 第四章 所有权那里，一切戛然而止。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;fn&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;let&lt;/span&gt; s1 &lt;span style="color:#f92672"&gt;=&lt;/span&gt; String::from(&lt;span style="color:#e6db74"&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;let&lt;/span&gt; s2 &lt;span style="color:#f92672"&gt;=&lt;/span&gt; s1;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;println!&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;{}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;, s1); &lt;span style="color:#75715e"&gt;// 编译错误！
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我真的愣住了，心想&amp;quot;凭什么赋值一下就把原变量废了？&amp;quot;——后来才明白这是 Rust &lt;strong&gt;所有权转移（move）&lt;/strong&gt; 的核心，目的是在编译期就标记哪些内存只能有一个 owner。当时理解不了这套心智模型，就放弃了。&lt;/p&gt;
&lt;h3 id="第二次生命周期劝退"&gt;第二次：生命周期劝退&lt;/h3&gt;
&lt;p&gt;几个月后又鼓起勇气再读，这次咬着牙过了所有权。但到了生命周期标注，再次崩溃：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;fn&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;longest&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;&amp;#39;a&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;(x: &lt;span style="color:#66d9ef"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;&amp;#39;a&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;str&lt;/span&gt;, y: &lt;span style="color:#66d9ef"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;&amp;#39;a&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;str&lt;/span&gt;) -&amp;gt; &lt;span style="color:#66d9ef"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;&amp;#39;a&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;str&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; x.len() &lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; y.len() { x } &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt; { y }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;'a&lt;/code&gt; 是什么？为什么需要手动标？编译器不是能推导生命周期吗？——实际上编译器有时候确实搞不清返回的引用到底来自哪个参数，需要人工标注来约束。但当时的我不理解背后的借用检查器逻辑，只觉得是在和编译器打架。&lt;/p&gt;</description></item></channel></rss>