一个在纯 Rust 中实现的无堆栈 Lua VM
项目目标,大致按降序排列: * 成为一个可行且有用的 Lua 解释器。 * 成为一种方便地将不受信任的 Lua 脚本放在沙箱中的方法。 * 对于来自不受信任脚本的 DoS 具有抵御能力(脚本不应能够导致解释器陷入慌乱或使用无限量的内存,并且应保证在某个有限时间内将控制权返回给调用者)。 * 成为一种将 Rust API 安全地绑定到 Lua 的方便方法,其绑定系统具有抵御异常和边缘情况的能力,并且具有能够安全地参与运行时垃圾收集的用户类型。 * 与 PUC-Rio Lua 的某个版本保持实用兼容。 * 不要过于缓慢(例如,避免那些会使解释器比 PUC-Rio Lua 更慢的抽象)。
您可以在 此博客文章 中阅读更多关于 piccolo 的设计(并尝试在实时 REPL 中使用它!)。piccolo 仍然是一个非常实验性的项目,预期在 1.0 之前会经常出现 API 问题。所有不兼容的 API 变更都会伴随着版本升级,但这些变更将非常普遍。
当前不安全的主要来源: * Lua 表的特别奇怪的要求需要使用 hashbrown 的低级 RawTable API。 * Userdata 需要不安全性,以允许使用安全接口对非"静态 userdata"进行下转换。 * 异步 Sequence 的实现需要不安全性,以将正常 Sequence 方法参数"隧道"到未来(这完全隐藏在安全接口后面)。 * 为了避免大型指针,需要不安全代码。
暂无开放 Issues,或尚未同步最近议题。