Minischeme on ESP32的演进
由于有很多Gemini的token没有用,我在antigravity上vibe了一个scheme实现,基于字节码的虚拟机。能支持的基本都支持了,bigint,callcc,vector,甚至还有卫生宏,编译器则是让Gemini参考chez来实现一个
MiniScheme部分:
- Gemini自己给它取名叫minischeme,目标是最小化程序大小,并且内存使用很小,能在200K内存以下的设备中运行。
这里是第一版,编译器和解释器全部使用C实现,调教性能向,指令集高达60多条,里面有很多只是为了提升性能的特化指令。 - 因为虚拟机太过巨大,于是要求缩减指令数量,现在应该是10个上下,并且限制vm实现在1000行以内,同时使用scheme重写了编译器,并且通过自举。
- 增加fasl,可以dump整个app的镜像并且能下次加载,gemini自己加了一个msbc格式的字节码封装,不包含内存数据,只有指令和字符串,因此可以刷到rom中使用XIP模式来运行。
- 增加wasm虚拟机,于是fasl的字节码既可以在设备上,也可以在网页端运行。
- 使用Cheney分代GC来替换mark sweep gc,这样内存利用率就更高了。
- 增加bigint 库,callcc,卫define-syntax
- 至此scheme部分变化不大了。
ESP32部分:
- 在VM实现完成后,就要求它可以在esp32上运行,因为是C99实现,所以没什么问题。
- 在没有使用XIP之前,将编译器塞到固件中不太现实,因为编译器需要占用太多内存,因此增加webrepl,将scheme表达式编译成字节码后发送到esp32,这样就不需要在板侧运行一个编译器,同时编译器也替换成scheme版本,所以可以非常容易在wasm上运行。
- 要求wasm中增加模拟硬件接口的部分,这样就可以脱离硬件,开发固件并且查看显示效果
- 增加gui库,增加ili9488对接的部分,在esp32上可以显示了 (frame buffer和脏矩阵更新)
- 支持spiffs
- 支持ntp对时,优化显示
- 实现桌面信息牌程序
=========下面由claude接手====== - 实现XIP
- 实现字体库
- 内存优化,字符串存在rom中
- 增加修改显示像素bit和配色方案
- 实现pcmonitor,和lvgl版本看起来一样
- 移除特定LHM的C部分,全部使用scheme实现
- 修复缺失的fasl加载功能
- 实现可移植fasl,pc上的fasl可以加载到esp32
- 增加WebREPL 文件管理器
- 优化长字符串显示
- WASM 模拟器:模拟 Flash 持久化与 (restart)
- WebREPL 同步显示硬件画面与实测负荷(HTTP) (claude自此有访问界面的能力)
- 存储从 SPIFFS 迁移到 LittleFS
- 应用平台,实现多个app和管理界面
- 流式构建 ROM 镜像:不再受 64 KB 临时堆限制
- 应用失败时显示原因并进入系统设置
- 继续实现各个app
后续的计划
- 增加固件api版本和app需求版本,像Android一样有api版本,这样app安装的时候就可以知道是否兼容
- 实现一个应用市场,市场只使用msbc格式的app