SQLite3 官方支持 WebAssembly!


SQLite 官方的 WASM 项目终于来了!这表示 WebAssembly 在 SQLite 社区完全进入工业级应用阶段!

1. WASM 是什么

WebAssembly,又名 WASM,是一种标准,它定义了一种低级编程语言,适合作为与许多其他语言交叉编译的目标,以及通过浏览器中的虚拟机运行。它在设计时考虑了通过 JavaScript 编写脚本,它提供了一种将 C 代码(以及其他代码)编译为 WASM 并通过 JavaScript 编写脚本的方法,尽管 JavaScript 和 C 之间还存在巨大的编程模型差异,但它为不同语言和 JS 的交互带来了标准桥梁。

根据 Ending 定律:“所有可以用WebAssembly实现的终将会用WebAssembly实现”。

SQLite 官方支持 WASM 只是再次证明和强化了定律有效性。实际上,在很早之前网上就有很多基于 LLVM 或 Emscripten 构建的 SQLite 库,它们最终可以被包装为 JS 库。

扩展阅读:WASM 作为 W3C 的 第 4 个标准,已经在不同的领域取得巨大的进展。比如 Docker 发布集成 WebAssembly 的首个技术预览版。同时大量编程语言已经开始支持 WASM 平台(完整列表可参考 https://wasmlang.org/ ),国内的 Go+、凹语言、KCL 配置语言 等都把对 WASM 的支持作为较高的优先级。关于 WASM 的更多信息可以参考 《WebAssembly标准入门》。

2. SQLite 官方支持 WebAssembly

https://sqlite.org/wasm/doc/ckout/index.md

其实早在 2022 年 9 月,Google 的 Chrome 开发团队宣布与 SQLite 开发团队合作,并开发了 SQLite 的 WebAssembly 版本,作为替代的 Web SQL 数据库 API。WebAssembly 起源于 SQLite 开发团队的努力。

3. 在浏览器体验 SQLite

打开网址 https://sqlite.org/fiddle/

4. 项目的具体目标

根据官网介绍,主要有 4 个目标:

  • 绑定一个低级的 sqlite3 API,在使用方面尽可能接近原生 API。
  • 更高级别的面向对象风格 API,类似于 sql.js 和 node.js 样式的实现。
  • 基于 Worker 的 API,以支持多线程环境更容易使用 SQLite 功能。
  • 基于 Worker API 的 Promise 包装,对用户完全隐藏了跨线程通信方面复杂性

不在此列的特性:

  • WASM 作为 Web 标准,我们只认 UTF8 一种编码格式,UTF16 支持暂无计划
  • WASM 虽然不局限于 Web 环境,但是 WASM 版本的 SQLite 依然是聚焦 Web 环境的场景
  • WASM 只支持较新的特性,老旧特性将被乘机清除掉

简而言之,在提供底层 API 能力的同时,针对面向对象、多线程等环节提供简单易用的 API。


相關推薦

2023-02-24

作为扩展,并将该扩展包含在 CLI 中。 添加 sqlite3_stmt_scanstatus_v2() 接口。(此接口仅在使用 SQLITE_ENABLE_STMT_SCANSTATUS 编译 SQLite 时可用。) 使用 sqlite3_deserialize() 创建的内存数据库现在将其文件名报告为

2022-06-13

布了一个 2.3 版本。 Wasmer 是支持 WASI 和 Emscripten 的通用 WebAssembly 运行时,提供基于 WebAssembly 的超轻量级容器,专注于支持在任何平台上运行 WASM 代码:从桌面端到云端、以及 IoT 设备,并且能嵌入在任何编程语言中。 Wasmer 凭

2023-09-03

份发布 1.30 之后的又一个重要里程碑。此版本中引入 Unit WebAssembly (WASM) 功能,代表了 Unit 功能的重大飞跃。 还带来了显着的新增功能 - 能够发送 response headers 并利用配置中 response headers 变量的功能。这些增强功能将大

2023-10-21

它接受Ruby代码作为输入,并创建一个将执行该Ruby代码的WebAssembly模块。 目前已有从Ruby代码创建Wasm模块的项目,最常见的是ruby.wasm,Ruvy也是基于ruby.wasm构建,并提供了一些特定的优势。 官方称创建Ruvy旨在利用预初始化Ruby虚

2022-11-19

中恢复一些内容 查询规划器的增强 增加了一个名为 sqlite3_filename 的新类型定义,用来表示数据库文件的名称。 增加了 sqlite3_value_encoding() 接口。 安全性增强:增强了 SQLITE_DBCONFIG_DEFENSIVE,以禁止改变 schema_version 增强了 P

2023-05-18

删除。 增强 JSON SQL 函数以支持 JSON5 扩展 现在允许对 sqlite3_config() 的 SQLITE_CONFIG_LOG 和 SQLITE_CONFIG_PCACHE_HDRSZ 调用发生在 sqlite3_initialize() 之后。 新增了 sqlite3_db_config() 选项: SQLITE_DBCONFIG_STMT_SCANSTATUS 和 SQLITE_DBCONFIG_REVERSE_SCANOR

2022-09-07

等同于 IS 和 IS NOT, 兼容 PostgreSQL 和 SQL 标准 从 sqlite3_vtab_distinct() 接口添加了新的返回代码 (value "3"),表示一个同时包含 DISTINCT 和 ORDER BY 子句的查询 新增 sqlite3_db_name() 接口 unix os 接口解析了数据库文

2023-10-20

两天),相约开源PHP办公室,我们一起聊 AI!>>> 2023 年 WebAssembly 现状调查报告现已出炉,一些亮点内容如下: Rust 和 JavaScript 的使用量正在持续增长。与此同时,Swift 和 Zig 的采用率也都在显着增加。 开发人员对 Zig、Kotlin

