PWE —— 用 4D 编写物理世界。

一个 Rust 微内核运行时 + 语言,用于确定性的、分布式的 4D 世界仿真——3D 空间,加上时间。

English license rust tests conformance RFCs repo

PWE 不是又一个物理玩具,而是一个基底:唯一权威的世界、统一的类型化中间表示、 一种语言——足以建模任何可写成耦合微分/差分方程的规律:重力与碰撞、化学动力学、 种群演化、电磁、热、声、波、机械臂,以及会走路的机器。

而且它的确定性可被证明:解释器是语义基准,JIT 必须与它每一步逐字节一致; 300+ 测试与 38 项符合性检查强制保证——零跳过。

World Model → WIR → Domain IR → EIR → 解释器 / JIT / AOT → Runtime → CPU / GPU / NPU / Edge / Cloud

60 秒上手

cargo build --release -p pwe-cli

# 一个类人形象在行走(62 部件:胶囊四肢、眼睛、手指)
./target/release/pwe compile cli/examples/humanoid.pwe -o humanoid.pweb
./target/release/pwe present humanoid.pweb --port 8000   # 打开 http://localhost:8000

# 脉冲在三维立方体中辐射——先 ⟳ Restart,再 ▶ Resume
./target/release/pwe compile cli/examples/wave3d.pwe -o wave3d.pweb
./target/release/pwe present wave3d.pweb --port 8000

# 一整个太阳系,实时
./target/release/pwe compile cli/examples/solar.pwe -o solar.pweb
./target/release/pwe present solar.pweb --port 8000

每个产物都是自描述、已校验的二进制(.pweb):重新编译、重新运行、重新发布—— 同样的字节,同样的世界。


PWE 的不同之处

常见引擎 PWE
一套固定的内置行为,供你配置 一种语言——把任何规律写成状态上的规则
"差不多确定性",靠约定信任 可证明的确定性——解释器 ≡ JIT,每一步断言
物理或化学或渲染*,分散在不同工具 同一世界上的对等域——物理、渲染、感知、AI、网络共享唯一事实源
2D/3D 场景 4D 基底——3D 空间 + 时间;网格场是体积的
一个你祈祷它稳定的黑盒 冻结、版本化的契约——37 份 RFC、规范字节、内容哈希
封闭的可视化 开放的实时查看器——3D 网页视口,Restart / Pause / Labels

世界是唯一权威的事实源。 实体是身份,组件是数据,系统是行为;一切权威变更都 经过 WorldTransaction。


一种语言,覆盖所有领域

PWE 的语言在所有学科里都是同一套——只有方程在变。

