Lua 5.3 w2 についての覚書
最近はLuaJITしか使ってないので、最新バージョンを追ってなかったのですが、
5.3のWork2についてさらっと。
変更点
変更点については以下のURLに少しだけ書かれています。
☆ 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使ってた場面で使いそうな気がするかな。
今のところこんな感じですね。整数型のサポートがいいなぁ。