<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Rust on QSysArch - Quantum Computer System Architecture</title><link>https://qsysarch.com/zh-cn/categories/rust/</link><description>Recent content in Rust on QSysArch - Quantum Computer System Architecture</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sun, 14 Sep 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://qsysarch.com/zh-cn/categories/rust/index.xml" rel="self" type="application/rss+xml"/><item><title>Rust的秘诀在于：更精确的类型？</title><link>https://qsysarch.com/zh-cn/posts/0004-rust-to-the-rescue/</link><pubDate>Sun, 14 Sep 2025 00:00:00 +0000</pubDate><guid>https://qsysarch.com/zh-cn/posts/0004-rust-to-the-rescue/</guid><description>&lt;img src='https://qsysarch.com/images/cpu-gpu-simd.webp' style="width:280px;max-width:100%;float:right;padding-left:20px;"&gt;&#10;&lt;p&gt;Ralf Levien 因其高效实现的全球最快字形渲染引擎而闻名，该引擎采用了一种非常巧妙的基于 Rust 的 SIMD 设计。2023 年我在 Bestechnics 设计 SIMD GPU 时，他的工作给了我很大的启发。后来，Ralf Levien 还开发了该字形渲染引擎的 GPU 版本。&lt;/p&gt;&#10;&lt;p&gt;所以，当我偶然看到他关于“Rust 如何获胜：追求高性能、高可靠性软件”的最新演讲时，我决定花一个小时观看演讲，并从中汲取任何值得学习的见解。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;img class="glightbox" src="https://qsysarch.com/images/rust-secret-sauce.webp" alt="Rust Secret Sauce: More precise types" /&gt;&lt;/p&gt;&#10;&lt;h1 id="问题陈述"&gt;&#10; 问题陈述&#10; &lt;a class="heading-link" href="#%e9%97%ae%e9%a2%98%e9%99%88%e8%bf%b0"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h1&gt;&#10;&lt;p&gt;紧张的部分（也称为溺水区）大约从 55:00 开始，幻灯片标题为“&lt;em&gt;Rust 秘方：更精确的字体&lt;/em&gt;”。&lt;/p&gt;&#10;&lt;img src='https://qsysarch.com/images/progressive-insight-and-the-drowing-zone.webp' style="width:500px;max-width:100%;float:right;padding-left:20px;"&gt;&#10;&lt;p&gt;在 56 分 50 秒，Raph 说：“这就是仿射类型发挥作用的地方；你想把（可克隆性）建模为‘存在一个实例’；而这种类型允许你在函数签名中仔细指定如何处理所有权；最后一个例子我就略过了，不过挺有意思的，对吧……”&lt;/p&gt;&#10;&lt;p&gt;我绝对不敢自称是 Rust 专家，而且我承认自己更偏爱 Go——所以，问题是，我能理解 &lt;a href="https://users.rust-lang.org/t/what-are-affine-types-in-rust/23755" class="external-link" target="_blank" rel="noopener"&gt;&lt;em&gt;affine type&lt;/em&gt;&lt;/a&gt; 的真正含义吗？能否用通俗易懂的语言解释一下，而不用让我淹没在浩瀚的知识海洋中？&lt;/p&gt;&#10;&lt;p&gt;YouTube评论里还提到了一个问题：最后一个函数的返回类型应该是&lt;code&gt;Cow&amp;lt;'a, [T]&amp;gt;&lt;/code&gt;，而不是&lt;code&gt;Cow&amp;lt;&amp;amp;'a [T]&amp;gt;&lt;/code&gt;。说实话，这看起来比量子算法还要复杂。但也许并非如此！&lt;/p&gt;&#10;&lt;p&gt;那么，让我们仔细看看这些“更精准的类型秘诀”的例子：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code&gt;fn α( l: &amp;amp;[T] ) → Vec&amp;lt;T&amp;gt; &lt;/code&gt;: 始终分配内存，输入不受影响&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code&gt;fn β( l: Vec&amp;lt;T&amp;gt; ) → Vec&amp;lt;T&amp;gt; &lt;/code&gt;: 消耗输入并重用分配的内存。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code&gt;fn δ( l: &amp;amp;mut Vec&amp;lt;T&amp;gt; )&lt;/code&gt;: 不进行内存分配，只是修改输入向量&lt;/p&gt;</description></item></channel></rss>