Luaで変数を定数として利用する際のコスト

Luaで定数を使用したいと考えています。今さら気づいたんですが、Luaには定数ラベルがないんですよね…。
コードの可読性以外にCのプログラムで定数ラベルを利用する際の利点は、

  • 値が書き換えられる危険性がない
  • デバッグ時に数値ではなくラベルで表示される(enumの場合はですが)
  • 実行時のコストが低い

といったところでしょうか。
Luaで定数ラベルを実現しようとすると、変数を使うしか選択肢がなさそうです。変数は小文字、定数ラベルとして使用する変数は全部大文字といったような規則を設け、Luaスクリプトを書く際に注意すれば、値を書き換えてしまう危険性は減ります。その他にもいろいろ工夫をすれば、値を書き換えられたときにエラーを出すような形もできるようですし。
デバッグ時のラベル表示はどうにもならないとして、問題は実行時のコスト。変数である以上、参照するたびに参照したい変数名をスタックにプッシュして、それを検索して、データを整数に変換するというコストが発生します。本来の定数であれば、そのままオペランドに持っていけるかレジスタにコピーする程度のコストなのに!
…まあ、速度面のコストは我慢できます。速度が問題になる箇所ではLuaを使わなければいい話ですし。僕にとっての大きな問題は、容量コスト。変数名の文字列をそのままシンボルとして持つため、定数ラベルが多ければ多いほど、定数ラベル名が長ければ長いほど、メモリを消費します。定数が1000個とか10000個とかになると結構ばかにならないです。識別しやすくするために長いラベル名を使うことが多いですし。定数ラベルというものがないので、バイトコードコンパイルしたときもシンボル名としてラベルの文字列がそのまま埋め込まれます。結果、できあがったバイナリファイルも結構なサイズに。。。
解決策を考えてみたのですが、独自に拡張して定数ラベルを導入するか、コンパイル時に定数ラベルを定数値に置き換える方法くらいしか思い浮かびませんでした。Cコンパイラプリプロセス処理のように、コンパイル前に定数ラベルが参照されている箇所を定数値に置換するってわけです。…あれ、結構いい方法かもしれません。真っ当にやると面倒ですが、定数ラベルの定義方法や名前に規則を持たせれば、基本的に置換だけになるのでとてもシンプル。検討する価値ありです。