Lua 运行时
Wippy 的主要计算运行时,针对 I/O 密集型和业务逻辑工作负载进行了优化。代码运行在隔离的进程中,通过消息传递进行通信——无共享内存,无锁。
Wippy 被设计为多语言运行时。虽然 Lua 是主要语言,但未来版本将通过 WebAssembly 和 Temporal 集成支持其他语言,用于计算密集型或专用工作负载。
进程
你的 Lua 代码运行在进程中——由调度器管理的隔离执行上下文。每个进程:
- 拥有自己的内存空间
- 在阻塞操作时让出(I/O、通道)
- 可以被监控和监管
- 可扩展到每台机器数千个
local pid = process.spawn("app.workers:handler", "app:processes")
process.send(pid, "task", {data = "work"})
参见 进程管理 了解生成、链接和监管。
通道
Go 风格的通道用于通信:
local ch = channel.new() -- 无缓冲
local buffered = channel.new(10)
ch:send(value) -- 阻塞直到被接收
local val, ok = ch:receive() -- 阻塞直到就绪
参见 通道 了解 select 和模式。
协程
在进程内生成轻量级协程:
coroutine.spawn(function()
local data = fetch_data()
ch:send(data)
end)
do_other_work() -- 立即继续
生成的协程由调度器管理——无需手动 yield/resume。
Select
处理多个事件源:
local r = channel.select {
inbox:case_receive(),
events:case_receive(),
timeout:case_receive()
}
if r.channel == timeout then
-- 超时
elseif r.channel == events then
handle_event(r.value)
else
handle_message(r.value)
end
全局变量
这些总是可用的,无需 require:
process— 进程管理和消息传递channel— Go 风格的通道os— 时间和系统函数coroutine— 轻量级并发
模块
local json = require("json")
local sql = require("sql")
local http = require("http_client")
可用模块取决于记录配置。参见 记录定义。
外部库
Wippy 使用 Lua 5.3 语法,带有受 Luau 启发的渐进类型系统。类型是一等运行时值——可调用以进行验证,可作为参数传递,可内省——取代了对 Zod 或 Pydantic 等模式库的需求。
不支持外部 Lua 库(LuaRocks 等)。运行时提供自己的模块系统,带有用于 I/O、网络和系统集成的内置扩展。
对于自定义扩展,参见内部文档中的 模块。
错误处理
函数返回 result, error 对:
local data, err = json.decode(input)
if err then
return nil, errors.wrap(err, "decode failed")
end
参见 错误处理 了解模式。