1 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 13:13:52 ] だれか サポ−ト 頼む。 前々スレ pc5.2ch.net/tech/kako/1034/10341/1034182349.html 前スレ pc8.2ch.net/test/read.cgi/tech/1063711237/ 本家 www.lua.org/ lua-users lua-users.org/ LuaForge luaforge.net/ Lua 5.1 リファレンスマニュアル(日本語訳) sugarpot.sakura.ne.jp/yuno/html/lua51_manual_ja.html
558 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 02:00:57 ] 別にluaからforkしたわけじゃないんで、派生とはいえない けど、 squirrelはこのスレでいいのは事実
559 名前:デフォルトの名無しさん [2007/11/10(土) 06:44:52 ] 次スレタイトル案 【Lua】LightWeightLanguage統合【squirrel】 【Lua】組み込み言語統合【squirrel】
560 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 07:04:42 ] >>243 に一票
561 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 07:22:32 ] Squirrelの情報欲しい人の為にもスレタイにSquirrelは欲しい気がする そうすりゃSquirrelスレが立つ心配も無さそうだしな …ところで、次スレの話はまだ早すぎないか? 何だか、自分超元気なのに次期国王の話を聞かされる王様の気分だ
562 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 07:48:54 ] ぅあで喜んではしゃいでたのはやっぱりニワカか。 なんか違和感あったんだよな。
563 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 08:19:44 ] Squirrel重すぎ
564 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 09:02:58 ] ぎりぎりになって決まってなくて結局いまのまま……みたいなのは避けたい。
565 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 09:48:25 ] >>559 なかなかいいんじゃないかな >>562 このスレがLuaで機能してるから他の言語くるな、なんて 質問しかしないような奴がいいそうなこったな
566 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 11:07:01 ] そしてPerl, Ruby, Python, PHP, JavaScriptで埋め尽くされる、と
567 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 11:51:30 ] 566 ニワカ乙
568 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 12:28:24 ] 守備範囲は ・アプリ組み込み用 ・軽量小規模言語 ・他にスレがない あたりかな。巷のLLとはちょっと違う気がする。 LL自体定義があるのかよくわからないが。
569 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 13:11:20 ] >>568 ニワカ乙
570 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 13:43:20 ] >>568 そんなとこだろうな というか ずっとそんなスレのつもりだった
571 名前:デフォルトの名無しさん [2007/11/10(土) 14:09:13 ] LLだと、RubyやPythonも入るからな・・・ いや、組み込む話題については、歓迎かも知れんけど
572 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 14:19:33 ] JavaScriptも当然入るな。 PHPは組み込みあったっけ。
573 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 15:45:11 ] >>571 そっち系の話題は向こうのスレじゃあんま出ないしな。 いや、もちろん出してもスレ違い扱いされたりはしないだろうが。
574 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 23:40:43 ] >568 の箇条書きをもとに >571-573 のニュアンスを加えて文章にしてみた。 [[ アプリケーション組み込み用の小規模言語についてのスレです。 話題の中心はLua、Squirrelですが他の言語もOK。 ]]
575 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 23:46:17 ] 1に何書こうが誰も読みゃしないのでスレタイに注意を払うべき
576 名前:デフォルトの名無しさん [2007/11/11(日) 03:59:09 ] >>559 > 【Lua】組み込み言語統合【squirrel】 に一票
577 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 06:37:50 ] スレタイとは全然関係ないことなのですが、いくつか質問があります。 よろしくお願いします。 1,luaの実行を内部から一時停止、外部から再開する方法にcoroutine以外のやり方はありますか? 2,luaの実行を外部から一時停止&再開することはできますか? 3,フックされた関数からluaを一時停止させることはできますか?
578 名前:577 mailto:sage [2007/11/11(日) 07:45:09 ] スレタイとは関係あります 「スレタイ変更とは関係ありません」でした><
579 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 20:12:36 ] >>577 1、2はファイバorスレッドorプロセスが絡む話なの? そうであればやり様はいくらでも有る。実行コンテキストを 変えずにという意味であれば他に方法は無いと思う。 3、”フックされた関数”=>”Luaから呼ばれたC言語の関数”という 意味であればlua_yieldを使うかcocoを使うか。
580 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 01:03:42 ] >>579 フック関数からyieldできるなんて意外でした。 ありがとうございます。
581 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 15:41:09 ] C側から実行されたluaプログラムを gdbやvcのような環境でデバッグできませんか?
582 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 16:11:03 ] できない だけど、Lua専用IDEからならできるよ Decoaだっけ
583 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:55:43 ] >>581 Decodaは割合評判いいらしいね。 他に名前聞いたものとしては VSLua(有料) LuaEdit(無料・微妙というか未完成) wxLuaにもビジュアルデバッガついてたような気がするけど、embed環境で動かせるかどうかは不明。
584 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 19:26:16 ] >>592 >>593 Decodaいいですね。組み込みで使いたかったです。 LuaEditも試してみたのですが、luaをdllにする必要があるのと、 そのdllのバージョンを合わせるのが大変で途中でやめてしまいました。 luaの自作ライブラリをdllにしてしまった方が早そうな感じです。 どもでした。
585 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 19:36:03 ] >>592 >>593 の人よろしく
586 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 21:47:01 ] ループの先頭に戻るという処理は、 continueでしょうか、nextでしょうか? ttp://uri.sakura.ne.jp/~cosmic/yuno/lab/lua5_manual_ja.html この辺を参考にしているのですが、breakなどしか見当たらなくて困っています。
587 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 22:15:10 ] >>586 何故か無い
588 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 22:32:33 ] continueないんだよねー 海外でもこの話題ちらほら見かけるけど。何故無いのかは知らない。 "continue" construct in Lua loops ttp://lua-users.lua.org/lists/lua-l/2006-12/msg00440.html
589 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 23:11:01 ] なるほど、Luaには存在しないんですね。。 レスありがとうございました。
590 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 05:35:00 ] 新しいバージョンが出ると誰かがcontinueパッチを作ってるはず
591 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 14:31:58 ] continueが必要なループはイテレータのようにfunction作成してreturnしてる。 breakも必要なときは返値で判定。
592 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 15:05:18 ] breakはまだしも、continueをreturnで代用? コード汚そう。
593 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 15:55:19 ] prototype.jsのeachのようになるからそんなでもない。
594 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 15:57:24 ] いちおう言っておくと「だからcontinueいらない」って話ではなく。 continueあったほうがそりゃ素直に書けるしなあ。
595 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 18:31:11 ] >>593 汚いじゃん
596 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 18:35:45 ] >>593 最悪レベルの汚さだと思う
597 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 00:10:47 ] Lua本(゚∀゚)コター!! ttp://staff.aist.go.jp/yutaka.ueno/lua/docsjp.html
598 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 00:47:15 ] コタワァ*:.。..。.:*・゚(n‘∀‘)η゚・*:.。..。.:* ミ ☆
599 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 01:21:05 ] しかも今年中の予定か。 実現したら自分へのクリスマスプレゼントにする……っ!
600 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 01:26:39 ] なにかの死亡フラグに見えた
601 名前:デフォルトの名無しさん [2007/11/20(火) 15:30:26 ] 日本語解説書期待age
602 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 08:30:15 ] かつてPascalにもbreak、continueなくて、 まあそれでも別に困らんかったから、 改造してまで付けるほどでもないなワシは
603 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 23:13:33 ] SJISのソース内にリテラルを埋め込む際の文字化けについて悩んでいるのですが、 文字化けする2バイト文字の一覧のようなものってどこかに載っていないでしょうか?
604 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 00:40:33 ] >>603 文字化けはエスケープシーケンスのせい。 "abc"じゃなくて[[abc]]使うといい。
605 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 11:15:33 ] やったー 予約始まってるよー^^/ 入門Luaプログラミング www.amazon.co.jp/dp/4797342722/
606 名前:デフォルトの名無しさん [2007/11/30(金) 12:58:19 ] 一ヶ月後か 期待age
607 名前:デフォルトの名無しさん mailto:age [2007/11/30(金) 14:01:17 ] www.nicovideo.jp/watch/sm1634783
608 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 15:22:14 ] hoshu
609 名前:デフォルトの名無しさん [2007/12/08(土) 16:49:38 ] squirrelのリファレンスマニュアルの日本語訳ページが404な件
610 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 23:14:42 ] Google cache からまだ一応読めるね。 そういえば以前にも一回読めなくなったときがあったけど、 そのときはサイト全体が読めなかった。
611 名前:デフォルトの名無しさん [2007/12/09(日) 09:57:13 ] >>609 うあーー ac.jpなのを忘れてた orz 保存しとけばよかった つーか、ac.jpの人って、卒業したら消えるんだよな・・・大抵
612 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 10:09:16 ] 9月でD論通ってるから卒業か
613 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 15:36:33 ] >>609 googleキャッシュかInternet archive行けばまだ間に合う
614 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 01:31:14 ] hoshu
615 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 17:31:29 ] あるlua_Stateのクローンが作りたいのですが、 グローバルステートを含めすべての内容をコピーすることは可能ですか?
616 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 01:33:58 ] squirrelの質問です。 スレッドで使って下の関数をコールするとsuspendでC++側に処理を返したときに a、bのデータが壊れてしまいます。 function CallSuspend(i, j, k, l, m, n, o) { local a = 23; local b = 32; while(1) { suspend(); print("i = " + i + "\n"); print("j = " + j + "\n"); print("k = " + k + "\n"); print("l = " + l + "\n"); print("a = " + a + "\n"); print("b = " + b + "\n"); break; } }
617 名前:616 [2007/12/21(金) 01:40:57 ] どうやらsq_call関数で関数実行後にスタックをポップしている部分でデータが壊れているようです。 suspendはwakeupでまたスクリプトを起動するのだから、引数の数だけポップする意味がわかりません。 これはバグなのでしょうか? ちなみに自分の使っているsquirrelのバージョンは2.1.1です。 SQRESULT sq_call(HSQUIRRELVM v,SQInteger params,SQBool retval,SQBool raiseerror) { SQObjectPtr res; if(v->Call(v->GetUp(-(params+1)),params,v->_top-params,res,raiseerror?true:false)){ v->Pop(params);//pop closure and args ←※ここ if(retval){ v->Push(res); return SQ_OK; } return SQ_OK; } else { v->Pop(params); return SQ_ERROR; } if(!v->_suspended) v->Pop(params); return sq_throwerror(v,_SC("call failed")); }
618 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 10:05:07 ] いきなりソース覗きこんでバグだバグだ騒ぐ前にまずはちゃんとマニュアルを読めよ…
619 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 10:54:35 ] >>618 どういうことですか? 知っていることがあるなら教えてください。お願いします。
620 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 11:04:12 ] リファレンスのsq_callの説明にはこう書いてありました。 >この関数はすべての引数をpopし、スタック上のこのクロージャを取り除く。 >もしretvalがtrueであるなら、クロージャの戻り値がpush される。 >もし関数実行がsq_suspendvmによって中断されたなら、クロージャと引数はスタックから自動的にpopされない。 しかし、自分が実際に追ってみた限りではsuspendでsq_callを抜けた後に引数をポップする処理は実行されています。 それがlocal a,bを破壊しているようなのです。
621 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 22:08:56 ] バグじゃないっつーの とりあえずなにがしたいのか書こうよ 「これはバグですか?」じゃ作者に失礼すぎるぞ てめーを卑下しまくる前にちょっとは他人のことを考えようよ
622 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 22:20:18 ] >>621 616の関数を実行して無事に終了したいだけです。 suspendで処理がC++に帰った後、sq_wakeupvmでスクリプトを再実行したらstackからlocal a,bが消えていて printでnullを参照してしまうという問題を解決したいんです。
623 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 22:29:42 ] >>621 ここは作者の掲示板ではないが、 現象が再現するミニマムコードを掲載して、仕様と挙動が異なっている点を報告したうえで、 それがバグかどうかを質問する、ってのは別に失礼でも何でもないと思うけどな。
624 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 23:39:26 ] >>623 これは現象が再現しない断片コードだし、仕様を取り違えてるし そもそも一定の条件を満たしていると自分では思えるというだけで 相手に失礼ではないなんてまたどこまで自分勝手な理屈だよ 常識的に考えておかしいだろ
625 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 23:46:38 ] >>624 >>616 は現象が再現しない、って試したの? あと作者でもないのに、作者に失礼すぎるぞ、なんて言うのも充分に自分勝手な理屈だと思うけどな
626 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 23:47:13 ] >>624 もったいぶらないで教えてやれよ。 無駄レスが多すぎる。
627 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 23:55:38 ] >>626 残念ながら2chとはそういう場所なのです。
628 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 23:59:24 ] とりあえずSquirrelユーザーがキモいというのはわかった この際原点に戻ろうじゃないか 入門Luaプログラミング www.amazon.co.jp/dp/4797342722/
629 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 00:07:36 ] 仕様取り違えてると分かってるのなら、ここをこう取り違えてるよーって言ってやればいいだけなんじゃないの? そんな、作者に失礼とか自分勝手とか卑下しまくってるとか言わんでも… ちなみに俺はよく分からんけど、>>616 の動作は期待に反している感じはする。仕様は知らない。
630 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 00:10:01 ] >>625 断片だから試せない >あと作者でもないのに、作者に失礼すぎるぞ、なんて言うのも充分に自分勝手な理屈だと思うけどな 俺作者だよ 当然のことながらsquirrelのじゃないけどね 作ってるものが馬鹿からバグ呼ばわりされたときどんな気持ちになるかは分かってるつもり
631 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 00:55:43 ] >>630 試してないのなら「再現しない」などと断定するなよ。 >>617 の箇所のコードを書いた人間の身になって考えると、確かに 一部のコードを載せられて「これはバグか?」と言われるのは 面白いものではないだろうし反論したいことも沢山あるだろうが、 質問に対する回答は一切無く、その感情に任せて馬鹿とか自分勝手とかてめー呼ばわり するだけってのは作者であろうがなかろうが人間性を疑ってしまう。
632 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 01:22:15 ] とりあえず問題がおこる「呼び出し側のコード」を書こうぜ>623 そうしないと使い方がおかしいかどうかすらわからん。 予想:引数の数を間違えてる
633 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 02:02:25 ] 引数の数間違えたら、実行する前に落ちるんじゃないか?
634 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 02:15:54 ] 引数の数が違ってると関数呼ばれないね
635 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 02:20:35 ] とりあえず>>632 がsquirrel使ってないってのはわかった
636 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 02:26:24 ] >>631 断片で不完全なものは試せるはずがない試せないものは再現するはずがない 再現するかどうか観察しなくても断片で動かないんだから再現するはずない 事実を述べてるにすぎないよ >質問に対する回答は一切無く ちょっとずつリードしてあげてるじゃん すぐに解決策が示されるとでも思ったか?俺の人間性が疑われようが甘えはゆるさん
637 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 02:58:27 ] >>636 甘えを許そうが許しまいがお前さんの勝手だが、それをスレ住人に強要するなよ レス数はとても少ないがここは色んな人間が見てる 自分のポリシーを他人に強要したり、それを守れない人間を罵倒したいのなら自分の掲示板でやれ
638 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 03:22:11 ] squirrelよく知らないけど616を参考にしてやってみた function CallSuspend1(i, j, k, l, m, n, o) { local a = 10; local b = 20; print("Enter CallSuspend1\n"); while (1) { suspend("abc"); print("i = " + i + "\n"); print("j = " + j + "\n"); print("k = " + k + "\n"); print("l = " + l + "\n"); print("a = " + a + "\n"); print("b = " + b + "\n"); break; } print("Leave CallSuspend1\n"); return "done."; } local co = newthread(CallSuspend1); print("Call CallSuspend1\n"); local ret = co.call(1,2,3,4,5,6,7); print("ret = " + ret + "\n"); print("Wakeup CallSuspend1\n"); ret = co.wakeup(); print("ret = " + ret + "\n");
639 名前:638 mailto:sage [2007/12/22(土) 03:23:12 ] 結果 Call CallSuspend1 Enter CallSuspend1 ret = abc Wakeup CallSuspend1 i = 1 j = 2 k = 3 l = 4 a = (null : 0x00000000) b = (null : 0x00000000) Leave CallSuspend1 ret = done.
640 名前:638 mailto:sage [2007/12/22(土) 03:36:38 ] 617 の ※ここ の部分を if (!v->_suspended) v->Pop(params); に変更して同じコードを実行すると Call CallSuspend1 Enter CallSuspend1 ret = abc Wakeup CallSuspend1 i = 1 j = 2 k = 3 l = 4 a = 10 b = 20 Leave CallSuspend1 ret = done.
641 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 03:46:14 ] >>638 ありがとう! やっぱり他の人がやってもそうなるんですかー 638さんはスクリプトから実行しているようですが、 自分はC++から呼び出して実行してました。 >>640 自分も同じ方法で対処するしかないのかなと思ってました。 これって結局仕様なんですか?
642 名前:638 mailto:sage [2007/12/22(土) 03:48:05 ] call と違う順番で wakeup してみる function CallSuspend2(i, j, k, l, m) { local a = 10; local b = 20; print("Enter CallSuspend2\n"); while (1) { suspend("abc"); print("i = " + i + "\n"); print("j = " + j + "\n"); print("k = " + k + "\n"); print("l = " + l + "\n"); print("m = " + m + "\n"); print("a = " + a + "\n"); print("b = " + b + "\n"); break; } print("Leave CallSuspend2\n"); return "done."; } local co1 = newthread(CallSuspend2); local co2 = newthread(CallSuspend2); local co3 = newthread(CallSuspend2); print("Call CallSuspend2\n"); co1.call(1,2,3,4,5); co2.call(10,20,30,40,50); co3.call(100,200,300,400,500); co2.wakeup(); co1.wakeup(); co3.wakeup();
643 名前:638 mailto:sage [2007/12/22(土) 03:49:23 ] 結果 Call CallSuspend2 Enter CallSuspend2 Enter CallSuspend2 Enter CallSuspend2 i = 10 j = 20 k = 30 l = 40 m = 50 a = 10 b = 20 Leave CallSuspend2 i = 1 j = 2 k = 3 l = 4 m = 5 a = 10 b = 20 Leave CallSuspend2 i = 100 j = 200 k = 300 l = 400 m = 500 a = 10 b = 20 Leave CallSuspend2
644 名前:641 mailto:sage [2007/12/22(土) 03:49:29 ] あ、それと今さらなんですが>>616 のコードでwhileしてるのって意味ないんですよね いろいろ試してる過程の残骸ですので無視して下さい
645 名前:638 mailto:sage [2007/12/22(土) 04:05:19 ] sq_call が sq_throwerror を呼び出す前に if (!v->_suspended) v->Pop(params); でsuspendしているときはスタックを整えていないことから考えるとバグかも
646 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 04:06:59 ] >>644 Squirrel全然分からん(昔Hello World試したくらい) けど、勉強がてら俺も>>616 試したら同じ結果になった。 ちなみに引数の数を 7つから変更(呼び出し元も変更)していくと、 3つになったところでbが正常になり、2つになるとaもbも正常になった。 これが仕様だとすると何か根本的根本的に使い方間違ってんのかな? sq_call とか sq_wakeupvm とかの引数とか色々変えてみたけど、勉強がてらなんでまだよく分からん。 整理できたら多少空気読みつつ晒してみる
647 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 04:08:59 ] >>630 で吹いた。ギャグだとしたら高度だ。
648 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 04:10:37 ] >>645 あまりバグバグ言うとまた五月蝿くなるからやめとけ
649 名前:632 mailto:sage [2007/12/22(土) 04:13:48 ] すまん、ばりばりつかってるんだが適当ぶっこいたんだ。 おわびにってことで俺もしらべてたんだが、既に638 で結論でてた… function test(i,j,k,l,m) { local a = 10; local b = 20; for (a=0;a<10;a++) { suspend(); print("a=" + a + "\n"); print("b=" + b + "\n"); } print("done"); } a <- newthread(test); a.call(1,2,3,4,5); while (a.getstatus() == "suspended") { a.wakeup(); } こんなかんじのコードで簡単に再現できる。test の引数の数を減らすと ローカル変数が破壊されなくて止まらなくなるので、sq_call での引数の解放でローカル変数を 破壊してるという、641の推測は正しいと思う。どういった修正が適切かは断言できないけど、 バグなのは間違いないので、本家に報告したほうがよさそう。 自分の手元でこの種のスレッドの suspend を使ったコードはいたるところにあるんだが なんでいままでトラブルなかったんだろう、とおもってコードを見直したら、 パラメータは bindenv したオブジェクトのメンバ経由で渡してて、引数を全くつかってなかったよ^^;
650 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 04:15:59 ] >>646 まさにまさに! 自分もまさか4つ以上引数を渡すのはダメとかそういう仕様じゃないよな? でもこんなイージーなバグがあるわけないよな? てな具合にずっと悩んでたんです!
651 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 04:26:04 ] >>649-650 だからバグだバグだと騒ぐなと
652 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 04:42:00 ] 君もこんな過疎地でオタ共を統率して悦に入ってないでニュー速だかvipだかにでもお行きなさいよ
653 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 04:47:46 ] あー読んでてやっと分かった。 スタック上にローカル変数があろうが無かろうが、suspend時点でのスタック変数を引数の数だけ問答無用で開放してしまうのか。 なんで>>646 みたいに現象は引数の数に変化を受けると。 で、単に使い方が悪いのかバグなのかは不明だけど、 squirrelのコードを>>640 の通りに変更すれば少なくとも、この問題は解決、と。
654 名前:649 mailto:sage [2007/12/22(土) 04:56:40 ] とりあえず下手な英語だが本家にバグとして報告しといたよ。たぶんそのうち適切な対策とってくれるだろう。
655 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 05:08:02 ] ほげげ氏・・・w ところどころ動詞やらが可笑しいけど伝わるな Unknown table ってのは内部用のローカル変数のテーブルか何かなのかね? 他のスレも見てみたけど本家のフォーラムって意外と閲覧数少ないんだな・・・
656 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 09:53:25 ] squirrelは別のとこでやれよ
657 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 10:28:10 ] Luaの本はまだなのか。
658 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 11:48:48 ] >>656 前スレ&現行スレ嫁