```pwe ignore world { gravity = (0, 0, 0) field heat { width = 32; height = 32; depth = 32; dx = 1.0 } # 一个 3D 网格场 entity body { state = (x = 1.0, vx = 0.0, temp = 353.15) } } systems { diffuse { field = heat; rate = 0.16 } # PDE:T += rate·∇²T update { on = body; dt = 0.1 vx = forces.spring_accel(2.0, x, 1.0) + forces.damping_accel(0.3, vx, 1.0) + 0.0 temp = thermal.radiative_cooling(temp, 293.15, 0.9, 1.0, 1.0, 700.0) + 0.0 } }


| 领域 | 在 PWE 中 |
| --- | --- |
| **力学 / 重力 / 碰撞** | `nbody`、`gravity`、`integrate`、`ground_contact`、`wall`、`force`、`linear`、`update` / `rk4` |
| **PDE 场(4D)** | `field` + `diffuse` / `poisson` / `wave`(热、电势、声、波) |
| **化学** | `std/chemistry`——完整元素周期表(Z = 1–118)、Arrhenius、动力学、pH |
| **热力学** | `std/thermal`——牛顿冷却、Stefan–Boltzmann、热传导 |
| **声学与光学** | `std/acoustics`、`std/optics`——声压级、多普勒、Beer–Lambert、菲涅尔 |
| **电磁** | `std/em` + `poisson`——库仑、洛伦兹、回旋、坡印廷 |
| **机器人** | `std/robotics`——正/逆运动学、PID、差速驱动 |
| **任何随机过程** | `random()`、`noise()`、`emit()`——有种子、可复放 |

**标准库**本身就是 PWE:`std/` 提供 `math`、`particles`、`forces`、`mechanics`、
`chemistry`(1–118)、`thermal`、`acoustics`、`optics`、`em`、`robotics`、`units`、
`control`——纯函数 + 具名命名空间的物理常量,可用 `--param` 覆盖。

---

## 展示 —— 让它动起来

每个都用 `pwe compile … -o out.pweb` 编译,再 `pwe present out.pweb`。

| 演示 | 是什么 |
| --- | --- |
| `humanoid.pwe` | 一个**62 部件的类人形象**在行走——胶囊四肢、面部细节、带指节的手指。 |
| `robot.pwe` | 一条由 `std/robotics` 正运动学驱动的**2 连杆机械臂**在摆动。 |
| `shapes.pwe` | **自定义形状**:组合体、凸八面体、显式面宝石、挤出的 **SVG** 星形。 |
| `wave3d.pwe` | 在立方体中辐射的 **3D 波**——半透明、按能量着色的球面壳向外扩散并衰减。 |
| `acoustics.pwe` | 驱动单极子产生的 **2D 声场**;探针记录到达延迟与 dB 电平。 |
| `solar.pwe` | **太阳系**实时:8 大行星 + 月球,公转兼自转。 |
| `flock.pwe` | 通过邻域查询**聚合并对齐**的鸟群。 |
| `domains.pwe` | 阻尼弹簧上的探针同时**辐射降温**——力 + 热 + 电磁 + 化学的组合。 |
| `spring/spring.pwe` | 多文件**模块**、参数、单位与计划事件(`--param k=16`)。 |
| `wave.pwe` | 一维线上的**正弦驻波**,画成按能量着色的曲线。 |
| `heat.pwe` | 二维网格上的**热扩散**(展开的 Gauss–Seidel 扫描)。 |
| `bounce.pwe` | 经典:**重力 + 地面接触**与弹性。 |

查看器按实体自身的声明渲染——`shape`、`size`、`color`、`opacity`、`glow`、
`label`;场渲染为等值面(2D/3D)或曲线(1D)。控件:**⟳ Restart**、
**⏸ Pause / ▶ Resume**、**🏷 Labels**。

---

## 语言一瞥

```pwe
world {
  gravity = (0, -9.81, 0)
  entity vehicle {
    position = (0, 8, 0)  velocity = (4, 0, 0)
    mass = 4  dynamic = true  box = (1, 0.5, 0.7)
  }
  entity ground { position = (0, -5, 0)  dynamic = false  box = (50, 5, 50) }
}
systems {
  gravity { gravity_y = -9.81; dt = 1/60 }
  integrate { dt = 1/60 }
  ground_contact { restitution = 0.6 }
}
  • 规则是赋值;积分要显式:slot = expr 是普通赋值;积分用 slot = slot + inte(rate)、inte slot = rate 或 slot += rate(显式欧拉)。 rk4 { inte slot = rate } 做 4 阶积分。inte(E) = dt·E;deriv(E) 是后向差商 (E−E_prev)/dt。
  • 是状态,不是脚本:命名槽、跨实体读取(@other.state.x)、属性 (@other.mass)、空间查询(neighbor_count、nearest_dist、neighbor_mean)。
  • Python 式模块:import "std/forces"、import "m" as x、 from "m" import f;包即目录;循环导入可解析。
  • 单位,可检查:可选的 [m/s^2] 标注 + 渐进式量纲分析——未标注即通配符。
  • 事件与调度:at(T)、periodic(P)、schedule(gate, delay, …)、 emit / last_event,以及 RFC-0048 事件日历 (event_count / next_event_* / pop_event / events_seen)——在步网格上 精确一次、确定性。
  • 有界控制流:repeat / for / break / continue 展开为直线式 EIR; 一个步内做牛顿迭代只需一行。
  • 会教学的诊断:编译失败打印 detail code 与出错源码行(javac 式脱字符)。

完整参考——词法、全部关键字、EBNF、运算符优先级,以及内建函数完整表—— 见 docs/lang-usage.zh.md。


可证明的确定性

这里的确定性不是口号,而是编译与运行的闸门:

  • 解释器 ≡ JIT:step_cross 在相同状态上跑两个后端,要求每一步的写入以及 事件/队列流都逐字节一致。
  • 解析解符合性:每个仿真都对照其闭式解断言(牛顿冷却、放射性衰变、 logistic 增长、开普勒轨道、简谐能量、作用-反作用、可逆动力学、墙面反射……)。
  • 快照 / 重放:状态哈希在多次运行与快照之间逐位复现。
  • 冻结契约:37 份 RFC 定义规范字节、模式与协议;符合性零跳过。

架构

