日記(926)

<前 次>

#include &quot;LUA\lua.h&quot; // ClassView によって追加されました。

http://www.water.sannet.ne.jp/sowwa/
の日本語化パッチを5.1.2に使ってなんとか日本語対応できないかと試みていましたが、結果は失敗に終わりました。
やっぱり5.0系列と5.1系列ではそれなりに違いがあるようでした。
一応 http://hammm.dw.land.to/lua/ の日本語化パッチで文字列リテラルの日本語対応(つまり"ソース"を正しく表示できるなど)は可能だったのでしておきました。
変数名はともかく文字列に使えるかどうかは利便性に大きく関わりますからね。

で、ちょっとそれとは別に、lua_Stateの扱いについて考えていました。
ラッパークラスであるCBWLuaに全て管理を任せてLuaに対する操作は全てCBWLua経由で、と思っていたのですが、CBWLuaから実行したプログラムでもどんどんCBWLuaの管轄外のlua_Stateを作ることができてしまうので、CBWLuaではlua_Stateを管理しきれないのです。
つまり、動き始めたのがCBWLuaによるlua_Stateだったとしても、実行するうちに勝手に新しいlua_Stateが作られて、それが実行されてゆくと、CBWLuaによるlua_Stateが実行されているのにもかかわらず実際に動いているのはそれから派生した別のlua_Stateだったりするのです。
これで何が困るかといえば、グローバル環境は親玉(CBWLuaによるlua_State)も子分(派生したlua_State)も共通なのですが、スタックは別々で、今すぐ必要になるデータとかは大抵スタックに積まれているのです。
だから、CBWLuaにlua_Stateを一括管理させていると、子分のスタックが見られなくて、大事なところで親分が何もわからないということになるのです。
だから、スタックに関する部分はLuaAPIを直接使ってもらうことにして、CBWLuaが扱うのはグローバル環境と子分の作成など、どのlua_Stateがやっても同じになる用事だけにしておきました。

それなので、さっそくグローバル環境に関する関数を、ということで、特定の変数の値を得る関数を作ってみました。
ただ単にグローバル変数を得るだけでなく、可変引数を用いて複雑なテーブルの中身なども得られるようにしてみました。
この関数とほぼ同じものをWikiにも掲載しておきました。

で、そんなこんなで色々やってると突然リンカエラーが。
何があったのかと思って調べていたらVC++が勝手にヘッダファイルのインクルードをextern "C"の外に出していることが判明しました(中に入れておかないとエラーが出る)。
IDEって時々余計なことをして見つかりにくいエラーを混入してしまうのが困り者ですね。

TGBBS削除機能

Lua、Bomber丸World上で動かすのに成功しました!
コネコベーダーの動きをコルーチンで制御しています。
実際のプログラムをWiki上にアップしているので是非ご覧ください!

あと、今日はTGBBSの削除機能を実装しました。
ただ、実際に消しているわけではなく削除済みフラグを立てているだけなので後から復活することもできます。

子ルーチン

就職の面接の結果が出ました。
内定、だそうです。

で、Lua、とりあえずコルーチンを動かすことには成功しました。
まだまだLuaの変数を見たりすることができないので本当に意図したとおりに動いているのかはわかりませんが、とりあえずエラーは出ていないようです。

昨日描いていたいずみさんの絵ができました。
一応24歳です。
24歳ですってば!
年齢半分ぐらいに見えるかもしれないけど!!

1180709513.png

いずみさんの絵

Lua、コルーチンを扱うクラスを作りました。
母体となるLuaクラスから作って、コルーチンが終了したら自分で勝手にdeleteします。
そして、コルーチンが無限ループだった利したら母体のLuaクラスの消滅時に一緒に消滅します。
あと、単純にLuaの関数をラップするだけの関数も大量に作ったりしてました。

そして今日は久しぶりに絵も描いていたり。
いずみさんもうすぐ描けそうなんで明日アップします。

lua_Alloc

yaneSDKのメモリ管理にあわせるためにアロケート関数をyaneSDKの機能を使う方法で実装したらエラーが出たので標準のアロケート関数に戻しました。
あとはWikiの内容を充実させながらちょこちょことBomber丸World用のLuaクラスを作っていました。

今日はこの日記PHPで既に書いた日記に対して編集操作を行ったときにタグが無条件でエスケープされてしまうバグを修正しました。
この修正はTGdiaryにも反映するので次の更新はTGdiaryのバージョンアップとなります。

Lua5.1リファレンスマニュアル

う~ん、Luaの、C側での関数リファレンスも見つけたので、うちのWikiの存在意義が半分ぐらいなくなってしまったようです…。
まあ、関連性の深い関数などをすぐに参照できるというのがうちのWikiの強みだったりするし、順を追って発展させていくチュートリアルなどもあればまた存在価値というのは高めていけそうですが。

で、Bomber丸WorldにLuaを組み込むほうもわりとそれなりにでき始めています。
まあ、lua_openしてloadしてcloseするクラスを作ってそれが今のところエラーを起こしていないというところなんですが。

新卒採用の楽しそうな人

就職の面接に行ってきました。
面接官が面接をすごく楽しんでいるようで、こちらとしても楽しく喋ることができました。
受かってるといいな。

それはそうと、今日はTGBBSの記事のオプションのページを作っています。
またあらたにフォームの種類にラジオボタンが必要になったので少し時間がかかっていますが、オプションでは投稿者が記事の削除や編集を出来るほか、閲覧者も情報の閲覧や他の何らかの操作をできるようにする予定です。

<前 次>