使用 Rust 建立更好的 sqlite3 相容 JavaScript 套件

https://blog.turso.tech/building-a-better-sqlite3-compatible-javascript-package-with-rust-a388cee9

使用 Rust 打造一個兼容 better-sqlite3 的 JavaScript 套件

libSQL 專案是 SQLite 的分支,增加了生產使用上的需要的功能,例如伺服器模式、複製和 S3 備份。我們決定在 Rust 實現擴展,以確保安全性和開發速度。

然而,使用 Rust 也意味著我們無法只依賴現有的生態系統,還必須自己提供語言綁定。例如,在 JavaScript 生態系統中,一個流行的提供 SQLite3 綁定的套件是 better-sqlite3。

我們的目標是開發一個設計良好的套件,可以無縫地替換 better-sqlite3,讓使用者可以輕鬆遷移而不需修改現有的程式碼,同時也提供使用 libSQL 的高級功能和擴展。

當然,我們並非第一個希望將 Rust 代碼引入 JavaScript 生態系統的人。有兩個 Rust crates,Neon Bindings 和 NAPI-RS,允許您在 Rust 中編寫代碼並將其導出到 JavaScript。我們最終選擇了 Neon Bindings,但稍後發現 Prisma 使用 NAPI-RS,這也是個不錯的選擇。

better-sqlite3 API 的實現是怎樣的?

使用 Neon Bindings 實現 API 的方式:

我們需要構建一個同時包含 package.json 和 Cargo.toml 文件的源代碼庫,因為它是一個雙語言套件。

我們向包中添加了 neon crate 和 libsql crate 作為依賴項。

我們添加了一個具有 Neon 特性的 index.js 文件,import Rust 函數和 Database 類:

[更多詳細內容,請參閱原文]

總而言之,我們學習了使用 Rust 構建一個與 better-sqlite3 兼容的 JavaScript 套件所需的組件。這些組件包括 libsql npm 套件、@libsql/以及 libsql Rust crate。實現 JavaScript API 在 Rust 中沒有太多複雜的地方,特別是將 Rust 值轉換為 JavaScript 值。

via Hacker News

February 28, 2024 at 04:09PM

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *