その他





DEBUG


local v = 0; function testHook() print("Debug v = "..v); end -- 実行文がよばれる直前に testHook を呼ぶ. debug.sethook( testHook, "l" ); v = v + 1; POINT 最終的にスタックは元の状態に戻っている これは良いプログラミング作法


Coroutine(Co-routine)


複数の coroutine を作成できるが, 平行して動作することはできない. 互いに譲りあい( yield ) ながら作業をする。 協調的 multithread OS が CPU の実行を切り替えながらする作業を, PreemptiveMultiTask という. 先制. ( 先買権 == はやいもの勝ち ) [ 実行処理自体 == worker ]が 切り替えの合図を送るのが, NonPreenptiveMultiTask だから協調 ( だから yield ) POINT Coroutine とは 実行を一時中断して, 後で再開する仕組みのこと。 自分で中断を宣言することが、 OS の管理する multithread とは異なる。 自分で yield() をコールして初めて中断される。
Coroutign 作成. ( worker ) // thread object をかえす. thread = coroutine.create; 2. main() 関数にわたす. ( Job ) main( thread, prm ... ); 3. coroutine を稼働させる. coroutine.resume() で稼働させる. 4. 終了をまつか, yield を実行する.
条件式は任意の値OK.( false と nil は共に偽 )


Luaのつかいみち


設定ファイルとして扱う Lua format を利用する
Var=Val;( これを自分で解釈( Interprete )する )
-- lua でグローバル変数を設定。 var=10;
foo.cpp
lua_getglobal( s, "var" ); // globalTbl から var key stack にのせる luaL_checknumber( s, -1 ); // stack から値を取得する.
C から lua のグローバル変数を設定する。
lua_pushstring(s, "test"); lua_setfield(s, LUA_GLOBALSINDEX, "name");



C 言語が主体


指定したところで, Lua にうつり, 処理がおわったら Lua から戻る。 ある処理における Callback の際に使う。 MVC でいうところの Control を Lua から制御する Controler の機能を Lua に公開する Controller, Data ともに C 側にある


Lua が主体


Lua 側に data, Controler を配置. ( Lua の data 構造を利用可能. ) 設定 file は Lua 変数を扱うだけになる. Gui は Lua でサポートされる必要がある. Controller, Data ともに Lua 側にある.


hash


Hash とは, 文字列を数値に変換したもの. ( 検索する際に数値に変換して高速に検索する ) 均等に分布するのが良い Hash 関数。 比較を用意にすることが目的. Lua は内部に Hash 関数をもつ Lua には Switch 文がない. ( if-elseif ... | table )で代用.


_G


DESC グローバル環境を保持するグローバル変数 [ Lua の環境 ]と呼ばれる, global 変数をもつテーブルのこと。 POINT __index : field に値を入れる時に使用される method. a = 1; <-> _G.a = 1;


registory


registory とは 定義済みの [ table ] 好きなLuaの値を格納するために [ Cのコードから ]使うことができる. 疑似 index [ LUA_REGISTRYINDEX ]に置かれている KEY が重複しないように注意すること. Cオブジェクトのアドレスを持つライトユーザーデータ を用いるとよい.


lua_checkstack


SYNTAX int lua_checkstack (lua_State *L, int n ); DESC スタックに n の空きがあるかチェックする。 チェックするだけでスタックのサイズは変更しない。 STACK [-0, +0, m] RET false : スタックに n 個の空きがない。


table に weakReference の設定をする


POINT ( table には 予約済みの field がある ) [ __mode ] field に "k" を含む -> KEY が weakReference [ __mode ] field に "v" を含む -> VAL が weakReference


擬似インデックス


スタック内に無いいくつかのLuaの値に[ Cのコードから ]アクセスするためのもの stack 以外にある Lua が管理する値を 指すINDEX どの関数も 疑似インデックス と呼ばれる有効なインデックスを受け付ける LUA_GLOBALSINDEX : スレッドの環境 (グローバル変数がある場所) LUA_ENVIRONINDEX : 実行中の C の関数の環境がある 擬似インデックス