[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 10/12 20:25 / Filesize : 241 KB / Number-of Response : 987
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【Lua】組み込み系言語総合【Squirrel】



1 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 13:02:21 ]
LuaやSquirrelなどアプリケーションへの組み込み用途で
使われるプログラミング言語についてのスレッドです
まとめwiki(なにか質問する前に必ずみること!)
wikiwiki.jp/lua/

その他の参考URLは>2から

■過去スレ
その3 pc11.2ch.net/test/read.cgi/tech/1160799232/ (前スレ)
その2 pc8.2ch.net/test/read.cgi/tech/1063711237/
その1 pc5.2ch.net/tech/kako/1034/10341/1034182349.html

5 名前:デフォルトの名無しさん [2008/03/11(火) 15:59:21 ]
組み込みと言えば、TCLだな

6 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 16:07:26 ]
>>1

7 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 16:40:28 ]
function L(t,c)
return t[1] and (c and "■" or " ")
:rep(table.remove(t,1))..L(t,not c) or "\n"
end
io.write(L{0,1,2,1,4,1,2,4,1})
io.write(L{1,1,2,1,2,2,5,1,1})
io.write(L{2,1,2,1,2,1,3,2,2})
io.write(L{1,1,2,1,3,1,2,1,3,1})
io.write(L{0,1,2,1,3,3,1,5})

8 名前:デフォルトの名無しさん [2008/03/11(火) 17:10:27 ]
>>5
なんでTCLなの?
組み込みのIDEとかでよく使われてるけど

9 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 18:47:39 ]
>>1

10 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 21:17:18 ]
RubyもPythonも組込めるけどなあ。
Perlはさすがにやったことないが、できないこともないだろう。

11 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 22:39:02 ]
RubyにしてもPythonにしても標準ライブラリや言語機能がでかすぎにみえる。
組込みに向いてるってのはコードサイズまたは外部への依存の少なさと
言語機能のバランスが取れてるって意味にではないのかと。


12 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 01:23:20 ]
没になったテンプレ案には書いてあったけど、
そういう比較的大きな言語の組みこみの話も
多少は許容することが前スレで同意されていたはず。

でも一応Luaスレの続きだからその辺は空気読んでねと。

13 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 01:25:10 ]
Ruby Perlは$がきらいだ
>>1 乙curry



14 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 06:04:56 ]
このスレタイにくるまで長かったな

15 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 11:24:25 ]
前スレは実りの多いスレだった
二年前からのスレだから当然かwww

16 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 11:48:00 ]
GCのまとめ

LuaのGCはマーク&スィープ方式を組み込み言語向けに改良したインクリメンタル方式。
SquirrelのGCは参照カウント方式。

マーク&スィープ方式の欠点:
GCの処理に時間がかかるとハングアップした感じになる。その欠点を克服すべく、
少しづつ分割してGCの処理を行う(インクリメンタル方式)、
マルチスレッドで平行してGCの処理を行う、などの進化型が現在の主流。

参照カウント方式の欠点:
参照カウンタの更新処理によるオーベーヘッドにより処理速度が低下する。
循環参照への対処が必要になる。
過去の方式である感は否めない。


17 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 12:41:27 ]
むしろ,ここはSqとLのどちらを使うか自分で判断できる人のスレ
GCの比較は余計なお世話というのが前スレの結論じゃなかったか?

18 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 12:50:09 ]
squirrel

[名](複 〜s, 1で((集合的))〜)
1 《動》リス:肉は食用になる.
2 [U]リス類の肉[毛皮].
3 ((米俗))変なやつ. ━━[動](〜ed, 〜・ing;((英))〜

19 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 13:34:15 ]
         ____   
       / \  /\ キリッ
.     / (ー)  (ー)\      
    /   ⌒(__人__)⌒ \    <過去の方式である感は否めない。
    |      |r┬-|    |      
     \     `ー'´   /
    ノ            \
  /´               ヽ              
 |    l              \
 ヽ    -一''''''"〜〜``'ー--、   -一'''''''ー-、.    
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


          ____
        /_ノ  ヽ、_\
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ    だっておwwwwww
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒)
| / / /      |r┬-|    | (⌒)/ / / //  
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/
|     ノ     | |  |   \  /  )  /  
ヽ    /      `ー'´      ヽ /    /     
 |    |   l||l 从人 l||l      l||l 从人 l||l   バ   
 ヽ    -一''''''"〜〜``'ー--、   -一'''''''ー-、 ン
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒)) バ
                             ン

20 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 14:28:03 ]
>>18
欧米じゃリスを食うのか…

21 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 15:27:03 ]
squirrelちゃん涙目wwwwwwwwwwwwwwww

