關於 sqlite3 WASM/JS 子專案

WebAssembly,簡稱 WASM,是一種定義低階程式語言的標準,它適合 (A) 作為許多其他語言交叉編譯的目標,以及 (B) 透過瀏覽器中的虛擬機器執行。基於 JavaScript 腳本化的設計理念,它提供一種將 C 語言程式碼(以及其他語言)編譯成 WASM 並透過 JavaScript 進行腳本化的方式,儘管 JavaScript 和 C 語言之間存在巨大差異,但摩擦相對較小。

人們從2012 年就開始為網路建構 sqlite3,但這個子專案是第一個「官方」與 SQLite 專案相關的成果,其目標是讓 WASM 版本的函式庫成為 SQLite 支援交付品系列中的一級成員。

本專案的具體目標

本專案的具體目標包括……

非目標

我們明確打算實現的目標

致謝

幾個專案在過程中給予我們相當大的幫助。我們非常感謝(按照我們調查它們的順序)……

Emscripten

https://emscripten.dev.org.tw

截至撰寫本文時,Emscripten WASM 工具鏈是唯一功能齊全的 WASM 工具鏈。雖然存在其他工具鏈,但 Emscripten 提供了其他工具鏈沒有的幾個「殺手級功能」,最值得注意的是 POSIX 檔案 I/O API 的透明模擬,這使得 sqlite3 可以在 WASM 版本中按原樣運作,而無需任何更改或調整。

此外,Emscripten 的開發人員在開發基於 OPFS 的功能時,直接提供了寶貴的支持。

sql.js

https://github.com/sql-js/sql.js

Alon Zakai 的 sql.js 是這段程式碼開發過程中重要的墊腳石,它展示了如何處理一些與 WASM 相關的技巧(例如處理指向指標的指標,以及新增 C 語言綁定回呼函式的 JS 實作)。 然而,這些 API 的形狀與 sql.js 相當不同。

據我們所知,sql.js第一個公開發布的網頁版 sqlite3

absurd-sql

https://github.com/jlongster/absurd-sql

James Long 名副其實的 absurd-sql 透過將資料庫儲存在 IndexedDB 儲存空間中,展示了瀏覽器端的 sqlite3 持久化。我們也嘗試過這種方法,但它並不適合我們。即便如此,這還是一個有趣的實驗。

wa-sqlite

https://github.com/rhashimoto/wa-sqlite

Roy Hashimoto 的 wa-sqlite 是第一個公開發布 sqlite3 之 OPFS 儲存選項的專案。它還提供了如何使用其他方面幾乎沒有說明文件的OPFS API 的完整示範。