lua-naka の使い方

コンセプトの説明
・C++およびboostにおいて、ユニコードはUCS(wchar_t)
 で扱われるのが好ましい。
 Lua言語においてはUCSでは互換性の問題が発生するのでまずい。
・Linuxにおいてはコンソールおよび標準入力はUTF-8が望ましい。
 WindowsにおいてはUCS2またはSHIFT_JIS(CP932)が望ましい。
これらの問題をストレートにクリアすると、
至る場所でコード変換が発生し、
Luaの持つ 軽い・速い というメリットが死ぬ。
したがって、以下の仕組みで動作するようにパッチを当てる。
・標準インターフェース上は、互換性を満たすように
 文字列はUTF-8としてふるまう。
・文字列オブジェクトのプロパティにキャッシュ領域へのポインタを持ち、
 遅延評価的に必要になった時だけ自動的にUCSへの変換が発生し、
 キャッシュが作成され、プロパティにリンクされる。
・キャッシュ領域はLuaのアロケーターの管理下に入る。
・作成されたキャッシュはガベージコレクタの動作の対象になった時に
 ガーベージコレクタによって回収される。
・Cインターフェースにはキャッシュの作成を指示し参照し
 wchar_t *を取得できるAPIが追加される。
Luaの言語仕様上、Stringの内容は不変であり
(言い換えれば代入によってのみ変化が発生する)、
そしてショートストリングは値が一致したときに共有される
という性質を持つため、変換回数は抑えられる。