LUA
http://rua.rubyforge.org/ http://rubyforge.org/projects/rua/ Rua 0.4.7をリリースしました。 変更点 evalでスクリプト名を渡せるようにした rua = Rua.new begin rua.eval(<<-EOS) xxx EOS rescue => e puts e end begin rua.eval(<<-EOS, 'script_name'…
スクリプト言語による効率的ゲーム開発 C/C++へのLua組込み実践 (GAME DEVELOPER)作者: 浜中誠出版社/メーカー: ソフトバンククリエイティブ発売日: 2008/09/27メディア: 大型本購入: 13人 クリック: 322回この商品を含むブログ (39件) を見る日曜日に発売だ…
http://rua.rubyforge.org/ http://rubyforge.org/frs/?group_id=4845 しょーもないバグがあったので、修正しました。
http://rua.rubyforge.org/ http://rubyforge.org/frs/?group_id=4845 Luaに渡したオブジェクトが空テーブルになって返ってくるという、結構致命的なバグがあったので修正しました。
[実行] response.content_type = 'text/html' response.puts 'hello, world!'
[実行] response.content_type = 'text/html' local vars = { foo = 'HOGE', bar = 'FUGA' } response.render([[ <html> <body> #{@foo}<br> <b>#{@bar}</b> </body> </html> ]], vars)
こちらのアイデアがおもしろかったので、真似してみた。こんな感じでエントリにコードを書いて >|lua| response.content_type = 'text/html'response.puts 'hello, world!' < エントリのurlをパラメータとしてrun_luaに渡すとLuaのコードを実行する。 http:/…
書店でざっと立ち読み。新しい情報はあまりなかったけど、11月に発売されてたら買ってたなぁ…残念。 微妙に情報が古い感じだけど、5.0なのかな?入門Luaプログラミング作者: 上野豊出版社/メーカー: ソフトバンククリエイティブ発売日: 2007/12/22メディア: …
ソース http://storehouse.quickvps.net/firter?id=6 出力 http://storehouse.quickvps.net/run_firter/?id=6 CodePressがいまいち使いにくいなぁ。 こまごま直していかないと。
・・・できるものを作ってみた。 http://storehouse.quickvps.net/firter/ Luaでサーブレットっぽいものを作れる。Operaには(CodePressが)未対応。 future changes パーソナライズ ライブラリの追加 NKFで外部リソースの文字コードの自動変換 外部リソースの…
http://storehouse.sakura.ne.jp/rua/beta/0.3.6-b1/ 末尾に「=」がつくメソッドがある場合、「hoge=」→「set_hoge」というエイリアスを作るようにしてみた。 メタテーブルを使えば、もう少しましな動作になると思うけど、とりあえず後回し。 require 'rua' …
http://storehouse.sakura.ne.jp/rua/beta/0.3.6-b2/ エイリアスを作るのはやめ。newindexイベントつかって、ふつーの代入っぽくSetterを呼べるようにした。 require 'rua' rua = Rua.new(:all) class Foo def bar=(v) @bar = v end def bar @bar end end ru…
http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/codepress_lua/?root=svn JavaScript用をベースにして作ってみた。バージョンは5.1。 /* * CodePress regular expressions for Lua syntax highlighting */ // Lua Language.syntax = [ { input : /\"(.*?…
Ruaを作っていたのは、こーゆーことをやりたかったわけで。 プログラミングできるWikiって、よさげじゃないですかね? require 'rubygems' require 'rua' require 'stringio' def lua_eval(src) rua = Rua.new rua.stdout = StringIO.new rua.eval(src) rua.…
http://rua.rubyforge.org/ 外部の文字コードを指定すると、ホストから渡された文字列は内部的にUTF-8に変換して処理するようにした。 rua = Rua.new(:all) rua.external_charset = Rua::SJIS # 外部の文字コードはSJIS rua.str = 'あいうえお' # SJIS→UTF-8…
http://storehouse.sakura.ne.jp/rua/beta/ 内部的にUTF8に変換することで、SJISの問題になんちゃって対応してみた。 require 'rua' rua = Rua.new(:string) rua.external_charset = Rua::SJIS rua.repl = '寿限無' puts rua.eval(<<EOS) #=> "寿限無寿限無" s, n = s</eos)>…
http://storehouse.sakura.ne.jp/rua/beta/ Luaに渡されたRubyオブジェクトは全部、Ruaインスタンスが死なない限りはメモリを解放しないようにした。LuaのGCと同期するのがいいんだろうけど、うまいやり方が思いつかない…
http://rua.rubyforge.org/ http://storehouse.sakura.ne.jp/rua/ 例外が投げられたら処理を中止するようにした。 require 'rua' rua = Rua.new(:all) #rua.abort_by_error = false rua.errfunc = lambda do raise 'xxxxx' end rua.eval(<<-EOS) errfunc() p…
http://rua.rubyforge.org/ なんかRubyForgeでミラーリングされていないようなので↓においときます。 http://storehouse.sakura.ne.jp/rua/ 変更点 例外ハンドラにデバッグ情報を渡すようにした 関数のデバッグ情報を取れるようにした require 'rua' require…
http://rua.rubyforge.org/ http://rubyforge.org/frs/?group_id=4845&release_id=16541 Luaからブロック付のメソッドを呼び出せるようにした。 酔っ払いながら実装したんでかなり危険かも。 require 'rubygems' require 'rua' rua = Rua.new(:all) rua.rang…
http://rua.rubyforge.org/ http://rubyforge.org/frs/?group_id=4845&release_id=16436 RubyからLuaに渡したRubyオブジェクトを元に戻すようにした。 require 'rua' class Foo def bar p self end end foo = Foo.new foo.bar #=> #<Foo:0x293ff38> rua = Rua.new rua.foo =</foo:0x293ff38>…
http://rubyforge.org/frs/?group_id=4845&release_id=16367 スタックがずれていたのを修正。 コルーチンの呼び出しに対応。 method_missingを実装。 require 'rua' error_handler = lambda do |e| p e end rua = Rua.new(error_handler) rua.openlibs(:all)…
OSとか環境とかはホスト側が提供しない限り、Luaから触れないからよいけど、ホストのオブジェクトをそのままポイッとわたして、メタプログラミングをされてしまうのは怖い。 「基本的に関数定義して、オブジェクトなんかそのまま渡すなよな」という姿勢でい…
Object#__id__は読まれても実害はない…と思うけど一応、禁止に。 破壊的な更新をするメソッドの変換抑制は開発者側にがんばってもらう。 Moduleとそのサブクラスの変換を回避・禁止する 以下のメソッドの変換を回避・禁止する __id__ __send__ class extend …
http://d.hatena.ne.jp/winebarrel/20071111/p1 とりあえず、実装した。
とりあえず、よく分からんオブジェクトはuserdataじゃなくて関数持ってるテーブルに変換しちゃえばいいかも。
http://doc.loveruby.net/refm/capi/view/function/rb_protect rb_protectという大域脱出を補足してくれる関数があることを、ここを読んで知った。 Ruby拡張で言語バインディングの記事は参考になるなぁ。Lua自体には例外処理機能はないみたいだからLuaの関…
以下のような感じで、うまく例外を補足できた。コメントアウトをはずすと、もっかい例外が飛んでく。 static int rua_proc_call(lua_State *L) { VALUE proc, args, retval; int i, n, status; proc = (VALUE) lua_touserdata(L, lua_upvalueindex(1)); args…
http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/rua/rua/rua.c?root=svn&view=markup ソース static int rua_proc_call(lua_State *L) { VALUE proc, args, retval, error_handler, errargs, errmsg; int i, n, status; proc = (VALUE) lua_touserdata(L…
http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/rua/rua/rua.c?root=svn&view=markup とりあえずこれで完成かな。 あとは、extconf.rb書いて、RubyForgeに登録してwin32用のバイナリ作って。。。 変換するコードはこんな感じ。 static void rua_newtable…