2020年6月29日(現地時間)、プログラミング言語「Lua」の最新バージョンとなる「Lua 5.4」がリリースされた。Luaは手続き型言語やオブジェクト指向言語、関数型言語などといった複数の特徴を併せ持つマルチパラダイムのプログラミング言語で、MIT Licenseのもとでオープンソースで開発されている。

Luaは拡張言語としてC言語のプログラムに埋め込んで実行されることを目的に設計されているため、高い移植性と組込みの容易性、そして軽量な動作といった特徴がある。

The Programming Language Lua

Lua 5.4は、2015年1月にリリースされたLua 5.3以来、およそ5年半ぶりの大型アップデートになる。バージョン5.4で追加・変更されたおもな機能としては、以下が挙げられる。

世代別ガーベジコレクタ

to-be-closed変数

const変数

userdata型が複数の値を持てるようになった

math.randomの新しい実装

警告システム

関数の引数および戻り値に関する新しいデバッグ情報

整数のfor文に関する新しい文法

UTF-8ライブラリが許容するコードポイント数の上限が2の32乗個に増加

中でも特徴的なのはto-be-closed変数で、これは通常のローカル変数のように動作しつつ、変数のスコープから外れる際に__closeメタメソッドが呼び出されて値がクローズされるというもの。通常のブロックの終了のほかに、breakやreturn、gotoによるブロックの終了、エラーによる終了などにも適用されるため、変数を安全に処理できるというメリットがある。

ガーベジコレクタについては、Lua 5.3まではインクリメンタルGCのみ提供されていたが、Lua 5.4では世代別GC(Generational GC)も追加された。2種類のGCはモードによって切り替える仕組みになっているので、用途に応じて適切な方を選ぶことができる。

そのほか、リファレンスマニュアルにはLua 5.3からLua 5.4にかけて非互換になった機能についてまとめている。この非互換性は適切なコンパイルオプションを使うことで回避できるが、それらのオプションはあくまでも移行のためのもので、将来的にはすべて削除されるので注意が必要とのことである。