<?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>Wit on 楠楠自瑜</title>
    <link>https://cnutshell.net/tags/wit/</link>
    <description>Recent content in Wit on 楠楠自瑜</description>
    <generator>Hugo -- 0.157.0</generator>
    <language>zh-cn</language>
    <lastBuildDate>Wed, 15 Apr 2026 14:42:40 +0800</lastBuildDate>
    <atom:link href="https://cnutshell.net/tags/wit/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>如何基于 .wit 文件生成 rust 代码</title>
      <link>https://cnutshell.net/tutorial/wit-to-rust/</link>
      <pubDate>Wed, 15 Apr 2026 14:42:40 +0800</pubDate>
      <guid>https://cnutshell.net/tutorial/wit-to-rust/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/nearai/ironclaw&#34;&gt;IronClaw&lt;/a&gt; 采用 wasm 沙箱隔离作为其安全机制，IronClaw 宿主和沙箱之间的交互接口是在 &lt;code&gt;.wit&lt;/code&gt; 文件中定义的，例如 &lt;a href=&#34;https://github.com/nearai/ironclaw/blob/staging/wit/channel.wit&#34;&gt;channel.wit of IronClaw&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;这篇文章回答一个问题：如何基于定义好的 wit 文件生成 rust 代码？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;wit-bindgen&lt;/code&gt; 是 Bytecode Alliance 开发的官方工具，它能将 &lt;code&gt;.wit&lt;/code&gt; 文件中定义的接口转换为 Rust 代码。它主要有两种使用方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 &lt;code&gt;build.rs&lt;/code&gt; 构建脚本中使用&lt;strong&gt;命令行工具&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;或在代码中使用 &lt;code&gt;wit-bindgen&lt;/code&gt; 库的&lt;strong&gt;宏&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;方法一在-buildrs-中使用-cli-工具wit-bindgen-cli&#34;&gt;方法一：在 &lt;code&gt;build.rs&lt;/code&gt; 中使用 CLI 工具（&lt;code&gt;wit-bindgen-cli&lt;/code&gt;）&lt;/h2&gt;
&lt;p&gt;这种方式在构建时生成一次绑定文件（例如 &lt;code&gt;bindings.rs&lt;/code&gt;），之后可以作为常规 Rust 模块引入。&lt;/p&gt;
&lt;h3 id=&#34;1-添加依赖&#34;&gt;1. 添加依赖&lt;/h3&gt;
&lt;p&gt;在 &lt;code&gt;Cargo.toml&lt;/code&gt; 中，将 &lt;code&gt;wit-bindgen-cli&lt;/code&gt; 添加到 &lt;code&gt;build-dependencies&lt;/code&gt;，并把生成的 &lt;code&gt;bindings.rs&lt;/code&gt; 包含在 &lt;code&gt;lib.rs&lt;/code&gt; 中：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Cargo.toml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;package&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;build&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;build.rs&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;lib&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 声明生成的 bindings 模块&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;path&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;src/lib.rs&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;build-dependencies&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;wit-bindgen-cli&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0.28.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// src/lib.rs
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 声明由 build.rs 生成的 bindings 模块
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;mod&lt;/span&gt; bindings;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;pub&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;use&lt;/span&gt; bindings::&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;2-编写构建脚本-buildrs&#34;&gt;2. 编写构建脚本 (&lt;code&gt;build.rs&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;在项目根目录下创建 &lt;code&gt;build.rs&lt;/code&gt;，使用 &lt;code&gt;wit_bindgen_cli::generate!&lt;/code&gt; 宏处理 &lt;code&gt;.wit&lt;/code&gt; 文件。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
