Luaプログラミング(初版)この初版はLua 5.0向けに執筆されましたが、後のバージョンと大きな違いはありません。
第4版ではLua 5.3を対象に対応しており、Amazonやその他の書店で購入できます。
この本を購入するとLuaプロジェクトを支援することができます。


24.3.1 – アプリケーションコードでのエラー処理

通常、アプリケーションコードは保護されていない状態で実行されます。アプリケーションコードはLuaによって呼び出されないので、Luaはエラー(つまり、setjmpを呼び出せない)をキャッチするための適切なコンテキストを設定できません。そのような環境では、Luaで「メモリ不足」などのエラーが発生すると、Luaにはできることがあまりありません。Luaはパニック関数を呼び出し、関数が戻るとアプリケーションを終了します。(lua_atpanic関数を使用して、独自のパニック関数を設定できます。)

すべてのAPI関数が例外をスローするわけではありません。lua_openlua_closelua_pcalllua_load関数はすべて安全です。さらに、他の関数のほとんどは、メモリ割り当ての失敗の場合にのみ例外をスローできます。たとえば、luaL_loadfileは、ファイル名の​​コピーのためのメモリが十分でない場合に失敗します。メモリが不足しても何もしないプログラムがいくつかあるので、これらの例外を無視する可能性があります。そのようなプログラムでは、Luaでメモリが不足した場合でもパニックになることはありません。

メモリ割り当ての失敗の場合でもアプリケーションを終了させたくない場合は、protected modeでコードを実行する必要があります。通常、ほとんど(またはすべて)のLuaコードはlua_pcallの呼び出しを介して実行されるため、保護モードで実行されます。lua_pcallは、メモリ割り当ての失敗の場合でもエラーコードを返し、インタープリタを整合した状態に保ちます。Luaとやり取りするすべてのCコードも保護したい場合は、lua_cpcallを使用できます。(この関数の詳細についてはリファレンスマニュアルを参照してください。Luaディストリビューションのlua.cファイルで使用方法の例を参照してください。)