Luau – 高速・軽量・安全で段階的型付けを備えたLuaベースのスクリプト言語
(luau.org)- Luauは、Lua 5.1から派生した高速で安全、かつ段階的型付けをサポートする埋め込みスクリプト言語
- Robloxプラットフォームの複雑なゲームと大規模コードベースを支えるため、性能、言語ツール、型システムを強化しながら発展してきた
- 標準のLuaとは異なり、サンドボックス機能を備え、権限の異なるコードを並行して実行できるよう設計されている
- 構文はLua 5.1と互換性があるが、追加の構文拡張と**解析ツール(linter、型チェッカー)**を提供し、コード品質を高める
- 性能最適化、カスタムバイトコード、JIT対応などにより、LuaJIT級の実行速度を目指しており、Robloxを超えてさまざまな埋め込み環境でも活用の可能性が高い
Motivation(登場背景)
- 2006年ごろ、Robloxはゲームスクリプト言語としてLua 5.1を導入した
- 時間の経過とともにRobloxプラットフォーム上のゲームの複雑さが増し、チーム規模も拡大したため、既存Luaの限界を克服すべく言語と実装を大幅に改善した
- プラットフォームの成長に合わせて、性能最適化、使いやすさ、言語関連ツールの開発に多くの投資を行ってきた
- 特に2020年時点で100万行を超える大規模コードベースを管理する中で、段階的型システムの導入が不可欠であると認識した
- こうした必要性を背景に、RobloxはLuaから派生したLuauという言語を開発し、高速・軽量・安全でありながら段階的に型を適用できる機能を提供している
- 詳細はWhy Luauを参照
Luau概要
- LuauはLua 5.1をベースとする埋め込みスクリプト言語
- 高速で軽量なランタイムを提供
- 段階的型システムをサポートし、動的解析と静的解析を併用可能
- Roblox Studioに統合されており、
--!strictフラグで厳格モードを有効化できる - 開発者はLuau Creator DocsでRobloxと連携したドキュメントを確認できる
Sandboxing(サンドボックス機能)
- Luauは公開される標準ライブラリを制限し、追加のサンドボックス機能を提供する
- これにより、一般開発者が書いた非特権コードとプラットフォーム内部の特権コードを安全に並行実行できる
- そのため、標準のLuaとは異なる実行環境を持つ
- 詳細はSandboxの説明を参照
Compatibility(互換性)
- 可能な限りLua 5.1との後方互換性を維持しつつ、以降のバージョンの機能も一部取り入れている
- ただしLuauは、Luaのすべての設計判断を受け入れているわけではなく、Roblox特有のユースケースと制約を反映している
- Lua 5.1以降の機能の対応状況はCompatibilityドキュメントで確認できる
Syntax(構文)
- Lua 5.1の構文と完全互換
- さらに、現代的で親しみやすい構文拡張を提供し、開発の利便性を高めている
- 全体の構文はSyntaxドキュメントを参照
Analysis(解析ツール)
-
正しいコード記述を支援するため、スクリプト解析ツールを提供
-
構成要素:
- Linter: 一般的なエラーを検出
- Type Checker: 型を検証
-
luau-analyzeCLIツールで実行できる -
リントルールはLintドキュメント、型チェックのガイドはTypecheckドキュメントを参照
Performance(性能)
- パーサー、リンター、型チェッカーを含むカスタムフロントエンドと、最適化されたバイトコード、インタープリタ、コンパイラを提供
- 場合によってはLuaJITインタープリタと競合できる性能を発揮する
- x64・ARM64プラットフォームで手動JITコンパイラをサポートし、特定のプログラム性能を大幅に向上させられる
- 継続的にランタイムを最適化し、一部を書き直して効率を改善している
- 性能の詳細はPerformanceドキュメントで提供されている
Libraries(ライブラリ)
- 言語自体はLua 5.1の完全なスーパーセット
- 標準ライブラリでは一部の関数を削除し、新しい関数も一部追加している
- アプリケーションに組み込まれる際には、アプリ固有の拡張ライブラリにもアクセスできる
- ライブラリ全体のドキュメントはLibraryドキュメントで確認できる
1件のコメント
Hacker Newsの意見
--!strictを宣言したあとでも明らかな型違反が起きているのに、何のエラーや警告もなくコードが実行されて驚いた。期待した動作と違っていたluau実行ファイルで直接走らせても型チェックは適用されない。もし埋め込み環境で、すべてのコードに対してコンパイル前の型チェックを強制するようにすれば、期待どおり型エラーを捕まえる体験が得られる。これは数百万行のLua 5.1コードを一度にLuauへ移行したため、避けられない設計だ