实时替换(--watch 与 Player)
Entelechy 的核心体验是:世界一直在运行,定律和结构可以随时替换。有三种方式在本地体验。
1. run --watch
Section titled “1. run --watch”entelechy run examples/grayscale/scene.esn --out output.ppm --watch保存场景或它使用的任何文档,文本发生变化的 Kernel 会重新发布,受影响的节点重新运行。编译失败的 Kernel 会被报告,旧版本继续运行。下面是一次真实的会话日志(复制了 examples/grayscale 到 gw/ 后操作):
watching gw/kernels/gradient.ent, gw/kernels/grayscale.ent, gw/kernels/pixelate.ent, gw/scene.esn; edit a document and saverejected gw/kernels/grayscale.ent:8:59: `nope` is not defined ← 故意写错:被拒绝scene loadedevaluated in 51.856µs: executed [], reused 2 -> gw.png ← 什么都没变,旧版本仍在运行scene loadedevaluated in 1.30081ms: executed [gray+source, blocks], reused 0 -> gw.png ← 修好并把 amount 改成 0.5--watch 下场景的时钟是从启动起经过的秒数,所以用到 time() 的场景会持续变化。
2. Player 窗口
Section titled “2. Player 窗口”entelechy player examples/life/scene.esnPlayer 在窗口中打开场景并保持实时:改动的 Kernel 在帧之外编译,准备好后再换入。它接受 run 的 --library、--input、--output、--backend、--memory、--work、--small、--allow、--grant,以及:
| 参数 | 作用 |
|---|---|
--scale <n>、--window <w>x<h> |
初始放大倍数与窗口尺寸 |
--no-audio |
不打开声卡 |
--show-while-building |
设备还在构建时先打开窗口,期间在 CPU 上绘制 |
--hold-pointer |
点击后锁定并隐藏系统光标 |
--folder <name,...> |
允许用 Cmd+O 为这些目录输入/输出选择文件夹(权限由 --folder-allow 指定) |
--replay <file> |
在窗口中播放一个回放 |
--serve、--listen <host:port>、--allow-origin <origin> |
在窗口中同时提供创作协议 |
窗口快捷键:
| 键 | 作用 |
|---|---|
| F5 | 重置状态 |
| F6 | 在各节点之间切换预览 |
| F8 | 暂停场景时间;F9 或 F7 单步 |
| F10 | 显示帧数据:frame、cpu、wait、gpu、节点、内存、等待设备的节点、最忙的节点 |
手柄映射为按键:方向键与左摇杆是方向键,South 是 Z,East 是 X,Start 是 Enter,Select 是 Escape。其他所有键都交给场景。
3. 回放的 --watch
Section titled “3. 回放的 --watch”entelechy replay tests/*.replay --watch只重新播放受改动影响的回放,并且每个回放只计算变化的部分——适合边写 Kernel 边看测试。
状态会怎样?
Section titled “状态会怎样?”替换 Kernel 时,用 <~ 读取的状态(上一帧提交的值)会被保留;如果新版本改变了状态端口的布局,可以用 migrate 指定一个迁移 Kernel 来转换旧状态,否则状态从初始值重新开始,并在求值报告中说明。详见图与状态和热替换与校验。

