<?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/ja/categories/rust/</link><description>Recent content in Rust on QSysArch - Quantum Computer System Architecture</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Sun, 14 Sep 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://qsysarch.com/ja/categories/rust/index.xml" rel="self" type="application/rss+xml"/><item><title>錆びの秘訣：より正確な種類？</title><link>https://qsysarch.com/ja/posts/0004-rust-to-the-rescue/</link><pubDate>Sun, 14 Sep 2025 00:00:00 +0000</pubDate><guid>https://qsysarch.com/ja/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;Raph Levien は、非常に巧妙な Rust ベースの SIMD 設計を使用して、最速の &lt;a href="https://medium.com/@raphlinus/inside-the-fastest-font-renderer-in-the-world-75ae5270c445" class="external-link" target="_blank" rel="noopener"&gt;グリフ レンダリング エンジン&lt;/a&gt; を超効率的に実装したことで有名です。彼の作品は、2023 年に &lt;a href="https://www.linkedin.com/company/bestechnic/" class="external-link" target="_blank" rel="noopener"&gt;Bestechnics&lt;/a&gt; で SIMD GPU を設計していたときに、私に大きなインスピレーションを与えてくれました。その後、Ralf Levien はこのグリフ レンダリングの &lt;a href="https://raphlinus.github.io/rust/graphics/gpu/2020/06/13/fast-2d-rendering.html" class="external-link" target="_blank" rel="noopener"&gt;GPU&lt;/a&gt; バージョンにも取り組みました。&lt;/p&gt;&#10;&lt;p&gt;そこで、彼の最新の講演「&lt;em&gt;Rustはいかにして勝利したか：高性能で信頼性の高いソフトウェアを求めて&lt;/em&gt;」(&lt;a href="https://www.youtube.com/watch?v=k_-6KI3m31M" class="external-link" target="_blank" rel="noopener"&gt;https://www.youtube.com/watch?v=k_-6KI3m31M&lt;/a&gt;)を偶然見つけたとき、私は1時間かけてその講演を見て、学ぶ価値のある洞察を何か得ようと決心しました。&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: より正確なタイプ" /&gt;&lt;/p&gt;&#10;&lt;h1 id="問題提起"&gt;&#10; 問題提起&#10; &lt;a class="heading-link" href="#%e5%95%8f%e9%a1%8c%e6%8f%90%e8%b5%b7"&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;激戦区（溺れるゾーンとも呼ばれる）は、&lt;em&gt;Rustの秘伝のソース：より正確なタイプ&lt;/em&gt;というタイトルのスライドから始まり、およそ55:00頃です。&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;em&gt;アフィン&lt;/em&gt;型が登場します。クローン可能性を『このインスタンスが1つ存在する』としてモデル化したいのです。そして、この型を使うことで、関数シグネチャで所有権の処理方法を細かく指定できます。最後の例は省略しますが、面白いですよね…」と述べています。&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;アフィン型&lt;/em&gt;&lt;/a&gt; が実際に何を意味するのか、理解できるでしょうか？また、膨大な知識の海に溺れることなく、平易な言葉で説明してもらえるでしょうか？&lt;/p&gt;&#10;&lt;p&gt;YouTubeのコメントで指摘されているもう一つの疑問点ですが、最後の関数の戻り値の型は、&lt;code&gt;Cow&amp;lt;&amp;amp;'a [T]&amp;gt;&lt;/code&gt;ではなく&lt;code&gt;Cow&amp;lt;'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;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code&gt;fn ω( l: &amp;amp;'a [T]) → Cow&amp;lt;'a,[T]&amp;gt;&lt;/code&gt;: 割り当てが発生する可能性がある。重複が末尾のみにある場合は割り当てを回避する。&lt;/p&gt;</description></item></channel></rss>