<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Embedded on PlumePHP</title><link>https://plumephp.com/tags/embedded/</link><description>Recent content in Embedded on PlumePHP</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Fri, 01 Aug 2025 00:00:00 +0800</lastBuildDate><atom:link href="https://plumephp.com/tags/embedded/index.xml" rel="self" type="application/rss+xml"/><item><title>Rust 桌面端与 WASM：Tauri、WebAssembly 与嵌入式开发</title><link>https://plumephp.com/rust-desktop-wasm/</link><pubDate>Fri, 01 Aug 2025 00:00:00 +0800</pubDate><guid>https://plumephp.com/rust-desktop-wasm/</guid><description>&lt;h2 id="目录"&gt;目录&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="#1-taurirust-%E9%A9%B1%E5%8A%A8%E7%9A%84%E6%A1%8C%E9%9D%A2%E5%BA%94%E7%94%A8"&gt;Tauri：Rust 驱动的桌面应用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#2-tauri-20-%E4%B8%8E%E7%A7%BB%E5%8A%A8%E7%AB%AF%E6%94%AF%E6%8C%81"&gt;Tauri 2.0 与移动端支持&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#3-webassembly-%E7%BC%96%E8%AF%91%E4%B8%8E%E4%BA%A4%E4%BA%92"&gt;WebAssembly 编译与交互&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#4-wasiwasm-%E7%B3%BB%E7%BB%9F%E6%8E%A5%E5%8F%A3"&gt;WASI：WASM 系统接口&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#5-%E5%B5%8C%E5%85%A5%E5%BC%8F-rust"&gt;嵌入式 Rust&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#6-%E8%B7%A8%E5%B9%B3%E5%8F%B0%E5%8F%91%E5%B8%83%E7%AD%96%E7%95%A5"&gt;跨平台发布策略&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#7-%E6%80%BB%E7%BB%93%E4%B8%8E%E9%80%89%E5%9E%8B"&gt;总结与选型&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="1-taurirust-驱动的桌面应用"&gt;1. Tauri：Rust 驱动的桌面应用&lt;/h2&gt;
&lt;h3 id="11-为什么替代-electron"&gt;1.1 为什么替代 Electron&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;维度&lt;/th&gt;
					&lt;th&gt;Electron&lt;/th&gt;
					&lt;th&gt;Tauri&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;后端运行时&lt;/td&gt;
					&lt;td&gt;Node.js + Chromium&lt;/td&gt;
					&lt;td&gt;Rust + 系统 WebView&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;打包体积&lt;/td&gt;
					&lt;td&gt;~150MB&lt;/td&gt;
					&lt;td&gt;~3MB&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;内存占用&lt;/td&gt;
					&lt;td&gt;高（完整 Chromium）&lt;/td&gt;
					&lt;td&gt;低（共享系统 WebView）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;安全性&lt;/td&gt;
					&lt;td&gt;中等&lt;/td&gt;
					&lt;td&gt;高（Rust 内存安全 + 进程隔离）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;前端框架&lt;/td&gt;
					&lt;td&gt;任意&lt;/td&gt;
					&lt;td&gt;任意（React/Vue/Svelte/纯 HTML）&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="12-项目结构"&gt;1.2 项目结构&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;my-tauri-app/
├── src/ # 前端代码（任意框架）
├── src-tauri/ # Rust 后端
│ ├── src/main.rs
│ ├── Cargo.toml
│ └── tauri.conf.json
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="13-核心概念commands"&gt;1.3 核心概念：Commands&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// src-tauri/src/main.rs
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tauri&lt;/span&gt;::&lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#[command]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;: &lt;span class="kp"&gt;&amp;amp;&lt;/span&gt;&lt;span class="kt"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt; &lt;span class="nb"&gt;String&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;format!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello, &lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;! You&amp;#39;ve been greeted from Rust.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tauri&lt;/span&gt;::&lt;span class="n"&gt;Builder&lt;/span&gt;::&lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;invoke_handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tauri&lt;/span&gt;::&lt;span class="fm"&gt;generate_handler!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tauri&lt;/span&gt;::&lt;span class="fm"&gt;generate_context!&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;error while running tauri application&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;前端调用：&lt;/p&gt;</description></item></channel></rss>