简介
Entelechy 是一个用 Rust 写成的运行时,口号是 Software that becomes, while it runs——软件在运行中生长。在 Entelechy 里,程序不是编译好再发布的成品:AI(或人)编写“定律”(Kernel),组合“结构”(Graph),并且在世界持续运行的同时修改这两者。
Host 是世界。 Kernel 是定律。 Graph 是结构。 AI 是创造者。
| 角色 | 是什么 | 在仓库里 |
|---|---|---|
| Host | 世界本身:内存、设备、时间、预算。它保持小而稳定,不知道“手柄”“光照”“魔方”这些领域概念。 | crates/core/host |
| Kernel | 一个小的类型化函数 Y = K(X, P, C),用 .ent 语言编写,只能通过它声明并被授予的能力接触机器。 |
crates/core/kernel、crates/frontend/* |
| Graph | 用 .esn 场景按稳定 id(如 image.grayscale@1)组合 Kernel,连接它们的类型化端口。Kernel 负责计算,Graph 负责关系。 |
crates/core/graph、crates/frontend/scene |
| AI | 通过一个开放协议创作:stdin/stdout、socket、WebSocket 或 C 函数上的 JSON lines。任何模型、任何语言,权限规则都一样。 | crates/interface/protocol |
一个程序如何“生长”
Section titled “一个程序如何“生长””-
一条定律。 写一个 Kernel:
kernels/grayscale.ent kernel image.grayscale@1 {requires { field.read; field.write; }input source: Image;param amount: Float = 1.0;output result: Image;fn luma(c: Vec4) -> Float {return dot(c.rgb, vec3(0.2126, 0.7152, 0.0722));}compute {let c = sample(source);let g = luma(c);return mix(c, vec4(g, g, g, c.a), amount);}} -
一个结构。 用场景把 Kernel 连起来:
scene.esn use "kernels/";node source: image.gradient@1 { domain = vec2(128, 128); }node gray: image.grayscale@1 { source <- source.result; amount = 1.0; }node blocks: image.pixelate@1 { source <- gray.result; size = 8; }output result <- blocks.result; -
运行中的改动。 修改任意一个文件,新版本会在旁边被编译、校验、准备,然后在下一帧整体换入。错误的改动会在
文件:行:列处被拒绝,世界照旧运行。
一切都是计算出来的
Section titled “一切都是计算出来的”图片、声音、几何、骨骼动画和游戏状态都是同一种资源:类型化的 Field。每个 Kernel 都降级到同一种与后端无关的 IR,可以由参考解释器、JIT(通过 Cranelift 生成本机代码,或生成 WebAssembly)以及 GPU(通过 wgpu 运行 WGSL)执行。解释器是参考实现;JIT 与它逐位一致。
仓库里的示例覆盖了路径追踪、光线步进、百万粒子、Navier–Stokes 烟雾、刚体物理、波函数坍缩、梯度下降训练的神经网络、合成器与 MIDI、glTF / Blender 骨骼、俄罗斯方块和贪吃蛇、体素编辑器、CHIP-8 解释器和 ARM Thumb 核心——全部由 .ent Kernel 和 .esn 场景写成,没有一行 Rust,每一个都有回放测试。

安全的路径就是强大的路径
Section titled “安全的路径就是强大的路径”- 权限是授予的。 Kernel 以运行会话的人授予的能力运行;文件只在允许的目录中读写。
- 每次改动先校验。 Kernel 或场景在替换任何东西之前都会被编译和检查;发布是原子的,并且会核对 Agent 上次看到的代数。
- 只有正确时才提交状态。 一帧的状态与文件写入只在整个求值成功时提交。
- 世界可观察。 任意端口可读、任意元素可追踪、任意节点可计时;一次运行就是一次回放,一次回放就是一个测试。

