Lua 5.3 w2 についての覚書

最近はLuaJITしか使ってないので、最新バージョンを追ってなかったのですが、

5.3のWork2についてさらっと。

変更点

変更点については以下のURLに少しだけ書かれています。

http://www.lua.org/work/doc/

☆ 64bit整数型のサポート / ビット単位の演算子の追加

特にゲーム作ってる人から ずーっと言われてた機能ですね。

個人的にはあまりLuaでサポートしてもらう必要性は感じてなかったけど。

ビット単位のオペレータは 普通に � | ~(単項でbitwise notと 二項でbitwise xor) と シフトが»と< <。シフトはビットシフトで符号ビットを考慮しません。 `> a = -9223372036854775808

a -9223372036854775808 a » 1 4611686018427387904

☆32bit数値サポート(Small Lua)の改善

Luaの標準の数値型は64bitのlong long int/doubleですが、32bit整数と32bit単精度浮動小数点数を使うLuaは Small Lua と呼ぶようになったようです。

以前はLUA_NUMBERというマクロをdoubleからfloatに変更していくつかの変換関数(マクロ)に手をいれてましたが

numberが整数と浮動小数点数の二種類になった事で変更されていました。

work2では luaconf.hによると以下の通りです。

LUA_INT_LONGLONG / LUA_INT_LONG

LUA_REAL_FLOAT / LUA_REAL_DOUBLE / LUA_REAL_LONGDOUBLE

お、これ見ると四倍精度浮動小数点数もサポートされているようですね。

UTF-8サポート

utf8というテーブルに関数が追加されています。追加モジュール無しでいいので楽ちんです。

ただ、あくまでlibraryの追加まででstringがutf-8に完全対応したわけではないみたい。patternも今まで通り。literal文字列に\uのエスケープシーケンスも追加されています。

数値のバイトストリーム化関数の追加

数値データをバイトストリーム(string)に変換するための関数が追加されています。

string.packint(n, size, “l” | “b”)

string.packfloat(n, size, “l” | “b”)

最後のlとかbはendianの指定。

endianといえば バイトコードがendian依存していたのって変わってないみたい。

バイトコードをダンプするときにデバッグ情報の削除が可能に

string.dump (function [, strip])

ってことで、stripにtrueを指定すると debug情報無しでdumpできるそうな。

userdataのuservalueが何でもOKになった

lua_setuservalue/lua_getuservalueは今までtableかnilしか設定できませんでしたが、なんでもOKになったようです。

今までlightuserdata使ってた場面で使いそうな気がするかな。

今のところこんな感じですね。整数型のサポートがいいなぁ。