Luaランタイム
Luaランタイム
Section titled “Luaランタイム”WippyのプライマリコンピュートランタイムはI/Oバウンドおよびビジネスロジックワークロード向けに最適化されています。コードはメッセージパッシングで通信する分離されたプロセス内で実行されます—共有メモリもロックもありません。
Wippyはポリグロットランタイムとして設計されています。Luaがプライマリ言語ですが、将来のバージョンではWebAssemblyおよびTemporal統合を通じて、計算集約型または特殊なワークロード向けの追加言語をサポートする予定です。
Luaコードはプロセス内で実行されます—スケジューラによって管理される分離された実行コンテキストです。各プロセスは:
- 独自のメモリ空間を持つ
- ブロッキング操作(I/O、チャネル)でyieldする
- 監視およびスーパーバイズ可能
- マシンあたり数千にスケール
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
Section titled “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)endrequire なしで常に利用可能で、modules: に記載する必要はありません:
process- プロセスのスポーン、メッセージ送信、監視、リンクchannel- Go形式チャネルpayload- エントリの入力 payloadprint、subscribe、unsubscribe- ロギングと pub/subos、table、math、string、coroutine、errors- 標準ライブラリ
その他はすべて require() で読み込み、エントリの modules: 許可リストに含める必要があります:
local json = require("json")local sql = require("sql")local http = require("http_client")利用可能なモジュールはエントリ設定に依存します。エントリ定義を参照。
外部ライブラリ
Section titled “外部ライブラリ”Wippyは漸進的型システムを持つLua 5.3構文を使用し、Luauにインスパイアされています。型はファーストクラスのランタイム値—検証のために呼び出し可能、引数として渡すことが可能、イントロスペクション可能—ZodやPydanticのようなスキーマライブラリの必要性を置き換えます。
外部Luaライブラリ(LuaRocksなど)はサポートされていません。ランタイムはI/O、ネットワーキング、システム統合のための組み込み拡張を持つ独自のモジュールシステムを提供します。
カスタム拡張については、internalsドキュメントのモジュールを参照。
関数はresult, errorペアを返します:
local data, err = json.decode(input)if err then return nil, errors.wrap(err, "decode failed")endパターンについてはエラー処理を参照。