如果 EndBASIC 中没有 BASIC 会怎样?—— Julio Merino 著
摘要
Julio Merino 探讨了 EndBASIC 的未来,研究是否应移除 BASIC 语言层,以便将底层的 Rust VM 和图形引擎重新用于更现代或更通用的开发需求。
暂无内容
查看缓存全文
缓存时间: 2026/05/13 09:12
# 如果 EndBASIC 中没有 BASIC 会怎样?
来源:https://blogsystem5.substack.com/p/no-basic-in-endbasic
自从我开始构建 EndBASIC (https://www.endbasic.dev/) 以来,已经过去了六年时间:这是一个具有复古外观的 BASIC 解释器,可在 Web、桌面和嵌入式硬件上运行——并且允许编写跨平台应用程序,利用图形、云文件共享系统,甚至通过 GPIO 访问本地硬件。
但尽管听起来很酷,旅程也很令人兴奋,但关于项目的未来,总有一件事让我困扰:谁愿意花时间在一种被废弃的语言上构建新东西?即使是 Visual Basic,这个经过多年演变并获得“严肃语言特性”的真正平台,也已不再流行,据我所知,微软目前将其置于“维护模式” (https://learn.microsoft.com/en-us/dotnet/visual-basic/getting-started/strategy)。
所以我一直在思考……*“如果 EndBASIC 中没有 BASIC 会怎样?”* 换句话说,我如何利用在这个项目下创建的许多组件来构建人们实际上*想要*使用的东西,无论是用于复古风格的开发还是其他用途?
[](https://substackcdn.com/image/fetch/$s_!fqQl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7ae6401-0227-4c79-98ba-b8c0b352845f_1084x994.jpeg)
事实上,整个项目中 BASIC 的部分——即语言解析器和编译器——是最不有趣的。是的,我写了一个 BASIC 解释器,但我方言今天提供的功能数量……非常有限,而且构建这些功能并不是最激动人心的事情。例如:记录和文件是非常需要的功能,但添加它们并不会让项目变得比现在更酷或更有用。
所以:让我们看看 EndBASIC 背后的构建块(BBs),以便想象这些组件如何重组形成不同的东西。
在 EndBASIC 的根源处有一个“纯”语言核心,具有相对简单的、尚未优化的编译器和伴随的虚拟机,可以通过原生 Rust 绑定进行扩展,并可以嵌入到 Rust 程序中。利用这个核心语言来实现命令式 DSL 甚至动态配置文件是微不足道的。
但这里的“纯”是什么意思呢?简单来说,作为一个独立 crate 实现的核心语言,具有最少的依赖项,其中绝对没有函数或命令定义。这个 VM 执行的程序默认没有任何副作用,也不能逃逸 VM:它们只能计算值,可能基于主机注入的全局变量。
这个核心 crate 的消费者,如 EndBASIC 的标准库,负责实现使语言有用的所有函数和命令——但这些都被有意地排除在核心之外。即使是您期望 BASIC 方言提供的基本原语,如 `PRINT` 或 `INPUT`,也**不**是核心语言的一部分。这在编译器实现中带来了一些困难 (https://www.endbasic.dev/2023/01/endbasic-parsing-difficulties.html),但这是一个明确的设计选择,以保持核心的简洁。
在 EndBASIC 的图形绘制命令之下,有一组 Rust 原语来与可能具有图形功能的控制台交互。
目前,这个控制台在各种环境中运行,包括:
- 通过 `crossterm` 库在基于文本的 Windows 和类 Unix 终端上。
- 用于在 Windows 和类 Unix 系统(当然包括 macOS 和 Linux)上支持本机桌面图形的 SDL 库。
- 针对 Web 浏览器的 HTML5 canvas。
- 针对“启动到 EndBASIC”环境的 NetBSD wscons 帧缓冲区。
- ST7735s LCD(但更一般地说,基于 SPI 的 LCD)。
对于所有图形后端,这些 Rust 原语为常见形状提供一致的基本光栅化算法,并支持不同的位图字体。
在 EndBASIC 的文件操作背后,有一个 Rust 库,实现了基于虚拟驱动器的文件系统,并针对这些驱动器有多个实现。目前,驱动器可以由以下内容支持:
- 内存,如 RAM 盘。
- 硬编码到二进制文件中的一组只读文件。
- 主机文件系统中的一个目录。
- 浏览器的本地存储。
- 云服务。
云服务的驱动器由 EndBASIC 服务支持,该服务提供简单的 REST API 用于文件访问和修改。存储在此驱动器中的文件可以是用户私有的,但也可以与特定用户共享或设为公开。
为 EndBOX (https://www.endbasic.dev/endbox.html) 提供动力的,是一个精简到最小组件集的 NetBSD 基础系统,能够在设备上电后几秒钟内启动到图形应用程序。
系统镜像的设计使得可以轻松地从 Windows 和 macOS 主机访问配置文件和用户数据,从而可以在不需要访问内部 NetBSD 操作系统的情况下调整系统和执行备份。换句话说:NetBSD 只是一个对用户不可见的实现细节。
该平台配有一套自定义的强大构建脚本集合,协调从头编译 NetBSD 以及交叉编译使用前面描述的控制台框架的 Rust 应用程序。然后这些脚本负责将交叉编译的二进制文件打包到镜像中,并在启动过程的早期启动它。您可以将其视为 buildroot (https://buildroot.org/) 的简单版本,但基于 NetBSD 并明确针对为嵌入式设备创建应用程序专用镜像。
更重要的是:为了支持在启动过程早期启动的应用程序的需求,并确保应用程序以最少的权限运行,平台提供了一种 RPC 机制和一个特权守护进程,可用于为特定操作(如重启机器)提升权限。还有一个守护进程可选地从部署的设备收集完全匿名的遥测数据(如版本号、主机架构和正在使用的图形设备)。
在阅读上述四个构建块时,我怀疑脑海中可能会出现一些关于如何在不保留 BASIC 方言的情况下使用这些组件的想法。
以下是我的一些想法,关于这个项目如何演变:
- **继续构建 BASIC 语言。** 是的,当然这是一个可能性!EndBASIC 本身是一个有趣的项目,向其添加更多功能并继续构建这个复古环境是一个无尽的快乐来源。即使我后来质疑其意义……
- **用真正的语言替换 BASIC。** 正如我前面所说,进一步开发 BASIC 方言并不太有趣,特别是因为 BASIC 充满了使其难以解析的瑕疵。那么,如果您获得了 EndBASIC 目前提供的完全相同的复古、跨平台体验,但基于人们*喜欢*在这些天使用的真正语言呢?Lua 是一个强有力的竞争者……但 LISP 或 Scheme 也可以。我对后两者了解不多,但知道 LISP 机器 (https://en.wikipedia.org/wiki/Lisp_machine) 曾经存在……它们可能非常合适。
- **专注于核心。** 我有点喜欢拥有一个纯编译器和虚拟机的想法,它可以扩展形成 DSL,全部用 Rust 编写。那么专门在此基础上构建可能是另一条可能的路径?问题是世界上已经存在太多语言,以至于你无法想象,所以 pursuing 这感觉从一开始就是死胡同,我甚至不确定它意味着什么。
- **基于 BSD 的 buildroot 替代品。** buildroot 有效,但它基于 Linux,并带来您会从 Linux 期望的问题:您本质上是在组装由不同的人构建且几乎没有沟通的离散组件集合。将它们组合在一起给您“某物”,但它并不连贯。然而,EndBASIC 背后的平台对嵌入式磁盘镜像应该如何具有意见化的设计,并提供基本服务来强制执行安全原则、保护隐私并保持高性能。那么,如果您可以编写一个 Rust 本机程序,利用我的控制台和文件系统抽象原语,并将其轻松部署到嵌入式设备上作为“完整的操作系统”呢?
- **某种人工智能的东西。** 不可否认,人工智能将长期存在,所以我也在想它可能与 EndBASIC 有什么关系。AI 编码代理非常适合原型设计,而 EndBASIC 是一个很好的平台,可以用很少的代码展示引人注目的结果。那么,也许 EndBASIC 可以成为编码代理的良好目标,以便您可以 vibe code 嵌入式项目?
我在去年某时写了这篇文章,因为灵感耗尽:发布 EndBOX 是一项繁重的工作,一旦发布,我必须休息一下。老实说,收到如此少的兴趣有点令人失望。到圣诞节时,我重新拿起草稿,几乎要发布它。但是……
在一月份,我开始全面重新实现 EndBASIC 的核心语言,因为现在不重要原因。这意味着“下一步”已经决定,至少在接下来的几个月内:正如我在上周的 EndBASIC 0.12 发布公告 (https://www.endbasic.dev/2026/05/endbasic-0.12.html) 中提到的,这次重写即将登陆。一旦完成,我想花一些时间构建我一直希望拥有但多年来从未实现的一些功能。特别是,我想提供一些额外的图形操作原语(主要是用于精灵),我想最终添加声音支持。
但所有其他想法仍然在桌面上,我很好奇:它们中是否有任何引起您的好奇?
#### 关于此帖子的讨论
### 准备好更多了吗?
相似文章
Boriel BASIC
Boriel BASIC 是一款现代开源的 BASIC 编译器 SDK,主要为 ZX Spectrum 设计,提供增强功能、整数类型以及内联汇编支持,适用于复古游戏开发。
我正在撰写 Visual Basic 的发展史,第一章已发布
作者宣布推出长篇的 Visual Basic 发展史系列文章,第一章涵盖了 BASIC 的起源以及 VB 1.0 的开发历程。
Blaise – 一款面向 QBE 的现代、自举、无历史包袱的 Object Pascal 编译器
Blaise 是一款现代且自举的 Object Pascal 编译器,旨在通过提供单一语言模式、统一的内存模型以及基于 QBE 的原生代码生成,来消除遗留系统的负担。
2026 年的 Zig 与 Rust
本文在 2026 年的背景下对比了 Zig 和 Rust,认为编程代理通过自动化生成 Rust 代码,削弱了 Zig 在人机交互体验上的优势。
自己造一门编程语言比你想象的简单(但也更难)
作者分享了为游戏模组系统构建自定义编程语言的经验,讨论了设计动机和技术挑战。这篇文章反思了在个人项目中实现一门非玩具级编程语言的可行性与复杂度。