2022-06-27

等效于 IS 和 IS NOT,以与 PostgreSQL 和 SQL 标准兼容。 从 sqlite3_vtab_distinct() 接口添加一个新的 return code(值为“3”),表示一个查询同时具有 DISTINCT 和 ORDER BY 子句。 添加了 sqlite3_db_name() 接口。 unix os 接口解析数

2023-03-24

项处理损坏的数据库文件时。 在 CLI 中,当 sqlite3_error_offset() 例程返回超出范围的值时(另参阅下面对 sqlite3_error_offset() 的修复)。 在 recovery extension 中。 在 FTS3 中处理损坏的数据库文件时。

2023-04-08

Wasmer 团队宣布推出 WCGI —— 即 WebAssembly + CGI,可使用 WebAssembly 进行服务器端开发。 WCGI 将 WebAssembly 的强大功能与 CGI 的易用性和多功能性结合在一起。通过 WCGI,开发者使用 WebAssembly 和 Wasmer 即可运行任何 CGI 应用程序。

2022-10-02

nac 网络年鉴则基于 2022 年 6 月的数据集。 结论之一是“WebAssembly 没有被广泛使用,我们看到的不是使用量的增长,而是适度的收缩”。报告指出,网页中的 wasm(已编译的 WebAssembly 代码)数量很少。研究人员在 desktop 上发现了

2023-06-28

nbsp;已正式发布。 Wasmer 是支持 WASI 和 Emscripten 的通用 WebAssembly 运行时,提供基于 WebAssembly 的超轻量级容器,专注于支持在任何平台上运行 WASM 代码:从桌面端到云端、以及 IoT 设备,并且能嵌入在任何编程语言中。 Wasmer

2023-04-04

Pyodide 是基于 WebAssembly、面向浏览器和 Node.js 的 Python 发行版。Pyodide 由编译成 WebAssembly/Emscripten 的 CPython 解释器组成,允许 Python 在网页浏览器中运行。 Pyodide 可以安装来自 PyPi 的任何 Python 包。Pyodide 还包括一个外部函数接口