22 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 19:35:26 ]
なんでこんなところに子供が…と思ったら春休みか

23 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 07:50:55 ]
外国だとFreePascalでNintendo DSのソフト作ってる人多いな



24 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 12:59:11 ]
Squirrelの正規表現なんですが
local text = "ab abcd ab";
re <- regexp("a.*b");
local ret = re.search(text);
print("begin, end = " + ret.begin + ", " + ret.end + "\n");
print("ret = " + text.slice(ret.begin,ret.end) + "\n");
> begin, end = 0, 5
> ret = ab ab
こうなっちゃうのうちだけでしょうか?

25 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 16:05:19 ]
正規表現通りの結果でてる。Squirrelでなくてもそうなると思う

26 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 17:56:02 ]
"a.*b" の * は欲張りだから本来 "ab abcd ab" にまでマッチするはずじゃない?
Squirrel書いたことないので見当違いしてたらごめん

27 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 19:55:26 ]
a.*?bだよな。

28 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 20:55:19 ]
>>25
>>26さんの言うように最後までマッチするはずなんですよ
秀丸と、Luaで試してみましたが最後までマッチします。
>>25さんのところでも同じ結果がでますか?
うちで何か失敗してるのかなぁ?

29 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 13:54:40 ]
うちでもなるから最短マッチな実装なんだと思うよ。
不満なら直すか、他から持ってくるしかないんじゃなかろうか。

30 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 14:28:25 ]
いやいや、最短なら
ab
で終了だろw


31 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 14:35:24 ]
あ、そうか。間抜けな俺。

* は 0 個もありだよな

ってことで、バグ認定でいいんでね?

32 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 22:11:46 ]
.が任意の一文字で*がワイルドカードだとすると辻妻あうな

33 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 22:33:32 ]
>>29-31
ありがとうございます
どうもバグみたいですね
英語苦手だけど、なんとかレポート送っときます




34 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 17:43:40 ]
>>33 レポート乙

35 名前:デフォルトの名無しさん [2008/03/31(月) 20:28:40 ]
age

36 名前:デフォルトの名無しさん [2008/04/02(水) 00:55:25 ]
なんか過疎ってるな。

swig + lua の組み合わせを最近多用している。
luaからswigで公開する型や関数のメタ情報を取得ってできる?
例えば関数の引数や戻り値の型名とか。
構造体のメンバ変数の一覧ならメタテーブル経由で取得できるけど。


37 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 18:28:21 ]
>>36
luaは動的言語だから、戻り値や引数の型の分からんでしょう。
型は変数じゃなくて、値にくっついてる。

38 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 02:55:50 ]
luaをネットワーク関係のライブラリ(httpを解釈できればいい)
辺りだけ組み込んで、最小構成にするとどれだけ小さくなりますか?
100kByte以下とかできる?(linuxのELFで)

39 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 10:05:33 ]
それは質問する前に自分で試せるだろう。

40 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 17:48:01 ]
組み込みの状態でヴィジュアルデバッグができる言語ありませんか?

41 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 01:21:25 ]
ヴィジュアルデバッグとか聞いたことなかったけど、そんな単語あるんだなw
ICEとかじゃだめなの?言語に依存する内容じゃないように思うけど・・・

42 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 01:41:17 ]
サイケデリック ヴァイオレンス & クライム オヴ ヴィジュアル デバッグ!

43 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 02:00:17 ]
squirrel は SqDbg と SQDEV っての使うと eclipse からリモートデバッグできるらしいけど使ったことはない。



44 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 08:50:27 ]
squirrelはちょっと・・・すみません。

45 名前:40 mailto:sage [2008/04/08(火) 20:26:03 ]
>>41
ヴィジュアルデバッグは造語かもしれません。
GDBじゃないVisualStudioのような環境のことを指しています。
あと、「組み込み」は小型機器への組み込みではなく、
C++プログラムに対する組み込みの意味です。
いろいろ、すみません。

>>43
その組み合わせは非常に使えそうなので、ちょっと試してみます。
ありがとうございました。

46 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 23:53:24 ]
GUIデバッガとか、ソースレベルデバッガ、って言うと思う。

47 名前:41 mailto:sage [2008/04/09(水) 01:12:39 ]
>>45
ヴィジュアルデバッグでググったら多少引っかかったんで個人の造語ってわけじゃないと思うよ。
単純に俺が無知だっただけorz


48 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 22:34:43 ]
sqplusでプロパティ(getterとsetterを普通の変数アクセスのようにみせるアレ)
は作れますか?

49 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 02:03:48 ]
Xtalで

