EndBASIC 0.14:我们实现多媒体了吗?
摘要
EndBASIC 0.14 新增基本声音支持、新图形原语(三角形、多边形、填充)、复古 VGA 字体,并修复了 macOS 兼容性。
<p><a href="https://lobste.rs/s/ctulps/endbasic_0_14_are_we_multimedia_yet">评论</a></p>
查看缓存全文
缓存时间: 2026/07/04 16:43
# EndBASIC 0.14:我们进入多媒体时代了吗? - EndBASIC
来源:https://www.endbasic.dev/2026/07/endbasic-0.14.html
发布于:2026年7月4日
就在一个多月前,我刚刚宣布了 EndBASIC 0.13(https://www.endbasic.dev/2026/05/endbasic-0.13.html),带来了全新的编译器和虚拟机实现。0.13 是六个月工作的成果,我不得不“把它们排出去”以理清思绪。然而说到底,0.13 “仅仅”提升了性能。没错,提升巨大,但它们并没有让 EndBASIC 对你来说更酷。
今天的 0.14 则是另一个物种。这个闪亮的新版本汇集了各处的新功能,特别是增加了基础的声音支持。正是由于后者,0.14 标志着一个重要里程碑,因为它解锁了通往可能达到 1.0 的最后一块边疆。我本想在这次发布中加入更多东西——还有一个功能由于难度最终不得不放弃——但到了某个时刻,你必须停下并发布代码。所以我们来了!
要谈的内容很多,但在进入正题之前,先列出必看链接:
- **启动在线解释器(https://repl.endbasic.dev/)**
- **下载桌面版和嵌入式设备版(https://www.endbasic.dev/download.html)**
- **阅读发布说明(https://github.com/endbasic/endbasic/releases/tag/endbasic-0.14.0)**
- **访问交互式项目画廊(https://www.endbasic.dev/gallery.html)**
## 图形,更多图形!
0.13 带来了巨大的性能提升,之后我首要想做的事就是提供更多的图形基本指令,让额外的性能得以展现。现在我们有了绘制三角形(`GFX_TRI` 和 `GFX_TRIF`)、多边形(`GFX_POLY` 和 `GFX_POLYF`)以及区域填充(`GFX_FILL`)的命令。
作为这项工作的一部分,我将我最早为 EndBASIC 编写的一个演示程序——“生产化”了——这是一个绘制若干圆并在容器盒内弹跳的小程序——用来展示新的图形基本指令。这个演示现在已打包在 EndBASIC 的 `DEMOS` 驱动器中,并可通过画廊(https://www.endbasic.dev/gallery.html)访问。你可以在下面看到它,注意这是一个实时运行的程序,不是视频!你可以直接在浏览器中与之交互。
## 复古 VGA,有人要吗?
早在我为 LCD 显示屏(https://www.endbasic.dev/2024/04/endbasic-st7735s.html)和 NetBSD 驱动的控制台(针对 EndBOX,https://www.endbasic.dev/endbox.html)添加支持时,我不得不为帧缓冲实现一个位图字体渲染“引擎”。虽然这很酷,但也带来了与 Web 和 SDL 控制台的不一致,后者依赖于 IBM Plex Mono(https://www.ibm.com/plex/)TTF 字体。这种字体看起来不错,灵感来自老式 PC 字体,但还是太“现代”了。
因此,为了统一所有控制台的视觉风格,并让 EndBASIC 看起来更“复古”,我移除了所有 TTF 支持,转而使用自己的字体渲染设施。作为其中的一部分,我将标准 IBM VGA 8x16 字体添加到了字体集合中,并使其成为所有控制台的默认字体。
这让控制台看起来复古,但也很单调,如果你第一次启动 EndBASIC,你可能永远不会想到它的控制台可以混合文本和图形。所以为了从一开始就表明控制台是混合的,我还修改了欢迎横幅(多年来未曾改动),现在旁边会显示一个小图标。看,瞄一眼吧!
EndBASIC 0.14 中新的混合欢迎横幅。
## macOS,终于修复了
EndBASIC 中的 SDL 图形控制台已经存在多年了,我最初编写代码时,它在 macOS 上运行正常。不幸的是,虽然我最初的实现将所有图形操作卸载到单独的线程,但它有一个致命缺陷:那个单独的线程不是 *主* 线程。当时 macOS 并没有抱怨,但从某个不那么新的版本开始,EndBASIC 在启动时就会崩溃。
修复这个问题在概念上很容易,因为单独的线程架构已经存在,但互换角色却颇具挑战性。无论如何,现在它终于又能正常工作了!
不过我要提醒你,在 macOS 上运行预编译的 EndBASIC 二进制文件有点烦人。我没有对这些文件进行代码签名,因为我没有 Apple 开发者证书,而且随着每个 macOS 版本的发布,运行未签名二进制文件变得越来越困难。在我上一次尝试 macOS Tahoe 时,你需要逐个批准运行二进制文件 *和* 捆绑的共享库。Windows 也显示同样令人担忧的关于未签名二进制文件的警告,但至少绕过它们更容易。
我理解信任来自互联网的随机二进制文件很难接受,所以至少让我告诉你,你下载的二进制文件(https://www.endbasic.dev/download.html)都是通过 GitHub Actions 从已检入的代码生成的,因此你有清晰的审计轨迹了解它们的来源。这在多年前设置起来很痛苦,但我特意这样做,是为了让你不必信任“来自开发者工作站的随机二进制文件”这种情况。
## 支持 shebang
另一个锦囊妙计是新增对在类 Unix 系统中直接执行 EndBASIC 二进制文件的支持。没什么特别的,对吧?毕竟这对解释器来说是基本要求。但尽管如此,这还是一个很酷的新功能!
原则上这很简单,但有一个小问题:某些程序可能希望指定控制台尺寸,如果你使用常见的 `#!/usr/bin/env endbasic` shebang,你无法指定控制台标志,因为 shebang 行只能包含两个参数。我不得不实现一个辅助机制来调整控制台设置,当然这是受到 Emacs 属性行的启发。Shebang 后面可以跟一个魔术注释来指定给定程序使用哪个控制台,这样程序就可以“独立运行”:
``
#!/usr/bin/env endbasic
REM endbasic cli: console=sdl:resolution=1024x768
``
我要提醒你 `#!/usr/bin/env` 被认为是有害的(https://jmmv.dev/2016/09/env-considered-harmful.html)(是的,我自己说的)。
下面是一个小视频演示两个可运行的脚本,一个提供文本界面(同一个终端窗口),另一个弹出一个图形控制台作为独立窗口:
新的可运行(图形!)脚本支持。
## 声音,终于来了
现在来到我多年来一直想实现的最大功能:声音支持。我一直在拖延,认为这将会非常繁琐地实现,但后来我突然想到:音频只是控制台的另一种“输出”类型。我不需要为它实现全新的抽象层:我只需将其附加到已有的 `Console` 框架上,并通过它实现音频基本指令就行了!
有了这个想法,实现实际上很简单,所以现在我们有了一个在终端中也能工作的 `BEEP` 命令,以及一个能够播放任意音调的 `SOUND` 命令。目前还没有其他功能:我曾考虑实现一个类似 QBASIC 的 `PLAY` 命令,但这需要自己的迷你语言解析器和后台播放,老实说,那工作量太大了。
你现在就可以播放一个简单的声音演示。只需点击嵌入式解释器,然后按下一个键:
## 尽情享受吧
这就是 EndBASIC 0.14 主要变化的概述。还有几个较小的更新值得提及,但它们不够大,不足以收录到本文中,但你会在 NEWS.md(https://github.com/endbasic/endbasic/blob/master/NEWS.md)文件中找到所有细节。
EndBASIC 0.14 标志着一个重要里程碑,因为它打通了通往 1.0 的道路。正如我之前提到的,总有一些东西可以添加,比如精灵支持、文件管理或记录……但 0.14 带来了我在 2020 年启动这个项目时脑海中的所有设想:用 BASIC 的简洁性编写复古风格的小游戏的能力。
试试看吧,照例,玩得开心!如果你像我一样在美国 🇺🇸,祝你 250 周年快乐!
相似文章
如果 EndBASIC 中没有 BASIC 会怎样?—— Julio Merino 著
Julio Merino 探讨了 EndBASIC 的未来,研究是否应移除 BASIC 语言层,以便将底层的 Rust VM 和图形引擎重新用于更现代或更通用的开发需求。
Boriel BASIC
Boriel BASIC 是一款现代开源的 BASIC 编译器 SDK,主要为 ZX Spectrum 设计,提供增强功能、整数类型以及内联汇编支持,适用于复古游戏开发。
Show HN: 我们怀念Winamp,因此为macOS构建了一款音频播放器
一款名为180db的新macOS音频播放器发布,其灵感来自Winamp,专为音乐人和DJ设计,具备变调、布局自定义等功能。
[audio.cpp] GGML之音——C++/GGML原生ACE-Step、Stable Audio、HeartMuLa、RoFormer、HTDemucs发布。60秒生成10分钟音乐!
audio.cpp发布重大更新,新增音乐/SFX生成和源分离功能,支持ACE-Step、HeartMuLa、Stable Audio 3和HTDemucs,在原生C++/GGML中实现长音乐生成高达10倍的实时速度。
Blaise v0.10.0:本地后端、线程与增量编译
Blaise v0.10.0 通过 QBE 增加了本地后端支持、线程功能和增量编译,推动这款现代 Object Pascal 编译器向自托管和更广泛的平台支持迈进。