2026 年 7 月 11 日,开发者 Dilshan R. Jayakody 发布了面向中端微控制器的开源解释器项目 Tiny Basic for Arduino(托管于 GitHub 的 dilshan/tiny-basic 仓库,采用 BSD 3-Clause 许可证)。作者在 7 月 10 日的 Hackster.io 文章中表示,希望用廉价现代开发板和串口终端重现 Commodore 64 式的编程体验,官方页面更是打出了免 PC IDE 硬件端直接编程与功能齐全的招牌。但如果剥开这层复古外壳就会发现,它既不能脱离电脑独立存活,在基础语法上也严苛得近乎苦行;它真正的工程价值,是把现代硬件外设协议塞进交互式命令行,变成了一个披着 1975 年古老语法外衣的硬件调试 Shell。
96KB 内存只配 26 个变量:免 IDE 承诺背后的苦行与断电现实
这个新项目最让人意外的地方,是充裕的现代算力与极端克制的语言能力之间的巨大反差。官方目前明确支持两款 32 位开发板,默认平台是搭载 Cortex-M3 内核(SAM3X8E,主频 84 MHz)的 Arduino Due,拥有 96 KB RAM 和 512 KB Flash,最多支持 1,024 行代码;另一款是搭载 Cortex-M4 内核(RA4M1,主频 48 MHz)的 Arduino UNO R4 WiFi,配备 32 KB RAM 和 256 KB Flash,支持最多 264 行代码。在这样宽裕的 32 位硬件资源上,解释器却维持着半个世纪前的古典限制:单行代码上限 64 个字符,强制要求写 LET 赋值,不支持数组、字符串变量和自定义函数,全局只允许使用 A 到 Z 共 26 个单字母变量(支持整数与浮点数),GOSUB 子程序嵌套上限为 32 层,循环嵌套上限为 16 层。
官方宣传的无需连接 PC IDE 同样存在明显的认知落差。该项目基于 PlatformIO 构建(提供 due、uno_r4_wifi 及不含硬件操作的 native 主机测试三种环境),但它根本没有调用片上 Flash、EEPROM 或外置 SD 卡做持久化存储。用户敲入的所有程序完全保存在易失性 RAM 中,断电即丢失。所谓的 LOAD 命令并非从文件系统读取文件,而是让用户通过配置为 9600 波特率(8N1 格式)的串口终端,把电脑端保存的源码文本直接复制粘贴进开发板,再用 LIST 命令打印导出来备份。
- 提醒.创客教育者若想用它制作带屏幕电池的独立复古掌机,会因缺乏断电保存、数组及字符串支持而直接受阻;此外官方文档虽强调其轻量与快速,却未公布固件本身的最小 RAM/Flash 占用体积,也没有提供任何每秒语句数或执行速度跑分数据。
放弃数组却点满 I2C 与 SPI:三大 Arduino BASIC 的路线分野
为什么放着几十 KB 的内存不用,偏要守着 26 个变量的残缺语法?把时间轴拉回 1975 年微型计算机萌芽期就能看清脉络。该项目在 philosophy.md 文档中称参考了经典的 1975 年王理真(Li-Chen Wang)语法规范——这里其实有一处开源社区常见的历史溯源错位:文献记载 1975 年提出 Tiny BASIC 最初架构设计的是 Dennis Allison(刊登于 1976 年 1 月《Dr. Dobb's Journal》创刊号),而王理真著名的 Palo Alto Tiny BASIC 实际上诞生于 1976 年。但无论如何,早期 Tiny BASIC 的核心精神就是极简,而在当代 Arduino 生态里,不同开发者对极简的理解早已分化出截然不同的工程路线。
| 项目名称 | 目标硬件与内存规模 | 变量、类型与语法能力 | 存储持久化与外设亮点 |
|---|---|---|---|
| Tiny Basic for Arduino | 32位 Cortex-M3/M4 (32KB-96KB RAM) | 仅 26 个单字母变量,支持整数/浮点,无数组/字符串 | 纯 RAM 断电即失,原生内置 I2C/SPI/PWM 及结构化控制流 |
| TinyBasic Plus (BleuLlama) | 8位 AVR 芯片 | 仅支持 16 位有符号整数 | 支持内部 EEPROM 及可选 SD 卡(开 SD 需约 9KB Flash 和 1KB RAM) |
| ArduinoBASIC (Robin Edwards) | 8位 AVR (默认仅 1,024 字节工作区) | 支持浮点数、字符串变量与多维数组 | 支持 EEPROM 自启动,可接 PS/2 键盘与 OLED 屏幕独立运行 |
做个横向对比就很清楚了。前辈项目 ArduinoBASIC 在老旧 8 位 AVR 芯片默认的 1,024 字节(1 KB)狭小工作区里,硬是塞进了浮点数、字符串变量、多维数组以及键鼠屏幕独立运行能力;TinyBasic Plus 也把重点放在了 EEPROM 和 SD 卡文件读写上。相比之下,Dilshan 的新项目在语言完备性上全面退守,却把技能点全加在了现代控制流与底层硬件通信上。
语言上退回 1975 年的苦行,是为了换取免编译探测现代硬件的敏捷。
这正是该项目的真正定位。它在传统 GOTO 和 GOSUB 之外,越界加入了结构化的 IF/THEN/ELSE/ENDIF、WHILE/WEND 和 REPEAT/UNTIL 循环,内置了三角函数与位运算标准库,更重要的是原生集成了直接操作 GPIO、PWM、模拟输入(ADC)、声音以及 I2C 和 SPI 总线的命令。
- 结论.对于嵌入式硬件工程师而言,当手里拿到一颗陌生的 I2C 传感器或需要快速测试引脚电平时,无需打开笨重的 IDE 反复修改 C++ 代码、等待编译并重新烧录固件,只需连上串口敲两行
WHILE循环和总线读写指令就能实时验证寄存器响应,这才是它不可替代的实用场景。
接下来观察这个开源项目能不能从极客玩具走向趁手工具,只需要盯紧三个具体变量:作者与社区后续是否会补齐片上 Flash 或 EEPROM 的非易失性存储支持,是否会将其跨平台架构真正移植到 ESP32 或 RP2040 等更主流的现代 MCU 上,以及何时能拿出一份实打实的内存占用与执行速度基准测试报告。