char script[] = " \
add: fun(a,b) \
{ \
println(a+b); \
} \
sub: fun(a,b) \
{ \
println(a-b); \
} \
";
AnyPtr compiled = compile(script);
compiled();

こうやってコードをコンパイルする。
そのあと任意のタイミングで
add(a,b)やsub(a,b)をCから呼ぶ方法がわかんない。

50 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 01:20:39 ]
>>40
scite-debugを使えば、C/Luaプログラムを同じ環境でデバッグできるはず
使ったこと無いけど

51 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 23:22:53 ]
xtal結構いいよな。
luaから乗り換えた。

つか作者はドキュメント整備してくれんかのぉ。

52 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 23:24:02 ]
>>49
マニュアル嫁

53 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 09:57:04 ]
Xtalいいな ネイティブスレッド対応か。



54 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 12:28:27 ]
Xtalのページ見てみたけどよくわからん。
ゲーム重視だからパフォーマンス重視なんだろうけれども。
Xtalはお手軽に制御構文が書けてかつパフォーマンス重視ってところがいいのかな?


55 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 21:36:25 ]
>>53
ちょまて Xtalってバーチャルマシンがスレッドセーフでできてんのか?

56 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 09:32:44 ]
ゲームのスクリプトにlispってどう思います?

57 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 10:52:19 ]
やってみたら?

58 名前:56 mailto:sage [2008/04/18(金) 11:05:19 ]
そっすね

59 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 20:29:27 ]
>>56
たしか、naughty dogがlispなんだよね


60 名前:デフォルトの名無しさん [2008/04/21(月) 03:11:15 ]
誘導されてきました。

現在C++とSquirrelでSTGを作っています。
Sqruirrelスクリプト側からC++の関数を呼ぶためには、
SQInteger func(HSQUIRRELVM v)
という形のグローバル関数でなくてはいけないんですが、スクリプト側から特定のオブジェクトを操作したいと考えています。
しかし、上の形だと動的メソッドでもないし、引数にオブジェクトへのポインタが含まれていないため、どうやって呼び出そうか困っています。
HSQUIRRELVMはスタックになっているので、スクリプト側に操作したいオブジェクトのポインタをあらかじめ渡しておいて
必要なときにスタックにぶち込んで引数として利用しようと考え、

/*Squirrelスクリプト*/
function ExeScript(p) /*引数はポインタ*/
{
  SetVelocity(p, 0, 5, 0); /*引数は操作するオブジェクトのポインタ、x方向の速度、y方向の速度、z方向の速度*/

  return 0;
}
/* HSQUIRRELVMのスタックには 1(top):roottable, 2:p, 3:0 4:5 5:0)となっているはず*/

というようなスクリプト側の関数を作り、ExeScriptをC++側から呼び出す時に
引数に呼び出し側のポインタをぶち込んであげようと思ったんですが上手くいきません。
ちなみにpはスクリプト側ではint型で扱っていて、ExeScriptが呼ばれたときにintにキャストし、
SetVelocityが呼び出されたときにポインタにキャストするようになっています。

何かいい方法はないでしょうか? もしくはセオリーなどを教えていただけませんか?


61 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 03:12:37 ]
申し訳ありません、上げてしまいました

62 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 03:13:14 ]
プログラム板では質問は age 推奨

63 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 03:19:01 ]
個人のゲームなんですかねえ



64 名前:デフォルトの名無しさん [2008/04/21(月) 08:12:31 ]
まずポインタをデバッガで追ってみりい。
スタック操作で単純にミスしてるだけな気がするよう。

65 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 11:04:50 ]
>>60
オブジェクトをIDで管理すればポインタを持たなくても
IDでやり取りできるんじゃない?

66 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 19:30:36 ]
>>60
そのC++オブジェクトをSquirrelのオブジェクトとして登録してみるのは?


67 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 08:12:10 ]
Squirrelあきらめます。ありがとう。

68 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 11:19:04 ]
www
まあ正直聞いててスクリプトでやるようなことじゃないと思ったわ

69 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:55:42 ]
>>64
スタック操作確認して怪しいところ修正したら動きました。
本当にありがとうございました…。

>>65
次改造するときに試してみます。

>66
そんなこと出来るのでしょうか? Squirrelのクラスについてもう少し学んでみようと思います。

>68
たしかにそうかもしれません…。

70 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:57:50 ]
>>60
こんなんはどう?
SqPlusを使うけど。

/*c++*/

/* c++クラスをsquirrelにexport */
SqPlus::SQClassDefNoConstructor<SomeClass> def(_T("SomeClass"));
/* メソッド定義 */
def.func(&SomeClass::SetVelocity, _T("SetVelocity"));

