LuaJIT 3.0 提案された構文拡張

LuaJIT 3.0 提案された構文拡張

LuaJIT 3.0 が提案するモダン構文拡張

LuaJIT 3.0 は、他のモダン言語で見られる慣習的なプログラミングパターンに言語をより近づけることを目的とした一連の構文拡張を提案しています。これらの変更は、他言語から移行する開発者の摩擦を減らし、一般的な操作をより簡潔に表現できるようにすることを目指しています。

提案された構文変更

Cスタイルの論理演算子と三項演算子

LuaJIT 3.0 は、従来の Lua 演算子に慣習的な構文を導入することを提案しています。これには、単語ベースの andor&&|| といった記号で置き換える(または補完する)ことが含まれます。さらに、標準的な Lua の条件式に代わる、より簡潔な三項演算子(? :)の導入も検討されています。

複合代入演算子

この提案には、複合代入演算子(例: +=-=*=/=)の追加が含まれます。これらの演算子は、変数の更新をより簡潔に記述できるようにするもので、Playdate ハンドヘルドコンソールで使用されている Lua のバージョンなど、他の Lua 系実装ですでに採用されています。

ビット演算子の整合性

Lua 5.3 が 2015 年にビット演算子を導入したのに対し、LuaJIT は標準 Lua の進化に追随する形で同様の機能を取り入れようとしています。ただし、JIT コンパイル実装としての独自の軌道は維持されます。

コミュニティの視点と技術的議論

提案された変更は、言語のアイデンティティと開発者の利便性のバランスについて、開発者コミュニティ内で議論を呼んでいます。

言語アイデンティティへの懸念

一部の開発者は、C スタイルの構文を導入することは表面的であり、Lua の独自性を薄める可能性があると主張しています。批判者は、同じ操作を行う複数の方法(TIMTOWTDI - "There Is More Than One Way To Do It")を提供することは、根本的な言語問題を解決せずに複雑さだけを増やすと指摘しています。

"and&& に変えることで実際に何が得られるのか?... それは問題を解決しているわけではなく、Lua が Lua でなくなるだけです。"

三項演算子への代替案

一部のコントリビューターは、Luau(Lua の派生)で見られる if x then y else z 形式の式を好んでいます。賛同者は、このアプローチの方が読みやすく、特に elseif が必要な場合に入れ子にしやすいと主張しています。これは x ? y : z 構文と比較した意見です。

"Lua‑alikes" のエコシステム

観察者は、主要バージョン間の厳密な互換性が欠如していることが、さまざまな "lua‑alikes" の多様なエコシステムを育んできたと指摘しています。言語が実装しやすいため、さまざまなプロジェクトが独自の構文拡張を持つ特化版 Lua を作成し、統一されたライブラリエコシステムよりも特定のユースケースを優先しています。

実装への影響

これらの構文変更は、言語の代替実装を構築する者に新たな課題をもたらします。例えば、Lua 5.1 から 5.5 までの複数バージョンをサポートしようとする Rust ベースの Lua 実装者は、LuaJIT の異なる構文拡張がクロスバージョンの互換性を確保することをより困難にしていると感じています。

Sources