application  →  world  →  IR  →  compiler  →  runtime  →  kernel  →  platform
Crate 职责
pwe-api no_std、零依赖的冻结契约(类型、trait、ABI、限制、detail code)。
reference/(pwe-reference) 语义基准:确定性世界、解释器、解释器支持的 JIT、AOT、语言前端。
conformance/ RFC-0029 报告运行器 + RFC-0030 场景。
cli/(pwe) 工具链:compile / run / present。

pwe-reference 内部:

模块 用途
lang PWE 语言:PEST 语法 → EIR、跨后端执行、诊断。
physics / physics_eir 确定性刚体仿真;可复用的 EirSystem 降级为类型化 EIR。
field / continuum 通用 4D 标量场:存储、拉普拉斯、Poisson、扩散、内容哈希。
present 3D 网页呈现层:帧 → JSON → 实时 Three.js 查看器。
eir / dominance / fence / aot 类型化 SSA IR、支配性校验、显式栅栏、AOT 工件编解码。
broadphase / cluster / channel / distributed 可互换宽相;类 BEAM 集群;跨运行时通道;分布式连续场。
simulation Input → Physics → Commit → RenderPrepare、跟随相机、带哈希快照。

快速开始

git clone git@github.com:open1s/qwe.git && cd qwe

cargo build --workspace
cargo test  --workspace          # 506 个测试
cargo run -p pwe-conformance     # RFC-0029:全部 PASS,无跳过

# 语言端到端:
cargo run -p pwe-reference --example language_demo

环境要求: Rust 1.81+。pwe-api 为 no_std 且零依赖;pwe-reference 仅依赖 pwe-api 与 PEST。


测试与符合性

套件 数量
运行时 / 语言单元测试 444
解析解符合性 21
属性测试 4
标准库测试 9
模糊测试(确定性) 2
集成 / 其它 26
合计 506

外加 pwe-conformance:38 / 38,零跳过。no_std 检查: cargo check -p pwe-api --no-default-features。


冻结契约

完整的冻结 v0.2 契约(RFC-0019 … RFC-0036):模式与规范化、WIR、EIR(类型化 SSA + 支配性)、内存与栅栏、世界事务、分布式所有权、快照与增量、运行时 ABI (include/pwe_abi.h)、JIT/AOT、渲染帧、符合性与最小剖面、组件 ABI、Domain IR、 能力、错误/限制、工件身份、交换信封。见 rfc/ 与 docs/rfc-alignment.md。


诚实的边界与路线图

内核边界之后有界、刻意的缺口——不是缺失的契约:

  • 后端:参考实现提供解释器(语义基准)、原生 JIT(热度提升——pwe run 默认启用,--no-native-jit 关闭)与 AOT(C 代码生成 + 系统 cc + dlopen), 全部与解释器差分验证,另有可选的线程化分派。GPU(WGSL / Metal,f32)正确性 已验证但还不是加速器:每步上传/回读使其今天慢于 CPU(见 #41,修法是设备常驻 场状态)。NPU 在路线图上;SIMD 评测后不采用(LLVM 已自动向量化 stencil 循环)。
  • 刚体:AABB、球、凸包(精确 SAT)、复合与高度场碰撞体,冲量、摩擦,距离/ 弹簧/焊接/铰接/球铰/移动关节,外加软体(布料/果冻,RFC-0040)与地面。更广的 关节族(cone/universal/gear)仍在推进——它们需要引擎尚未建模的转动状态。
  • 求值时统一为 f64:前端已支持 let 类型标注、整型常量折叠(: i64 下 7 / 2)与显式 i64(…) / f64(…) / bool(…) 转换(detail 89),但下降后的 寄存器与状态槽都是 double;int/bool 直达 EIR 寄存器为 RFC-0043、类型化数组 为 RFC-0044(均为 Proposed)。
  • 分布式与插件目前都在进程内:所有权、epoch、split-brain 拒绝与线格式已实现 并经回环通道测试;RFC-0006 的 QUIC 传输与 RFC-0016 的能力作用域插件宿主(函数 表已冻结、尚无人填充)是剩余工作。

实时清单见 tasks/todo.md。


仓库结构

路径 内容
pwe-api 冻结的 no_std 契约。
reference/ 语义基准 + JIT/AOT + PWE 语言。
conformance/ 符合性运行器。
cli/ + cli/examples/ pwe 工具链与可直接运行的世界。
std/ 标准库(纯函数模块)。
rfc/ · docs/ 冻结契约与使用指南。
include/pwe_abi.h 生成的 C11 ABI 头,与布局锁定。

许可证

Apache-2.0。Copyright 2026 Open1s。见 LICENSE。

世界是唯一的事实源。编写它。证明它。看着它动起来。

results matching ""

    No results matching ""