六年前,Julio Merino开始做一个叫EndBASIC的项目:一个能在网页、桌面和嵌入式硬件上运行的复古风格BASIC解释器,支持图形、云文件共享,甚至能通过GPIO访问本地硬件。
听起来很酷。但有个问题一直困扰着他:谁愿意在一个被遗弃的语言上投入时间开发新东西?就连Visual Basic这种真正进化过、拥有"严肃语言特性"的平台,如今也 fallen out of fashion,据他所知正处于微软的"维护模式"。
![]()
于是他开始想:"如果EndBASIC里没有BASIC呢?"
这个念头不是心血来潮。在他看来,整个项目中BASIC语言本身——也就是解析器和编译器——其实是最无趣的部分。他确实写了一个BASIC解释器,但方言提供的功能相当有限。记录类型、文件操作这些急需的功能,加上去也不会让项目变得多酷或多有用。
真正有价值的,是底下那些技术积木。
积木一:纯编译器与虚拟机
EndBASIC的核心是一个"纯净"的语言内核,配有相对简单、尚未优化的编译器和配套虚拟机。它可以通过原生Rust绑定扩展,也能嵌入到Rust程序中。用这个核心语言来实现命令式DSL甚至动态配置文件,都很简单。
"纯净"是什么意思?核心语言作为一个独立的crate,依赖极少,里面没有任何函数或命令定义。在这个虚拟机上运行的程序默认没有副作用,也无法逃逸出虚拟机——它们只能计算值,或许基于宿主注入的全局变量。
消费者(比如EndBASIC的标准库)负责实现所有让语言有用的函数和命令,但这些被刻意排除在核心之外。就连PRINT、INPUT这种BASIC方言该有的基础原语,也不在核心语言里。这给编译器实现带来了一些困难,但目的是让核心保持精简。
积木二:可移植的控制台框架
EndBASIC图形绘制命令的底层,是一个跨平台的控制台框架。它抽象了不同终端的能力差异,让同一份代码能在网页Canvas、桌面终端、甚至串口上跑起来。
Merino没详细展开这个框架,但从上下文推断,它处理了光标移动、颜色设置、屏幕缓冲这些底层细节,让上层代码不用关心自己跑在什么环境里。
这两个积木的组合,暗示了一种可能性:剥离掉BASIC这层外壳,这些基础设施完全可以支撑起别的什么东西。一个更现代的脚本语言?一个针对特定领域的配置语言?或者某种复古风格但语法更友好的开发环境?
Merino没有给出答案。他只是在六年后的这个节点上,诚实地记录下一个开源维护者的典型困境:你造了一艘船,却发现乘客们想要的是一辆车。而船底的发动机,或许比船身本身更有价值。
这种自我拆解的冲动,在开源世界里并不罕见。但大多数作者不会公开写出来。Merino的坦诚,让这篇技术博客多了一层罕见的自省——关于技术债务,关于方向误判,也关于那些沉默沉没的沉没成本。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.