SomeClass* object = new SomeClass();

/* Squirrelの関数呼び出し用オブジェクトの取得 */
SqPlus::SquirrelFunction exeScript = SqPlus::SquirrelFunction<int>("ExeScript");

/* 関数実行。型がsquirrel用に変換可能であれば、
内部で変換されSquirrelに渡される。
*/
exeScript(object);

---

/*squirrel*/

function ExeScript(object)
{
object.SetVelocity(0,5,0);
return 0;
}



71 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 19:09:00 ]
>>69
ホストのポインタをvm内に格納するばあい
userpointer型を使うとかsqclassのインスタンスにsq_setinstanceupするのが適当

72 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 02:39:32 ]
luaの関数をCの値として保持しておくことはできるんでしょうか?
luaスクリプトからコールバックを登録して、Cから適宜呼び出す、ということをしたいのですが。

73 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 08:27:31 ]
>>72
LuaのC APIを使って、Lua VM内のグローバルにある関数を(値として)スタックに積むことはできる
スタックに積まれた関数をLuaのC APIから実行することはできる

でOK?
この手の話題ってC側なのかLua側なのか、表現が難しいな。
上のSquirrelのやつもそうだが



74 名前:72 mailto:sage [2008/04/24(木) 16:15:42 ]
>>73
ありがとうございます。Cの値として保持しておくことはできないんですよね。
それだと、Luaから渡された関数を適当なタイミングで呼びだすには、
関数を一旦スタックの深いところに置いておいて、必要な時にインデックスを使って呼び出す、という形になるのかな…。

75 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 17:42:07 ]
>>74
LuaからCに関数名を渡せばあとでCのほうから探索できる。
関数を保持しとくのは無理かな、たぶん。

76 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 20:17:04 ]
luaL_ref/unrefを使えっていう話?

77 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 22:39:23 ]
>>76
それが一番質問者の期待しているものに近そう。
75に似た方法で呼び出す関数名を決め撃ちするのもあり。

78 名前:72 mailto:sage [2008/04/25(金) 01:33:55 ]
>>75-77
ありがとうございます。マニュアル引き引き調べてみます。

79 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 09:10:05 ]
コンパイル済みのsquirrelスクリプトを事前に変数かなんかに格納しておいて、後でvmに読み込む場合はどのようにすればいいのでしょうか?
リファレンスなどを読んだ感じだとsq_readclosure()辺りを使うのかと思ったのですが資料をあまり見つけることができませんでした。

80 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 15:57:18 ]
>資料
ソースを読めばいいじゃない。
そこらのライブラリとかスクリプトのような聞き方をされると違和感をおぼえてしまう。

81 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 08:25:13 ]
でたーソース嫁攻撃

82 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 09:27:07 ]
そりゃあ出るだろう
ソース読むのが妥当な場面だもの

83 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 11:59:05 ]
すべての質問は自分で調べろで片付く
ある意味最狂



84 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 12:31:55 ]
まぁ、極論馬鹿の脳内では今回の話もそこへ繋がるんだろうな、
というのは、容易に推察できることではある。

アホくさいけど。

85 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 13:30:40 ]
昔はハウトゥー本前提での自分で調べろって台詞だったが、
最近は面倒になりそうなのは全部自分で調べろって投げ捨てるよな

86 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 13:44:35 ]
ソース嫁馬鹿に極論馬鹿にレッテル馬鹿の三つ巴ですかw

87 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 13:45:52 ]
バカばっか

88 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 14:14:23 ]
>>86
無理矢理三つ巴と思い込む暇があったら
ソースでも読んでた方がいいと思うよ。

89 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 16:55:55 ]
ソース読まない馬鹿は死ぬべきだな。

90 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 17:32:11 ]
春か…

91 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 17:39:41 ]
ソースを読めば素晴らしい回答が在る、というのにお礼も言わずに、
アホなレス繰り返してる馬鹿のレベルが低いんだもの。
まぁ、読めないから回答者に喰いついてるんだろうね。

質問者は社会常識を身につけてから出直しておいで。
自分の立場を弁える常識は必要だよ?学生君。

92 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 18:16:20 ]
ソース読んでどうにかなるレベルの奴がここで質問するわけがない

93 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 18:24:36 ]
テンプレに追加案
【このスレは”質問スレ”ではありません】
ソースを読めば素晴らしい回答があります。
何時間掛かるかも分りませんが、まずはすべてのソースを読み理解する頃には質問の内容も解決している事でしょう。
また質問者は立場をわきまえ、回答者を崇めること。


このスレは雑談スレか



