Upload
yuki-tamura
View
13.999
Download
0
Embed Size (px)
DESCRIPTION
Python Hack-a-thon #3でLuaについて発表したときの資料です
Citation preview
最速の言語Lua~ベスト・オブ・組み込み言語~
2010年1月23日土曜日
自己紹介?Name:
Isoparametric(イソッパ)Blog:
神様なんて信じない僕らのためにhttp://d.hatena.ne.jp/Isoparametric/
2010年1月23日土曜日
はじまりはじまり一部、某世界一言語トークスby Python
の関係者にはご迷惑をおかけしますがご了承ください
2010年1月23日土曜日
LuaLua(ルア)は、リオデジャネイロ・カトリカ大学の情報工学科コンピュータグラフィックステクノロジーグループ TeCGraf
によって設計開発された手続き型言語である。手続き型言語の他、オブジェクト指向、関数型、データ駆動型としての要素も可能となっており、近年はゲーム産業などでの普及が加速している。Luaという名前は、ポルトガル語で月を意味する。Cのホストプログラムに組み込まれることを目的に設計されており、高速な動作と、高い移植性、組み込みの容易さが特徴である。いったんバイトコードにコンパイルされ、Lua VM で実行される。また、MIT Licenseのもと配布されているため商用プロダクトにも組み込みやすい点も高く評価されている。Luaの特徴としては、汎用性が高いが比較的容易に実装が可能である、というものである。実際のところLuaは、オブジェクト指向などといった他の要素としての働きを明白にはサポートしていないが、サポートしていない範囲においても容易に拡張が可能である。また前述のような、動作の高速性や優れた移植性なども大きな特徴である。文法的な特徴としては、Pascalによく似た構文を採用していること、コルーチン(協調的マルチタスク)のサポート、関数を変数として扱えることなどが挙げられる。
Luaはいわゆる汎用スクリプト言語であり、特定の用途に限定されない性質を持つが、同じく汎用スクリプト言語であるPythonやRubyと比較して高速に動作する。これはLuaの理念である、簡素、高効率、高移植性を目指した実装の産物である。また、Luaにおけるテーブル(連想配列)の実装はかなり最適化されており、特にキーに数値のみを使用した場合は、単純な配列としてさらに高速に動作するようになる。Lua5.0以前はメモリ管理にマーク&スイープ方式のガベージコレクション(GC)が使用されていたが、Lua5.1ではメモリ管理にインクリメンタルGCが採用され、リアルタイム用途における性能の改善が図られている。 なお、Pythonは参照カウント方式、Rubyは主にマーク&スイープ方式のGCを採用しているが、GCの実装形態もLuaの高速動作および高リアルタイム性能に一役買っている。また、LuaをC++言語で記述されたホストプログラムへ組み込むための省力化ツールとして、 tolua++、Luabind(ともにライセンス形態はMIT License)などが開発されている。2010年1月23日土曜日
LuaLua(ルア)は、リオデジャネイロ・カトリカ大学の情報工学科コンピュータグラフィックステクノロジーグループ TeCGraf
によって設計開発された手続き型言語である。手続き型言語の他、オブジェクト指向、関数型、データ駆動型としての要素も可能となっており、近年はゲーム産業などでの普及が加速している。Luaという名前は、ポルトガル語で月を意味する。Cのホストプログラムに組み込まれることを目的に設計されており、高速な動作と、高い移植性、組み込みの容易さが特徴である。いったんバイトコードにコンパイルされ、Lua VM で実行される。また、MIT Licenseのもと配布されているため商用プロダクトにも組み込みやすい点も高く評価されている。Luaの特徴としては、汎用性が高いが比較的容易に実装が可能である、というものである。実際のところLuaは、オブジェクト指向などといった他の要素としての働きを明白にはサポートしていないが、サポートしていない範囲においても容易に拡張が可能である。また前述のような、動作の高速性や優れた移植性なども大きな特徴である。文法的な特徴としては、Pascalによく似た構文を採用していること、コルーチン(協調的マルチタスク)のサポート、関数を変数として扱えることなどが挙げられる。
Luaはいわゆる汎用スクリプト言語であり、特定の用途に限定されない性質を持つが、同じく汎用スクリプト言語であるPythonやRubyと比較して高速に動作する。これはLuaの理念である、簡素、高効率、高移植性を目指した実装の産物である。また、Luaにおけるテーブル(連想配列)の実装はかなり最適化されており、特にキーに数値のみを使用した場合は、単純な配列としてさらに高速に動作するようになる。Lua5.0以前はメモリ管理にマーク&スイープ方式のガベージコレクション(GC)が使用されていたが、Lua5.1ではメモリ管理にインクリメンタルGCが採用され、リアルタイム用途における性能の改善が図られている。 なお、Pythonは参照カウント方式、Rubyは主にマーク&スイープ方式のGCを採用しているが、GCの実装形態もLuaの高速動作および高リアルタイム性能に一役買っている。また、LuaをC++言語で記述されたホストプログラムへ組み込むための省力化ツールとして、 tolua++、Luabind(ともにライセンス形態はMIT License)などが開発されている。
Wikipedia 見といて!!
注意:パクリです
2010年1月23日土曜日
1993年にリオデジャネイロ・カトリカ大学のTecgrafというグループが設計開発しました
Tecgrafは情報工学科コンピュータグラフィックステクノロジーグループだそうです
Luaとはポルトガル語で「月」を意味しています
スクリプト言語の中で最速の中の一つ!
C -> Lua -> Cなんて感じで既存の環境を拡張できる高い拡張性が売り!
2010年1月23日土曜日
某世界一言語トークスでPythonについて語った紅い人風に言うと
2010年1月23日土曜日
Pythonのように動的型付けのLLで、Cを簡単に拡張できて、自分自身もCで拡張でき、最速のLLで、非常にシンプルかつ強力、オブジェクト指向だってできるし、ANCI Cだけで書かれているのでCコンパイラがあればコンパイルでき、制御可能なインクリメンタルGCも持っていて、JavaScriptのprototype的な事もできる言語がLua
2010年1月23日土曜日
公式サイト曰く
2010年1月23日土曜日
Lua は強健な言語で、様々な採用実績があります
Luaは速いです
Luaはポータブルです
Luaは組み込むことができます
Luaはパワフルですが、シンプルです
Luaは小さいです
Luaはフリーです(MIT license)2010年1月23日土曜日
Luaのために作られたポスターですhttp://www.schulze-mueller.de/download/lua-poster-090207.pdf
2010年1月23日土曜日
Luaのために作られたポスターですhttp://www.schulze-mueller.de/download/lua-poster-090207.pdf
こんな環境でも動くんです!!(苦労はあると思うけどね)
2010年1月23日土曜日
あ誤
良 る解
く
*世界一言語トークスbyPythonのパクリです
2010年1月23日土曜日
2010年1月23日土曜日
たまに本気でそういうことを言う人がいますが当たり前なので気にしない
2010年1月23日土曜日
はい、冷静にこんな感じで「十倍以上遅いですが何か?」
2010年1月23日土曜日
一言で言うと非常に使いやすい言語ですオススメ!
2010年1月23日土曜日
採用実績は?組み込みシステム、モバイルデバイス、Webサーバ、ゲームなど、エトセトラエトセトラ
公式サイト曰く「Adobe's Photoshop Lightroom」や「ブラジルのデジタルテレビのGinga middleware」ゲームの「World of Warcraft」
高速で小さい言語なので非常に組み込みやすいです
グルー(糊)言語としても使われますよ
2010年1月23日土曜日
VSPython Lua
2010年1月23日土曜日
VSPython Luaごめん、嘘
2010年1月23日土曜日
言っておいてなんですが、比べる意味はあまりないです
一緒に使うこともあるかもしれませんが、あまりないかと思います(しかし、PerlやRubyと一緒に使われた事があるらしい)
日常で使うならPythonの方が色々できるでしょう! でも組み込みならLua!
ただ、Pythonも組み込み言語として使われますよね
Mayaとか、Inkscapeとか、ツールに組み込み易いのがPythonで、アプリに組み込み易いのがLuaとか思って戴けるといいね!
2010年1月23日土曜日
そういえばPy(ryとかいう言語が少ないとかいう事で有名な予約語Py(ry 2.6: and as assert break class continue def del elif else except exec finally for from global if import in is lambda not or pass print raise return try while with yield
Lua 5.1: and break do else elseif end false for function if in local nil not or repeat return then true until while
比べることすらおこがましい! 31 vs 21
だからどうだということはありませんが! 2010年1月23日土曜日
具体的なLuaの利点中間コードによるVM実行で高速、ミニマム(VMはレジスタベース)高速なハッシュテーブル柔軟な動的型付けコルーチンをサポートインクリメンタルGC
クロージャ
冗談は置いておいて
2010年1月23日土曜日
レジスタベース?
JavaVMも.NETのVMもスタックベース、というか伝統的なVMはほぼスタックベース
Perl6がレジスタベースだそうな
Lua曰く、広く使用される初めてのレジスタベースVMだろう!!
2010年1月23日土曜日
今日サクッと紹介すること
Lua言語構文の紹介
Luaのコルーチン
LuaとCとの連携時の注意点とか
2010年1月23日土曜日
はじめてのLua
2010年1月23日土曜日
print(“Hello World”)
% lua hello.lua
ハロワとか参考にならんし……
2010年1月23日土曜日
-- 数値を入力させ階乗を求めるコードfunction fact (n) if n == 0 then return 1 else return n * fact(n-1) endend
print("enter a number:")a = io.read("*number")print(fact(a))
2010年1月23日土曜日
ざっと構文いってみようソースみてもよくわからんし
2010年1月23日土曜日
コメントスタイル
2010年1月23日土曜日
コメントスタイル-- 行コメント
2010年1月23日土曜日
コメントスタイル-- 行コメント--[[ブロックコメント]]
2010年1月23日土曜日
コメントスタイル-- 行コメント--[[ブロックコメント]]
キモい?--[[print("Hello!!")--]]↓よくある小技----[[print("Hello!!")--]]
2010年1月23日土曜日
コメントスタイル-- 行コメント--[[ブロックコメント]]
キモい?--[[print("Hello!!")--]]↓よくある小技----[[print("Hello!!")--]]実に余談
--[=[...]=]のように[[と]]の間に好きな数の=をいれ対応する[[と]]を区別できる
2010年1月23日土曜日
型nil数値(number)ブール値(boolean)文字列(string)テーブル(table)関数(function)ユーザーデータ(userdata)スレッド(thread)
2010年1月23日土曜日
nil
nilは型であって、その値は勿論nilですグローバル変数を消去したりするには参照を切る==nilを代入すればいいです(ただしGCの回収対象になるだけ)何も代入されていない変数の初期値は
nilです
2010年1月23日土曜日
ブール値
条件式ではnilとfalseだけが「偽」です。0や空文字列はtrueですよー
2010年1月23日土曜日
数値
通常の数値は実数(倍精度浮動小数点)です整数型はありません
実はこれ環境によって不便なことも整数型を使うようにするPatchもありますが……
また、設定でfloatやlongを使うこともできます2010年1月23日土曜日
文字列
Luaでも文字列は文字列です(連続した文字です)
ヌル文字終端ではないので、0を含んだ任意の文字コードを格納できます
これは、任意のバイナリデータを文字列として扱えるということですちなみにimmutable(不変値)です
“文字列” ‘文字列’ -- シングルかダブルクォート
2010年1月23日土曜日
文字列連結が .. なのは独特
a = "1" + "1"をすると型変換で2になっちゃうb = "a" + "b"はエラーになる
b = “a” .. “b”が正解
2010年1月23日土曜日
Luaを柔軟にするテーブル
2010年1月23日土曜日
テーブル==ハッシュテーブル概ねそういう理解で良いんですが
2010年1月23日土曜日
そう、Luaで唯一のデータ構造なんです配列もレコードもテーブルで表現できるので
ないんです2010年1月23日土曜日
唯一といっても配列はほしくね?いえ、テーブルは配列としても使えるんです!ただし、インデックスは1から始まります
0から始めてはいけません配列のときだけ#(長さ)演算子が使えますまた、モジュールやパッケージの表現にも
テーブルが使われています
2010年1月23日土曜日
唯一といっても配列はほしくね?いえ、テーブルは配列としても使えるんです!ただし、インデックスは1から始まります
0から始めてはいけません配列のときだけ#(長さ)演算子が使えますまた、モジュールやパッケージの表現にも
テーブルが使われています配列のように使うと配列のようにデータを保持する最適化が入りますそこまでして配列をいれたくない!
2010年1月23日土曜日
これがLuaテーブルだ!
Header
key value“x” 9.2nil
value100200300nil
わざわざ別々に持つ!!!でもインデックスは1からだよ
忘れないで!2010年1月23日土曜日
関数関数はファーストクラス
(第一級オブジェクト)な値ですなので変数に関数を格納したり、
引数に渡したり、戻り値として返したりできます関数にはLua関数とC関数があり、
高効率が必要ならCで書けば良いんです2010年1月23日土曜日
関数には、何個引数を渡しても良いし、何個返り値を戻してもいいです
フリーダム!足りなかったりするとそれはnilになりますし、
余分だったりすると捨てられます何個引数が渡ってくるかわからないとき可変長引数 ... なんてものもありますこいつの正体もテーブルです
2010年1月23日土曜日
ユーザーデータとスレッドユーザーデータはCの任意のデータ型をLuaの変数に格納するためのものです代入と等価性テスト以外に、
事前に定義されている操作はありません新しい型を追加するために使います
スレッドはコルーチンのところでやりますね
2010年1月23日土曜日
localとdo~endLuaの変数は何も指定しないとグローバル変数になりますそこでキーワードlocal
ローカルのスコープは宣言されたブロックで、ブロックは制御構造のボディ、関数のボディ、チャンク=実行単位(変数
が宣言されているファイルもしくは文字列)になります
do -- do~endでブロック local a = 1 print(a) -- 参照できるendprint(a) -- 参照できない
2010年1月23日土曜日
算術演算子+(加算)-(減算)*(乗算) /(除算)^(累乗)%(余剰)単項-(符号反転)
関係演算子< > <= >= == ~=等価性はテーブル、ユーザデータ、関数の場合に参照が等しいかを見るので注意!
論理演算子and or notだけで、短絡評価ですよ
2010年1月23日土曜日
制御構文if、while、repeat、for
面白くないのでザッとね、ザッと
2010年1月23日土曜日
if
2010年1月23日土曜日
if op == “+” then r = a + belseif op == “-” then r = a - belseif op == “*” then r = a * belseif op == “/” then r = a / belse error(“invalid operation”)end
if
2010年1月23日土曜日
while
2010年1月23日土曜日
local i = 1while t[i] do print(t[i]) i = i + 1end
while
2010年1月23日土曜日
repeat
2010年1月23日土曜日
-- 空行以外の行が入力されたらそれを表示repeat line = io.read()untile line ~= “”print(line)-- 特色として、ループ内のlocal変数を条件部で参照できますlocal sqr = x/2repeat sqr = (sqr + x/sqr)/2 local err = math.abs(sqr^2 - x)untile err < x/10000 -- errを参照
repeat
2010年1月23日土曜日
for
2010年1月23日土曜日
for-- 数値形式for
for i=10,1,-1 do -- 初期値、上限値、増分値 print(i)end
-- ジェネリックfor
for i,v in ipairs(array) do print(v)end-- ジェネリックforはイテレータ関数が返す要素を全て走査します(この場合はipairs)
2010年1月23日土曜日
注意点breakとreturnで制御から抜けられますswitchはないよ!continueはないよ!(えどうもbreakとreturnで十分だろ? と考えているらしいcontinueを追加するPatchとかあるです隠してたけどビット演算がありません ライブラリはあるんですけど(5.2で標準ライブラリに!)
2010年1月23日土曜日
長くなるのでそろそろ割愛
2010年1月23日土曜日
2010年1月23日土曜日
コルーチン(co-routine)?
2010年1月23日土曜日
子・ルーチン?
2010年1月23日土曜日
違います
2010年1月23日土曜日
接頭辞co-は協調を意味
2010年1月23日土曜日
コルーチン(co-routine)は複数の実行スレッドを持つという意味でスレッドと似ています
独自のスタック、独自のローカル変数、独自のプログラムカウンタを持ちます
明示的な処理の継続/中断が可能です
その一方でグローバル変数などを他のコルーチンと共有します
2010年1月23日土曜日
スレッドとの大きな違いは、マルチスレッドではスレッドが並列実行されるのに対し、コルーチンは協調的に動作します
複数のコルーチンは、同時に1つのコルーチンしか動きません
コルーチンの実行が中断するのはコルーチンが明示的に中断を要求したときだけです
2010年1月23日土曜日
コルーチンはライブラリで実装されています
……が、CAPIからも作成でき、非常に便利で重要な機能です
coroutine.createcoroutine.resumecoroutine.runningcoroutine.statuscoroutine.wrapcoroutine.yield で構成されます(Lua側)
2010年1月23日土曜日
コルーチンは4つの状態を持ちます。これはcoroutine.statusで調べられます
suspended(中断)=初期状態
running(実行中)
dead(終了)
normal(通常)
2010年1月23日土曜日
co = coroutine.create( function () print("start") coroutine.yield() -- 中断 print("resume") end)-- co のtypeはthreadになりますcoroutine.resume(co) -- 開始coroutine.resume(co) -- 継続
--> start--> resume
こんな感じで使います
2010年1月23日土曜日
co = coroutine.create( function () print("start") coroutine.yield() -- 中断 print("resume") end)-- co のtypeはthreadになりますcoroutine.resume(co) -- 開始coroutine.resume(co) -- 継続
--> start--> resume
co = coroutine.create( function () print("start") local c = coroutine.create( function () print("nest coroutine start") coroutine.yield() print("nest coroutine resume") end ) coroutine.resume(c) coroutine.resume(c) coroutine.yield() print("resume") end)coroutine.resume(co) -- 開始coroutine.resume(co) -- 継続
こんな感じで使います
ネストもできるよ
2010年1月23日土曜日
croutine.createで生成する
croutine.resumeで開始再開する
croutine.yieldで中断する
最後まで実行したら終了
外部から終了させることはできない
2010年1月23日土曜日
ゲームだったらキャラクタにつき1スレッドとか持ってもいいし、1行動1スレッドでも良いし、イベントをコルーチン管理してもいい
……というか並列実行するものなら何でも使える
好きに使うのが正義っす
コルーチンってどう使う?
2010年1月23日土曜日
CとLuaのマリアージュどうやって連携するの?
2010年1月23日土曜日
スタック置き場C Lua
関数
文字列
文字列
数値実行
Lua空間にあるスタック置き場を使ってやりとりします
2010年1月23日土曜日
スタック置き場C Lua
関数
文字列 文字列
数値
CはLuaに呼んで欲しい関数とパラメータをスタックにおきます
実行
2010年1月23日土曜日
スタック置き場C Lua
関数
文字列
文字列
数値
LuaはCから依頼されるとスタックにあるものを使って実行します
実行
2010年1月23日土曜日
スタック置き場C Lua
関数
文字列
文字列
数値
LuaはCから依頼されるとスタックにあるものを使って実行します
実行
2010年1月23日土曜日
スタック置き場C Lua
関数
文字列
文字列
数値
実行が終わるとLuaは戻り値をスタックに詰みます
実行
2010年1月23日土曜日
Lua関数呼び出しに関してはラッパークラスを書くのが正解です
バインダを自動生成するプロダクトに任せると勝手にやってくれます
スタックはデフォルト20スロットですが、スタックを載せたままにしておくと直ぐ枯渇するので、なるべくC側でスタックを戻します
いちいちスタックを処理するコードを書くの?
2010年1月23日土曜日
実際に組み込んでみて編感想つーかなんつーか
2010年1月23日土曜日
意外とメモリを食う
ばりばりmalloc/free/reallocする
バインドが大変
デバッグが大変
動的エラーが大変
2010年1月23日土曜日
食うといっても数百KByteなんだけど
C関数を増やしていくだけでメモリを食ってしまう→関数名がキー、関数がエントリとなってテーブルが大きくなるから
対策として、リードオンリーテーブルを追加するLTR (Lua Tiny RAM) Patchなんてものがあります
意外とメモリ食い?
2010年1月23日土曜日
ばりばりアロケート
オブジェクトを生成破棄することが多いのでアロケートは頻繁
できるだけ小規模なアロケートに強いアロケータを使おう
自分はdlmallocを使いました
2010年1月23日土曜日
バインドが大変手でバインドを書くと大変面倒なので、バインドを自動化してくれるものを使いましょう
tolua++とか、luabindがあります
tolua++はソースの自動生成の部分がLuaで書かれていてカスタムも容易です
C++のクラスとかもバインドできますよ
2010年1月23日土曜日
デバッグが大変
専用のデバッガがないとprintfデバッグだけに
デバッグ・ライブラリがあるのでうまく使いましょう
Windowsだとデバッガ幾つかあるよ
2010年1月23日土曜日
動的エラーが大変動的言語なので仕方がないことですが、多くのエラーは動的にでます
トライ&エラーをする際に逆に面倒になることがあります
動的再読み込みをいれるか、静的解析をいれると良いです
2010年1月23日土曜日
予備知識
2010年1月23日土曜日
Cから作るLuaスレッドCからLuaのステート(実行単位)を生成すると、メインスレッドが一つできます
さらに、t = lua_newthread(L);のようにスレッドを作れます
スレッドは作成直後にはスタックにのっているので消されませんが、スタックから消えるとGCに回収されてしまいます
なので、スタックにのせたままにしておくか、レジストリに登録しておきます
Luaスレッドを明示的に破棄する手段はありませんが、参照を消しておけばやがてGCが回収してくれます
2010年1月23日土曜日
インクリメンタルGC
完全にストップしてしまうGCとは違って、段階を踏んでGCを実行できる仕組み
毎フレームちょびちょび回すとか、余裕があるときにだけ回すことも可能
ただし、その性質上GCが間に合わないこともある(ただ、実行量などカスタマイズ可能)
2010年1月23日土曜日
メタテーブルとメタメソッドテーブルに対する操作を変更できます
算術メタメソッドなら、__add, __sub, __mul, __div, __unm(符号反転),__mod(余剰),__pow(累乗)なんてのがあります
関係メタ演算子なら、__eq(等しい),__lt(より小さい),__le(以下)です
tostringといった文字列化なら__tostring
__indexを使うとテーブル参照に対するインデクス操作を変更できます
__newindexを使うとテーブル更新時の操作を変更できます
2010年1月23日土曜日
はじめてのメタメソッドmt = {}mt.__add = function (lhs, rhs) print(lhs, rhs, "mt._add") return lhsendhoge = {}foo = {}setmetatable(hoge, mt) -- メタテーブル上書きhoge = hoge + foo -- メタメソッドが呼ばれる
2010年1月23日土曜日
弱いテーブルって?ガベージコレクションの妨げにならない「弱い参照」という機能があります
Luaではこれをテーブルで実現しています
これが意味することは、弱いテーブルからしか参照されていないオブジェクトはガベコレの対象になるということです
キーも値も別々に弱くできます
メタテーブルのフィールド__modeで指定でき、ここに”k”があるとキーが弱くなり、”v”があると値が弱くなります
2010年1月23日土曜日
弱いキーのサンプルweak = {}mt = {__mode="k"} -- キーは弱くなりますsetmetatable(weak,mt) -- メタテーブルをセットしますkey = {} -- 一つ目のキーweak[key] = 1key = {} -- 二つ目のキーweak[key] = 2-- 一つ目のキーをガベコレで回収しますcollectgarbage() -- 無理矢理ガベコレfor k, v in pairs(weak) do print(v) end --> 2
2010年1月23日土曜日
グローバル変数もテーブルなんです
_Gがグローバル変数を管理するテーブル
a = “b”は_G[“a”] = “b”と同じです
通常のテーブルもa[“b”]とa.bは等価
勿論_Gにもメタテーブルが設定できますよ
2010年1月23日土曜日
オブジェクト指向
テーブルを使えばクラスも表現できるよ
クラスベースではなく、プロトタイプベースになるけどね
テーブルはt:hoge()と書くと、t.hoge(t)と書いたのと同じことになるんだ!
2010年1月23日土曜日
テーブルとメタメソッドを使った疑似クラスHoge = {value = 0}function Hoge:new(c) c = c or {} setmetatable(c, self) self.__index = self return cend
function Hoge:setValue(v) self.value = vend
h = Hoge:new()
print(h.value)h:setValue(100)print(h.value)
--> 0--> 100
h:setValue(100)はh.setValue(h,100)のシンタックスシュガーである
また、メタテーブルを使い、プロトタイプを設定できるhは自分の持ってない操作をHogeから探すようになるから
2010年1月23日土曜日
標準ライブラリ
2010年1月23日土曜日
数学ライブラリ(三角関数など)テーブルライブラリ追加/削除ソート連結
文字列ライブラリ(正規表現など)I/OライブラリOSライブラリデバッグライブラリ
2010年1月23日土曜日
Luaの現在とこれからカレントバージョンはLua 5.1.4 (2008-8-22)
開発バージョンはLua 5.2 (work2) (2010-1-13)
5.2では緊急用ガベージコレクタとか入ったり、いくつかのメタメソッド追加とかあったり、まだまだ進化するのがLua!
独自Patchも色々あるけど、たまにバグが……
2010年1月23日土曜日
まとめLuaは非常に使いやすい組み込み言語なので、アプリにスクリプトを組み込みたい場合に候補になるでしょう
スクリプトを使うだけなら気になりませんが、組み込むならそれなりのケアは必要です
でも、それでも良い言語ですよ!!
2010年1月23日土曜日
ご静聴ありがとうございました
2010年1月23日土曜日