← 返回信息流
AI 资讯Hacker News·2 天前

Show HN:WebBase-III 在浏览器中用原生解释器重建 dBASE III

原标题:Show HN: WebBase-III – dBASE III rebuilt in the browser with its own interpreter

速览

该项目在浏览器环境中成功重建了经典的 dBASE III 数据库系统,并内置了原生解释器。这一实现展示了如何在现代 Web 环境中运行和模拟传统的桌面数据库应用。它对于理解数据库底层机制及 Web 端复古计算具有参考价值。

AI 深度解读

Show HN: WebBase-III – 用浏览器重写的 dBASE III 及其解释器

背景

在 SQL 统治数据库领域之前,在对象关系映射(ORM)成为主流之前,甚至在“全栈”这个词被广泛使用之前,dBASE III 曾是桌面数据库开发的王者。对于许多老一代开发者来说,dBASE III 不仅仅是一个工具,更是一种文化符号。

那时的开发体验极具特色:你面对的是一个点提示符(dot prompt),输入 USE customers 打开数据表,接着输入 LIST,数据便直观地呈现在眼前。没有复杂的连接池配置,没有繁琐的 ORM 模型定义,数据就在那里,触手可及。

WebBase-III 正是对这一经典时代的致敬与重构。它将 dBASE III 的整个生态系统——包括终端界面、编程语言、BROWSE 浏览命令、@ SAY GET 表单布局、.prg 程序文件、索引机制以及报表功能——全部从底层重新构建为一个现代化的 Web 应用。该项目使用 TypeScript 编写了专属的解释器,后端依托 Node.js、WebSocket 和 SQLite,旨在让开发者在现代浏览器中重温 1984 年的数据操作体验。

核心内容

WebBase-III 并非简单的界面模拟,而是一个功能完整的运行时环境。它通过 Web 技术栈复刻了 dBASE III 的核心逻辑,并提供了现代化的交互方式。

1. 技术架构与部署

  • 前端与解释器:使用 TypeScript 从零编写了 W3Script 解释器,支持词法分析、递归下降 AST 构建及异步执行。
  • 后端支持:基于 Node.js 提供 HTTP 和 WebSocket 服务,底层数据存储使用 SQLite(通过 better-sqlite3 封装)。
  • 快速体验:支持通过 GitHub Codespace 一键启动,自动安装依赖并启动开发服务器。用户只需转发端口 5173 即可访问点提示符界面。
  • 本地运行
    • 开发环境:npm install 后运行 npm run dev
    • 生产环境:运行 npm run serve 构建并服务。
    • 局域网/Tailscale:服务器绑定 0.0.0.0,可直接通过 IP 访问。

2. 命令行界面 (CLI) 与 W3Script

WebBase-III 保留了经典的命令行交互模式,用户可以直接输入 W3Script 命令并即时看到结果:

  • 数据浏览LIST 命令按当前激活的索引顺序打印所有记录。状态栏会显示当前激活的数据库和表。
  • 索引管理INDEX ON name TO BYNAME 会在 SQLite 中创建索引并激活它,随后的 LIST 输出将按字母顺序排序。SEEK "Delta NV" 可在 O(log n) 时间内将记录指针跳转到第一个匹配项。
  • 关系操作:支持通过 SET RELATION TO 按关键字段链接工作区,实现关系型数据访问。跨工作区字段访问使用 alias.field 点符号表示法。

3. 图形化交互组件

除了命令行,WebBase-III 还提供了丰富的可视化组件:

  • BROWSE 网格:打开类似电子表格的网格视图,记录按当前索引顺序显示。支持 Tab/Enter 编辑单元格,Ctrl+N 新增行,Delete 删除行,Esc 返回终端。
  • 程序编辑器EDIT <name> 打开内置的 .prg 源代码编辑器。支持完整的 W3Script 语法(包括 DO CASEDO WHILEIF 等)和表单布局。Ctrl+S 保存,Esc 取消。
  • 表单引擎@ row,col SAY "label" GET variable 用于布局字符单元格的表单字段。READ 命令将其渲染为实时表单,等待用户填写并提交。

