<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>WasmEdge - 分類 - Yan-Hao Wang&#39;s Blog</title>
        <link>https://kola.ink/categories/wasmedge/</link>
        <description>WasmEdge - 分類 - Yan-Hao Wang&#39;s Blog</description>
        <generator>Hugo -- gohugo.io</generator><language>zh-TW</language><managingEditor>bses30074@gmail.com (Yan-Hao Wang)</managingEditor>
            <webMaster>bses30074@gmail.com (Yan-Hao Wang)</webMaster><copyright>This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.</copyright><lastBuildDate>Wed, 22 Apr 2026 16:30:34 &#43;0800</lastBuildDate><atom:link href="https://kola.ink/categories/wasmedge/" rel="self" type="application/rss+xml" /><item>
    <title>WasmEdge 0.16.1 版本 C API 簡單看過</title>
    <link>https://kola.ink/0-16-api/</link>
    <pubDate>Wed, 22 Apr 2026 16:30:34 &#43;0800</pubDate>
    <author>bses30074@gmail.com (Yan-Hao Wang)</author>
    <guid>https://kola.ink/0-16-api/</guid>
    <description><![CDATA[<h2 id="正文">正文</h2>
<p>參考 <a href="https://wasmedge.org/docs/embed/c/reference/latest/" target="_blank" rel="noopener noreffer ">C API 0.16.1 Documentation</a>。</p>
<p>WebAssembly 是一個開放標準，所以有很多不同的團隊開發了各自的 Runtime（執行環境），它們就像是瀏覽器界的 Chrome、Firefox 和 Safari。</p>]]></description>
</item>
<item>
    <title>WasmEdge Executor 執行詳解</title>
    <link>https://kola.ink/executor/</link>
    <pubDate>Thu, 26 Mar 2026 21:14:40 &#43;0800</pubDate>
    <author>bses30074@gmail.com (Yan-Hao Wang)</author>
    <guid>https://kola.ink/executor/</guid>
    <description><![CDATA[<h2 id="程式碼">程式碼</h2>
<p>可以看<a href="https://github.com/WasmEdge/WasmEdge/blob/99394eb0e53dab489a80b78f6dc93f44d7add690/lib/executor/instantiate/module.cpp#L17" target="_blank" rel="noopener noreffer ">程式碼</a>，大概可以看出 Executor 在初始化會做什麼事情。</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-cpp">
        <span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
        <span class="copy" title="複製到剪貼板"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="n">Expect</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o">&lt;</span><span class="n">Runtime</span><span class="o">::</span><span class="n">Instance</span><span class="o">::</span><span class="n">ModuleInstance</span><span class="o">&gt;&gt;</span> <span class="n">Executor</span><span class="o">::</span><span class="n">instantiate</span><span class="p">(</span><span class="n">Runtime</span><span class="o">::</span><span class="n">StoreManager</span> <span class="o">&amp;</span><span class="n">StoreMgr</span><span class="p">,</span> <span class="k">const</span> <span class="n">AST</span><span class="o">::</span><span class="n">Module</span> <span class="o">&amp;</span><span class="n">Mod</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">optional</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">string_view</span><span class="o">&gt;</span> <span class="n">Name</span><span class="p">)</span></span></span></code></pre></div></div>
<p>參數原型如上，可以看到有參數</p>
<ol>
<li><code>Runtime::StoreManager &amp;StoreMgr</code>: 提供導入（Import）時所需的外部實例尋找，並在實例化成功後負責「註冊」該模組。它維護了整個運行時的狀態空間</li>
<li><code>const AST::Module &amp;Mod</code>: 靜態藍圖，這是由載入器（Loader）解析並驗證後的抽象語法樹（AST）。包含了 WebAssembly 檔案的所有原始資訊（如指令、段數據、類型定義）。它是唯讀的（const）</li>
<li><code>std::optional&lt;std::string_view&gt; Name</code>: 定此模組是否為「具名模組」。若有值，該實例會以該名稱註冊進 StoreMgr，供其他模組後續引用；若無值（std::nullopt），則視為匿名模組</li>
</ol>
<p>回傳值則是使用 Expect 處理錯誤，並且使用 unique_ptr 保證只有一個獨占此指標，最後回傳一個 <code>Runtime::Instance::ModuleInstance</code> 要，這是最終產物。它包含了所有運行時需要的數據結構：跳轉表、動態分配的記憶體快、初始化的全域變數值，以及指向具體執行代碼的指針。</p>]]></description>
</item>
<item>
    <title>WasmEdge 基礎介紹跟專案架構</title>
    <link>https://kola.ink/project-arch/</link>
    <pubDate>Wed, 25 Mar 2026 13:47:23 &#43;0800</pubDate>
    <author>bses30074@gmail.com (Yan-Hao Wang)</author>
    <guid>https://kola.ink/project-arch/</guid>
    <description><![CDATA[<h2 id="wasm-基礎背景">Wasm 基礎背景</h2>
<p>檔案格式：</p>
<ul>
<li><code>.wat</code> (WebAssembly Text Format): 人眼可讀的純文字格式。類似於組合語言，開發者可以用它來進行底層除錯或理解 Wasm 的運行邏輯</li>
<li><code>.wasm</code> (WebAssembly Binary Format): 二進制格式。這是 Wasm 的標準執行檔，體積小且跨平台，是交給瀏覽器或 WasmEdge 等運行環境執行的正式檔案</li>
<li><code>.aot.wasm</code> (Ahead-of-Time Compiled): 預先編譯後的格式，這是 WasmEdge 特有的優化檔案，將 <code>.wasm</code> 事先轉譯成機器碼。執行時不需要再經過「直譯」，速度會比純 <code>.wasm</code> 快非常多</li>
</ul>
<p>常見工具：</p>]]></description>
</item>
<item>
    <title>WasmEdge Module 介紹</title>
    <link>https://kola.ink/module/</link>
    <pubDate>Tue, 24 Mar 2026 14:10:00 &#43;0800</pubDate>
    <author>bses30074@gmail.com (Yan-Hao Wang)</author>
    <guid>https://kola.ink/module/</guid>
    <description><![CDATA[<h2 id="簡介">簡介</h2>
<p>簡單介紹 WasmEdge 裡面具名跟匿名模組的差別。</p>
<h2 id="簡單例子">簡單例子</h2>
<p>假設我們有兩個簡單的 Wasm 檔案：</p>
<ol>
<li><code>provider.wat</code>: 提供一個 <code>add</code> 函式</li>
<li><code>consumer.wat</code>: 導入 (Import) <code>provider</code> 的 <code>add</code> 函式並有一個 <code>run</code> 函式執行</li>
</ol>
<div class="code-block code-line-numbers" style="counter-reset: code-block 0">
    <div class="code-header language-wat">
        <span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
        <span class="copy" title="複製到剪貼板"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
    </div><pre tabindex="0"><code class="language-wat" data-lang="wat">// provider.wat
(module
  (func $add (param i32 i32) (result i32)
    local.get 0
    local.get 1
    i32.add)
  (export &#34;add&#34; (func $add))
)

// consumer.wat
(module
  (import &#34;provider&#34; &#34;add&#34; (func $add (param i32 i32) (result i32)))
  (func (export &#34;run&#34;) (param i32 i32) (result i32)
    local.get 0
    local.get 1
    call $add)
)</code></pre></div>
<p>我們可以使用 <code>wat2wasm</code> 工具將它們編譯成 <code>.wasm</code> 檔案，使用 <code>wat2wasm provider.wat -o provider.wasm</code>。</p>]]></description>
</item>
</channel>
</rss>