94 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 19:35:46 ]
79の言ってることがよくわからないんだけど、
あらかじめ変数に読み込んでおいてというのは、
ファイル開いてファイルサイズ分メモリを確保して、そこにreadするということか?
それでそのバッファのポインタを渡して読み込ませたいってこと?


95 名前:79 mailto:sage [2008/05/01(木) 02:06:38 ]
忙しくてレスできませんでした。
>>80
とりあえずソース読んで分からなかったらまた尋ねるかもしれません。

>>94
94さんの言うとおりファイルサイズ分メモリを確保しておいて、そこにファイルを読み込ませ、そのメモリからオブジェクトにデータをロードさせようと
思っています(do_fileやload_fileなどを使うといちいちファイルにアクセスして負荷がかかるため)。
現在はchar*にスクリプトを読み込ませておいて、オブジェクト生成時にコンパイルしていたのですが、
コンパイルにかかる負荷がバカに出来ないと考え「コンパイル済」のスクリプトをメモリに保存しておいて運用したかったのでその方法を質問させていただきました。

96 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 03:37:06 ]
コンパイルドバッファだったと思う。
ttp://wikiwiki.jp/lua/?Squirrel か もんしょの巣穴っていう個人さんのサイトに解説あった気がする。
違ったらヘッダをcompで検索すれば出てくると思う。
眠いからこれ以上は書けないZzzz

97 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 03:41:20 ]
ああ勘違い、コンパイル済みスクリプトをバイナリで保存しておいて読み込みたいのね?
役に立てないZzzz

98 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 11:25:29 ]
本人が言ってるとおりsq_readclosureでいいんじゃないのか

99 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 12:14:36 ]
私はLuaの方の人だから見当違いかもしれないと前置き。
sq_readclosureでよさそうだけど解説があまりないから
断片的な情報とソースから推測するしかないって感じかな。
ソースはsqstdio.cppにあるsqstd_loadfileの実装が参考になりそう。

ところでsqstd_loadfileは関数を評価せずにスタックに
積むだけみたいだから、その参照を保持しておくだけで
用が足りたりしないのかな。

100 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 01:18:42 ]
流れぶった切るけどスマソ。
Lua側の関数に引き渡した0xFFFFFFFFってリテラルが、C側からlua_tonumberで取ってくると0で返却されるのは既知?
さらに、0xFF00FFFF -> 0xFF010000なんて取れてきたりする。
どうもVC8だと起こるらしくて、gcc系だと引き渡したリテラルが正しく取れるんだけどなぁ。

101 名前:79 mailto:sage [2008/05/02(金) 02:27:06 ]
sqstd_dofileは内部でsqstd_loadfileを呼び出していたため、sqstd_loadfileの中を見てみました。
sqstd_loadfileの中には外部から読み込んだファイルがバイナリであるかテキストであるかを判定する文があり、
バイナリの場合はコンパイルせずにそのままsq_readclosureによってスタックに読み込んでいることが分かりました。
そこで、sqstd_loadfile冒頭のsqstd_fopen(fopenと同じ働き)を削除し、loadfileの引数のファイル名の変わりに(FILE*)型のポインタを
渡してやるようにし、また、(テキストファイルは扱わないため)テキストであった場合の分岐を削除してみました。
これは成功すると思ったのですが(おそらく)こちらのコーディングミスでメモリ関係のエラーが出てしまいました。
こちらを直して正常に動作するようならまた報告したいと思います。

>>99
スタックトップに積むようなので、sq_move(dest, src, -1)といったように設定してやればいいんですかね? 試してみます。
ただ今回の件でSquirrelのスタック周りの操作についてほぼ無知であることが分かったため、もう少し勉強してからトライすることになると思います。

102 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 14:13:56 ]
>>100
Luaは整数を小数として扱ってるからその辺りが関係あるのかなぁ。
あと、高速化のためか整数←→小数の変換には
単なるキャストを使っていたり、アセンブラ命令を直で使っていたりする。

103 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 17:37:50 ]
>>102
luaconf.hの中のlua_number2intの定義の所ね。
_MSC_VERでifdefしてる個所もある@5.1.3
LUA_ANSIをdefineして直ったらここが原因だろう。



104 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 20:16:36 ]
>>100
Direct3D使ってたら浮動小数点演算の精度が24bitになってる可能性あるんで
D3DCREATE_FPU_PRESERVE
を調べるといい。

ただ値の受け渡しだけはできるはずの気がするが。

105 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 16:16:35 ]
lua_xmoveが使える条件に、「同じグローバルステートの異なるスレッド」ってあるんですが
これってどういう事なんですか?
同じlua_Stateから派生したスレッド同士なら良いということですか?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<241KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef