このページの内容

8 – 以前のバージョンとの非互換性

ここでは、プログラムをLua 5.4からLua 5.5へ移行するときに遭遇する可能性のある非互換性を列挙します。

適切なオプション(ファイルluaconf.hを参照)を指定してLuaをコンパイルすれば、一部の非互換性を回避できます。ただし、これらの互換性オプションは将来すべて削除されます。互換性の問題は、そのオプションが削除されたときに生じることが少なくありません。そのため、機会があるときは、すべての互換性オプションを無効にしてコンパイルしたLuaでコードをテストしてみることを推奨します。これにより、新しいLuaバージョンへの移行が容易になります。

Luaの各バージョンでは、定数の数値や関数のマクロ実装など、プログラムのソースコード変更を伴わない形でC APIが変更される可能性があります。したがって、異なるLuaバージョン間でバイナリ互換性があると仮定してはいけません。新しいバージョンを使うときは、Lua APIのクライアントを必ず再コンパイルしてください。

同様に、プリコンパイル済みチャンクの内部表現はLuaの各バージョンで変更される可能性があります。プリコンパイル済みチャンクには異なるLuaバージョン間の互換性がありません。

公式配布物の標準パスは、バージョン間で変更される可能性があります。

8.1 – 言語の非互換性

  • 単語globalは予約語です。通常の名前として使わないでください。

    コンパイルオプションLUA_COMPAT_GLOBAL(luaconf.hを参照)はglobalを通常の単語にします。

  • forループの制御変数は読み取り専用です。変更する必要がある場合は、ループ本体で同じ名前のローカル変数を宣言してください。

  • __callメタメソッドの連鎖は最大15オブジェクトです。

  • エラーでは、エラーオブジェクトがnilの場合、文字列メッセージに置き換えられます。

8.2 – ライブラリの非互換性

  • ガベージコレクションのパラメーターは、オプション”incremental”と”generational”では設定しません。代わりに、この目的のための新しいオプション”param”があります。さらに、パラメーター自体にもいくつかの変更があります。

8.3 – APIの非互換性

  • lua_callと関連関数では、要求する結果数(nresults)の最大値は250です。さらに大きな値が本当に必要なら、LUA_MULTRETを使い、その後でスタックサイズを調整してください。以前、この制限は規定されていませんでした。
  • lua_newstateには第3引数として、文字列ハッシュ用のシードがあります。
  • 関数lua_resetthreadは非推奨です。これはlua_closethreadのfromをNULLとしたものと等価です。
  • 関数lua_setcstacklimitは非推奨です。この関数の呼び出しは単純に削除できます。
  • 関数lua_dumpは、writer関数の呼び出しを通じてスタックを保持する方法が変更されました。(以前のバージョンでは規定されていませんでした。)また、ダンプの終了を通知するためにwriter関数をもう一度呼び出します。
  • ガベージコレクションのパラメーターは、オプションLUA_GCINCとLUA_GCGENでは設定しません。代わりに、この目的のための新しいオプションLUA_GCPARAMがあります。さらに、パラメーター自体にもいくつかの変更があります。
  • 関数lua_pushvfstringは、エラーを発生させる代わりに報告するようになりました。