跳转至

支持范围与已知问题

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?;
home >> ticks.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 版本和最小可复现程序。