Piccolo - stackless Lua VM implemented in pure Rust

Piccolo, formerly known as luster, quietly resumed development in April 2023 after several years of hiatus. kyren, who also made rlua (since forked and continued as mlua), returned to piccolo after making a breakthrough in the underlying gc-arena crate. Both projects are now used (with care) in production, such as by Fish Folk for game scripting and by Ruffle for its ActionScript VM.

Today marks the completion of two major releases: piccolo v0.3.0 and gc-arena v0.5.0 :tada:

kyren is on a social media break, but I got permission to post on her behalf. She can be reached on the #piccolo channel in the Spicy Lobster Discord server.

I can‘t answer any questions that may come up here, but they’re still appreciated since they might still be read and consequently incorporated into docs or similar. And if any Lua/compiler savvy rustaceans wanna venture some guesses about how what‘s going on here, feel free!

Piccolo project goals, in roughly descending priority:

  • Be an arguably working, useful Lua interpreter.
  • Be an easy way to confidently sandbox untrusted Lua scripts.
  • Be resilient against DoS from untrusted scripts (scripts should not be able to cause the interpreter to panic or use an unbounded amount of memory and should be guaranteed to return control to the caller in some bounded amount of time).
  • Be an easy way to bind Rust APIs to Lua safely, with a bindings system that is resilient against weirdness and edge cases, and with user types that can safely participate in runtime garbage collection.
  • Be pragmatically compatible with some version(s) of PUC-Rio Lua.
  • Don't be obnoxiously slow (for example, avoid abstractions that would make the interpreter fundamentally slower than PUC-Rio Lua).
6 Likes