4. 侧边栏向导与可视化操作

左侧永久侧边栏提供了分类选择器和操作按钮,允许用户通过点击而非打字来驱动所有操作:

  • 功能覆盖:打开或创建数据库/表、浏览和过滤数据、构建索引、搜索、设计和运行报表、运行程序、修改表结构。
  • 实时反馈:每一次点击都会生成真实的 W3Script 命令并回显到终端中,帮助用户学习语言。
  • 向导预览:新建表、过滤、修改结构、报表设计器等向导在主区域打开,并显示即将运行的命令的实时预览。

5. 语言特性与兼容性

  • 工作区限制解除:原版 dBASE III 受 DOS 文件句柄限制,最多支持 10 个工作区。WebBase-III 支持无限工作区,每个工作区独立持有表、记录指针、过滤条件和索引。
  • 语法现代化:原版使用 alias->field 箭头语法,WebBase-III 采用更现代的 alias.field 点符号。
  • 布尔值表示:输出中显示 .T. / .F. 以匹配 dBASE 惯例。
  • 逻辑运算符:同时支持 NOT / .NOT.AND / .AND.OR / .OR. 两种风格。
  • 索引维护:当执行可能使索引无效的操作(如 DROPRENAMEALTER type)时,系统会删除表的所有索引并警告用户重新构建。

6. 测试与示例

  • 演示程序demos/*.prg 目录下的程序是权威来源,每次服务器启动时都会注入到程序存储中。推荐运行 DO inventory 以体验完整的功能展示(工作区、关系、索引、表单)。
  • 测试套件
    • 单元测试和集成测试:使用 Vitest (npm test)。
    • 端到端测试:使用 Playwright (npx playwright test),驱动真实浏览器覆盖导航、过滤、索引、程序、表单和 BROWSE 功能。

关键要点

  • 完全重写的解释器:WebBase-III 并非简单的封装,而是使用 TypeScript 从零构建了 W3Script 解释器,包括词法分析器、解析器和执行器。
  • 现代 Web 技术栈:前端基于 React/Vue 类现代框架(通过 Codespace 和端口转发体现),后端使用 Node.js + WebSocket + SQLite,实现了复古体验与现代技术的结合。
  • 无限工作区支持:突破了原版 dBASE III 的 10 个工作区限制,支持无限工作区及跨工作区的数据关联(SET RELATION TO)。
  • 交互式学习体验:侧边栏的每一个操作都会实时生成对应的 W3Script 命令并回显到终端,使得该项目不仅是工具,也是学习 dBASE 语法的绝佳平台。
  • 开源许可 (AGPL-3.0):项目采用 AGPL-3.0 许可证。这意味着任何人都可以免费使用、分叉和学习,但如果有人将其作为托管服务出售,则必须公开其修改后的源代码。这旨在防止项目被闭源商业化,保持其作为“玩具”和学习工具的纯粹性。
  • 语法兼容与微调:保留了 .T./.F. 布尔值表示和 alias.field 点符号,同时兼容多种逻辑运算符写法,确保老代码的可移植性和新用户的易用性。

意义与影响

WebBase-III 的出现具有多重意义:

  1. 技术怀旧与教育价值:它为新一代开发者提供了一扇窗口,让他们无需配置复杂的本地环境即可体验早期数据库开发的历史。通过可视化的操作和实时的命令回显,它降低了学习古老但影响深远的数据库语言(如 dBASE 系列)的门槛。
  2. Web 技术的边界探索:该项目展示了现代 Web 技术(TypeScript, WebSockets, SQLite/WASM 等)在模拟和重构复杂遗留系统方面的强大能力。它证明了即使是几十年前的命令行交互逻辑,也能在浏览器中流畅运行。
  3. 开源精神的体现:选择 AGPL-3
查看原文 →github.com