Bindings for Other Languages
sol2/sol3 (header-only, modern, fast), LuaBridge, LuaBridge3, Kaguya, luabind (old)
mlua (Lua 5.1–5.4, LuaJIT, Luau; async support), rlua (deprecated in favor of mlua) lupa (embed Lua/LuaJIT in Python)
gopher-lua (pure Go VM), golua (cgo bindings) Fengari, Wasmoon (WebAssembly)
LuaJ (pure Java), LuaJava, luaj on Android NLua, MoonSharp node-lua, wasmoon
// sol2 example (C++17)
#include <sol/sol.hpp>
struct Player { std::string name; int hp = 100; void heal(int v) { hp += v; } };
int main() {
sol::state lua;
lua.open_libraries(sol::lib::base);
lua.new_usertype<Player>("Player", sol::constructors<Player()>(),
"name", &Player::name, "hp", &Player::hp, "heal", &Player::heal);
lua.script(R"(
local p = Player.new()
p.name = "Hero"
p:heal(25)
print(p.name, p.hp)
)");
int sum = lua.script("return 2 + 3");
}// mlua example
use mlua::{Lua, Result};
fn main() -> Result<()> {
let lua = Lua::new();
let add = lua.create_function(|_, (a, b): (i64, i64)| Ok(a + b))?;
lua.globals().set("add", add)?;
let v: i64 = lua.load("return add(2, 3) * 10").eval()?;
println!("{v}");
Ok(())
}