构建

这一切,皆于一个运行时之上

作者: makemind · 2026年6月11日

过去四个月,我一个接一个地接上设备。

二月是没有 GUI 的芯片。把 WeAct STM32H723 用 USB 插上,让开发板自己交出画面定义。三月把三家厂商的仪器放进同一块屏幕。四月把行车记录仪上能碰到视频的工具整个拿掉。五月让温室传感器换掉也不用改规则。

每月做一个,好故事是会攒起来的。但你并不知道那到底是一个东西,还是长得像的四个东西。 所以这个月我没做新设备,而是把已经做出来的数了一遍。

怎么数的

对照版本号不算证据。版本是手敲上去的数字,同一个号码下已经分叉的副本很常见。

所以我比的是 真正在画屏幕、真正在持有状态的那三个文件的字节。

RENDERER="lib/src/renderer/renderer.dart"
FACTORY="lib/src/widgets/widget_factory.dart"
STATE="lib/src/state/state_manager.dart"

每个样例都把运行时 vendoring 进自己内部,因为它得能被单独下载、单独跑起来。也就是说副本有二十七份,分叉的机会也有二十七次。

结果

sample                     version  renderer       widget_factory state_manager
bench-instruments          0.5.1    5d4989b6a199   fb156b4a17be   850341b1e8a3
board-over-serial          0.5.1    5d4989b6a199   fb156b4a17be   850341b1e8a3
booking-slots              0.5.1    5d4989b6a199   fb156b4a17be   850341b1e8a3
clinic-flow                0.5.1    5d4989b6a199   fb156b4a17be   850341b1e8a3
club-dues                  0.5.1    5d4989b6a199   fb156b4a17be   850341b1e8a3
dashcam-boundary           0.5.1    5d4989b6a199   fb156b4a17be   850341b1e8a3
...
taxi-dashboard             0.5.1    5d4989b6a199   fb156b4a17be   850341b1e8a3
two-shops                  0.5.1    5d4989b6a199   fb156b4a17be   850341b1e8a3
waiting-line               0.5.1    5d4989b6a199   fb156b4a17be   850341b1e8a3
   27 copies of the runtime · renderer, widget_factory and state_manager
   identical byte for byte · 0.5.1

一行都没有分开。

可是背后的东西没有一个是像的

这个对照要有意义,背后的设备就必须彼此不同。 如果全是同一类,屏幕一样就是理所当然。

sample                     device     backing
bench-instruments          c-sim      instruments/instruments.c
board-over-serial          hardware   STM32H723 over USB serial, ESP32 over Wi-Fi TCP
booking-slots              dart       server process
greenhouse-independent     c-sim      greenhouse_bus/greenhouse_bus.c
lcd-hmi                    c-sim      panel_firmware/panel_firmware.c
pos-kiosk-kds              c-sim      terminal_sim/terminal_sim.c
taxi-dashboard             c-sim      vehicle_bus/vehicle_bus.c

三类。 真实开发板(USB 串口和 Wi-Fi TCP 两种都有)、五个用 C 写的固件与总线模拟器,还有 Dart 服务端。

校验把这一点明确守住了——种类少于三种就失败,真实硬件不在名单里也失败。

[ "$NKIND" -ge 3 ] || { echo "   only $NKIND kind(s) of device"; exit 1; }
grep -q "hardware   STM32H723" "$S" || { echo "   no real hardware in the corpus"; exit 1; }

此内容需要开发者或更高等级

登录并升级您的方案即可继续阅读。

查看方案
Twitter