支持范围与已知问题¶
roplat 仍在快速迭代,API 不稳定,暂不建议用于生产环境。本页列出 0.5.0 能依赖什么、有哪些限制,以及本站做了哪些验证。
可以依赖的¶
| 主题 | 0.5.0 的范围 |
|---|---|
| System | 编译期静态图:连线、端口装配、match 与图内 if、嵌套节律、拥有型域,受 Rust 类型与所有权约束 |
| 资源 | .resources.N 独立借用通道,同一资源的使用只按图依赖排序 |
| 生命周期 | 创建层启用与关闭;外部对象跨 drive 保留状态 |
| 执行结果 | 完成、合作式停止、失败;合作式退出等待在途工作并交回对象 |
| 放置 | 根作用域 spawn,周期与分支内同任务 join,hard 节律独立线程 |
| 通信 | 图内值传递;进程内 Latest、SpscQueue、SharedFrame;独立的 IPC 路径 |
| 多语言 | Rust 工程生成 C++ / Python 节点接口,System 与 Rhythm 仍由 Rust 组织 |
| 录制回放 | 成功周期的 Yield / Feed 录制、类型化比较、录制 Feed 作为数据源 |
限制¶
- 工具链:只在 nightly 上验证,尚未确定最低 Rust 版本;需要 Rust 2024 edition。
- 不是硬实时:静态图不保证截止时间;Tokio 定时器、操作系统调度、节点里的阻塞调用和外语运行时都会影响时序。hard 节律隔离线程,但还没有实时优先级和绑核参数。
- 不证明没有死锁:编译期分析覆盖支持的图形状,不覆盖节点内部的锁、外部协议的等待或任意用户代码。
- 退出保证有边界:panic、丢弃 Future、任务被 abort、不合作的阻塞调用不在对象归还保证内。软件停止请求不等于设备已经安全停止,设备的停止策略由驱动定义。
- 本机消息格式:
NativeMessage不校验bool等受限字段的位模式,非法值可能导致未定义行为;不要用它接收不可信的外部字节。格式是本机布局与端序,不能跨架构。 - Python:透明节点的布局在启用时缓存,周期内反复创建会重复支付初始化成本;桥接失败走 panic;不透明节点的旧交接方式不支持任意多在途调用和线程迁移。
- 录制回放:不记录旁路读取、对象内部状态、失败与停止的决定和外部副作用;回放运行真实代码。
- YAML 入口:能力小于 Rust DSL,没有嵌套节律、周期闭包和 match。
- 大图:约 150 个节点起 rustc 出现递归深度警告,约 200 个节点需要
#![recursion_limit = "256"]。 - 尚未提供:被放弃的 hard drive 的对象取回、事件队列满时覆盖最旧事件、旁路
Latest的新鲜度信息(序号或时间)、进程内子系统热替换。
已知问题¶
node? >> x.trigger 不传播错误。 在 0.5.0 中,把 ? 与 trigger 边写在同一句时,节点的 Err 不会提升为执行失败,后续步骤照常运行。node.output? >> x.trigger 同样如此。请分成两句:
? 后面接数据边(home? >> next;)和单独的 home?; 不受影响。
本站的验证¶
- 教程中的 9 个完整程序从页面 Markdown 中原样抽取,以 crates.io 上的 roplat 0.5.0 编译运行,输出与页面一致,并通过
cargo clippy -D warnings与rustfmt检查;所用工具链与依赖锁记录在仓库的validation/目录。 - 程序使用模拟设备,不涉及真实机器人、厂商 SDK、实时性能或跨平台验证。
- C++ / Python 流程、YAML 入口和静态图命令的说明来自 0.5 的构建工具与文档,本站尚未用 crates.io 包独立复现。
发现文档与实际行为不一致时,请到 roplat-pages 仓库反馈,附上 roplat 版本和最小可复现程序。