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

メタメソッドが追加されてて band / bor / bxor / bnot / shl / shr のメタメソッドが使われます。

それと整数系がサポートされた事で整数割り算が追加されていました。
演算子は //、メタメソッドは idivです。

> a = 4
> a / 3
1.3333333333333
> a // 3
1

☆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使ってた場面で使いそうな気がするかな。

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

Leave a Reply

Your email address will not be published. Required fields are marked *