1 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 09:11:41 ] LuaやSquirrelなどアプリケーションへの組み込み用途で 使われるプログラミング言語についてのスレッドです まとめwiki(なにか質問する前に必ずみること!) wikiwiki.jp/lua/ その他の参考URLは>2から ■前スレ 【Lua】組み込み系言語総合【Squirrel】 pc12.2ch.net/test/read.cgi/tech/1205208141/ ■過去スレ その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
204 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 16:14:07 ] >>203 いや、C++で書いてたころは普通にSquirrel使ってたよ。 とりあえず基本的なレベルでの不満はない。 オブジェクトの寿命は常に問題になるけどね。 今はもうC++でプログラムは書かないようにしてるから関係なくなった。
205 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 18:40:24 ] >>204 気になるなw > 今はもうC++でプログラムは書かないようにしてるから関係なくなった。 今は何で書いてるんですか? .NET系?
206 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 05:46:32 ] >>204 C#+IronPythonだ。レポはこのスレに何回も書いてるのでログを見てくれ。 しかし静的型付言語でいいならBooでもいいかも……(はっきり言ってこっちの方が速いし) まあ今回は途中まで作ったからIronPythonでやってしまう予定だけど。
207 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 05:47:14 ] 204 → 205
208 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 12:21:55 ] Luaステートを増やした(同時実行した)場合のGC負荷は 単純計算でステート数分増えるのかな? 検証してるサイトないか探したけど見当たらない
209 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 12:29:14 ] そりゃ当たり前のことを検証する人は居ないだろう
210 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 13:35:48 ] たまにLuaではcontinueやbreakは出来ないが それを可能にするパッチがある、とあるけど 実際どこで配布されてます? ここ数日ずっと探してるけど見つからず
211 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 16:57:50 ] breakはできるだろ continueは lua-users.org/wiki/LuaPowerPatches とか lua-users.org/lists/lua-l/2009-06/msg00331.html だな。
212 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 18:56:28 ] 初心者な質問なのですが、 VC++6.0でLua環境を構築しています。 「スクリプト言語による効率的ゲーム開発- C/C++へのLua組込み実践」 の中で 紹介されているtolua++を適応しています。 あるクラスの関数をtolua++を用いてLuaに公開しようと実装したのですが、 extern宣言した関数がリンカエラーでビルドする事が出来ません。 やりたい事は下記の様な感じです。 class CHoge { public: char* GetName( CHage* pHage ); }; このGetName関数をtolua++でグルーコードに出力して、 VCのプロジェクトに登録しています。 出力したグルーコードに記述されている、GetName関数がリンカエラーになってしまいます。 *今はグローバル関数にして、extern宣言で対応しています。 クラスの関数をLuaに公開するには何か特別な方法が必要なのでしょうか? 上記の本にはクラスの関数の場合について記述されていない様なので質問しました。 宜しくお願いします。
213 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 20:20:58 ] >>211 thx、無事適用完了しました
214 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 04:29:51 ] >>212 www.codenix.com/~tolua/tolua++.html#classes ここみると、クラスごとバインドするしかなさそう。 あるいは、登録したい関数をクラスメソッド(static 宣言)にするといいのかな。
215 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 17:54:33 ] Luaでチャンクの区切りを改行ではなく ; (セミコロン)にしたいのだけど それを可能にするパッチとか出てたりします? 自分で改造しようにも手に負えなくて
216 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 18:01:45 ] 配列を0から扱えるように悪銭苦闘したオレに似てるな オレの場合は自力でやったけど複雑過ぎて無理だった orz Luaってなんで配列が1からなのかね いまでもムズムズ、どうにかならないものか
217 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 18:28:12 ] lparser.cのstatement()のswitch文のreturnの前に check(ls, ';'); って書けばいいんじゃないかな
218 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 22:06:32 ] 社会常識は1からだからな。
219 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 23:39:10 ] マジでLuaの配列を0から扱えるようにするpatchありませんかね?
220 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 01:28:23 ] >>214 回答ありがとうございます。 クラスのバインドで試してみます。
221 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 12:03:44 ] >>216 ニューメリカルレシピ・イン・C っていう本にその逆のことが書いてあったな。 一般的な数学では添え字は 1 からはじまるのに C だと 0 からだから困ると。 で、その本では添え字を 1 から始めるように、配列のポインタを 1 つ前にずらしてた。 つまり、int arr[10] みたいな配列をつくったら、 int *arr1 = arr - 1 と定義しておけば、arr1[1]、arr1[2]、……、arr1[10] っていうふうにアクセスできる。
222 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 12:29:33 ] Fortranな人のための小ワザだけど、 厳密には、配列の範囲から外れたところを指してるポインタに まつわる動作は未定義なので、仕様に煩い人には不評。 (C FAQ より ttp://c-faq.com/aryptr/non0based.html )
223 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 13:11:48 ] >>215 >>219 SquirrelとかAngelScriptじゃダメなの?
224 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 13:16:16 ] そもそも0とか1とかいうマジックナンバーを使ってはいけない。 パッチではなく、リファクタリングするべき。 #define FIRST 1
225 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 13:16:36 ] 言語はそのままの仕様で使うのが無難ではあるよなー
226 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 13:21:29 ] >>223 Lua以外にするとメモリ消費や処理速度が劣ってしまうのが嫌で やっぱり仕様に従って使うしかないですか
227 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 14:04:47 ] ∩∩ ; ;|ノ||` ┬-‖ __,/●●| __ | | ‖ L...Lua.. | ; |`(_●)/ ミ . Y ‖ | .彡|∪||、 , .| | ‖ /:~ ̄ ̄ ̄ ̄:/.| | ‖ ,|:::::. .......::/>> / ‖ /.::::: .. ...::::::|'(/\_/ ‖ ../:.::: .. :.:::/.:/ /‖\ /.:::. ....:::..:::/.:/ ' ̄ ̄ ̄ ̄ ̄ _/ |_| ̄ ̄ ̄ ̄|_|
228 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:31:00 ] BASICでも配列作ると0からなのに・・・・
229 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:57:15 ] ここは中間をとって0.5に
230 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:28:51 ] BASIC はたいていの実装が OPTION BASE とかで配列の開始インデックスを変更できるぜ
231 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:37:21 ] もう連想配列だけにしちゃおうぜ
232 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:24:33 ] >>230 なつかしすぎてどっかから鼻血でたわw
233 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:41:07 ] 0からってのはポインタ的な発想で好かんわ
234 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 13:50:08 ] Pythonでシステム組んでるが、配列のインデクスが何番からかほとんど意識することないな。 for文ではそのままイテレータをまわしてしまうし。
235 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 19:50:43 ] Lua標準だと1ステートあたりのスタックサイズは1Kだけど 消費を抑えたくて手動設定する場合 どれくらいの値がベストだろう?
236 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:42:36 ] デフォで使用メモリ量が80MBを越える俺の構築した処理系からすれば、 数十キロバイトの仮想スタックなんて小さな問題だ。
237 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 01:41:47 ] 新しい必殺技を思いついた >>236 に捧ぐ "O"zapper!!
238 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 03:42:20 ] 次こそはうまくやりますコンピューター!
239 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 19:42:49 ] >>232 「どっかから」てお前はケツから鼻血がでるのかよw >>236 RubyでフレームワークとしてRailsを搭載したかのようなメモリ消費量だなおいw
240 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 19:52:53 ] >>239 IronPythonがもりもりメモリ食うからな。 ほんと環境にやさしくないスクリプトエンジンだぜ。 まあ、C#で組むにはこれが一番「普通」なスクリプティングエンジンなので。
241 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 21:24:50 ] IronPythonすげえwそんなにメモリ食いすぎなのかw
242 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 02:42:38 ] luaについてちょっと質問なんだけど、 乱数を表示させたあとに、もう一度同じプログラムを実行すると シード値が変わらずにまったく同じ乱数が表示されてしまう。 どうすればこのシード値を初期化して、実行するたびに違う乱数を 表示させられるの?
243 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 02:54:44 ] それこそシード値を「適当に」初期化してやればいい。 一般的には、タイマーの値とか、ユーザ入力の時間差を測定したりして、それを srand() につっこんで対応する。
244 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 03:04:26 ] >>243 レスありがとう まだはじめたばっかりでホームページさがしながらの手探り状態なんだけど、 math.random()で()の中に1から10までの値をいれるよね? そしたらそれ以外にmath.randomseedを書けばいいってこと?
245 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 03:16:42 ] そう。 プログラムの頭で math.randomseed(os.time()) とでもしておきなされ。
246 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 03:22:08 ] できました! 本当にありがとうございました。 これからもっと勉強してきます
247 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 13:48:26 ] 実行中のLuaスクリプトを停止させるには lua_errorで強制的に例外を発生させる方法以外に 何かありませんか? 1つのスクリプトを実行する一般的な使い方なら問題ないのですが スレッド毎で同時に複数のスクリプトを実行させる場合 リソースの保護をしても違うスレッドからスクリプト(ステート)を閉じようとすると 原因不明のエラーで強制終了してしまいます
248 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 14:52:00 ] >>247 コルーチン化していつでも終了できるように作っておくのがLWL流 :)
249 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 14:57:04 ] つlua_yield
250 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 15:03:25 ] >>248 肝心な部分を説明し忘れてました 私が今作ってるのは>>190 の方が言われたような luaを同時実行させてプラグイン機能を実現するもので それをコルーチンでやるとなると実質スレッド1つで 全処理をすることになるのでCPUリソースの消費が激しく ステートも一つだから変数の重複などが問題になって それらを回避するためにマルチスレッド上で それぞれスクリプトを動かす必要があるのです しかしあるプラグインでエラーが起こり それに関連するスクリプトを全部停止(解放)したい時 現スレッドから他スレッドのステートを閉じようとすると 強制終了につながるエラーが起きてしまう状況で
251 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 15:35:28 ] >>250 ちがうよー。 コルーチンというのはプログラマが入力した任意のタイミングで 動作を中断できるようにした仕組み(yield)のことであって、 それを使って複数の仕事を1スレッドで同時に実行というのは二次的なものに過ぎないんだよ。 したがって複数のスレッドで実行しても(エンジンの実装に問題が無いなら)問題ない。 で、中断されて制御が戻ってきたタイミングでそのまま開放してあげればいい。
252 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 15:54:24 ] >CPUリソースの消費が激しく >変数の重複などが問題 ↓ >強制終了につながるエラーが起きてしまう状況 戦況が悪化してるが、今さら撤退する気はない 典型的なパターンですね
253 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 16:07:52 ] >>250 lua はスレッドセーフじゃないから、別スレッドからの制御は根本的にできないよ コルーチンでうごかせってのは、呼び出しに lua_call を使うんじゃなくて、lua_resume と while ループでスクリプトを駆動させて、スクリプト側では定期的に yield するようにすれば、 その区切りで安全に実行中断できるよ、ってこと。 それぞれのスクリプトはそれぞれのスレッドで立ち上げて、ほかのスレッドから停止させるときは フラグをたてておいて、そのフラグがたってたらwhileを抜けて速やかにスレッドを自滅させる ような書き方にする。 コルーチン駆動&記述が面倒ってことなら、裏技チックだけど、lua_sethook を使って、 関数呼び出し、ないしは行ごとに終了フラグチェックさせて、もしフラグたってたら lua_error で速やかにスクリプトを abort させるという手もある。 残念ながらhookにユーザパラメータは存在してないので、変数かレジストリに 参照するフラグのCポインタを格納しておく、とかの小ざかしいテクが必要。
254 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 16:12:26 ] なるほど Luaスクリプトを同時実行する際は マルチスレッドのみでの制御は無理ということですか 改めてコルーチンについて勉強し直してきます どうも助かりました
255 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:04:30 ] スレッドって名前が紛らわしいな。 関係ないかもしれないが、非推奨な手法を使いにくくするとかいう話を思い出した。
256 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 23:15:46 ] Luaは普通の呼び出しと、lua_yieldで一時停止して再度呼び出す場合とで使う関数が違うのが面倒くさくて逃げちゃったな俺… AngelScriptだと同じ呼び出し方でOKなんだよなぁ…
257 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 05:43:27 ] >>256 coroutine.wrap をつかえば、普通の関数呼び出しと同じように resume もできるよ。
258 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 11:25:20 ] 変態文法&バイトコードがエンディアン依存なluaを広めるのやめようぜ 手間が増えてスクリプトにしてる意味がねえよ
259 名前:デフォルトの名無しさん [2009/10/15(木) 11:27:46 ] luaって、oracleにアクセスするライブラリないですか?
260 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 22:50:58 ] JavaからLuaを使うことってできる?
261 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 23:24:54 ] JavaからC言語を使うことってできる?
262 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 10:56:47 ] >>259 www.keplerproject.org/luasql/ Lua for Windows についてくるよ。使ったことないけど。 luaforwindows.luaforge.net/
263 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 11:14:25 ] >>259 というかそんな『重い』プロダクトを扱うなら、 素直にPythonやRubyなんかのライブラリの整備されたスクリプト言語使ったほうがよくなくね?
264 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 11:16:27 ] まあそんなこといいつつ、俺もPythonで軽量なDBラッパー探したら見つからなかったので ActiveRecord互換のORMライブラリを自作したんだがな。
265 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 11:24:25 ] >>258 Luaの速度に魅力を感じてる人がなんとなく多い気がするね。 あとは、リスとかに比べるとドキュメントの多さなんかが人気の秘訣?
266 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 11:27:28 ] 某MMORPGで使っているからだったりして。
267 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 12:17:07 ] ああ、別にROに限らず採用実績っていうのは使う基準に十分なるだろうし。
268 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 12:25:08 ] 組み込みに求められるのは速度と少ないメモリ消費だから 多少なりと癖があろうとlua使っちゃうんだよね 他に比べて採用例も多い分、多言語との連携も充実してるし
269 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 12:53:36 ] ORMの次は、C/C++とスクリプトのマッピングだ、というアナロジーだけで 動いてるやつがいるような気がしてきた
270 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 13:04:45 ] >>組み込みに求められるのは速度と少ないメモリ消費だから なんで? 別にそれは前提条件にならないと思うけど。 オレはゲームシステムを組んでいるところだが別にメモリ消費量は大して気にしてないぞ。 速度は大切だが、どうせ1スレッドでは間に合わなくなるのでマルチスレッド化するし、 ボトルネックはスクリプト部分ではないので問題ない。
271 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 13:14:26 ] ヤマハ RTX1200 に Lua 実行機能搭載だってさ ttp://www.rtpro.yamaha.co.jp/RT/docs/lua/index.html
272 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 13:17:06 ] AngelScript使おうぜ
273 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 13:37:08 ] まぁ、なんだかんだでluaが一番なんだけどね
274 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 13:58:37 ] >>273 俺はそうは思わないけどな……。 触ったことあるけど文法がちょっと癖あるし、整数型がないし。 Pythonの方がよっぽどいい。
275 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 14:01:01 ] >>274 いやいや、個人的にではなく一般的にね 上でも出てるけど書籍や採用例が多いとかさ
276 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 16:06:28 ] このスレはIronPython使いと、AngelScript使いが一人ずつ常駐してるんだなw
277 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 17:20:01 ] こんだけで組み込み言語として使えるわけで、 ttp://alpha.mixi.co.jp/blog/?p=236 でもphpに組み込みってなんだ。 ttp://www.mediawiki.org/wiki/Extension:Lua まあPECL拡張は2年前で止まってるみたいだけど
278 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 00:50:19 ] PHPはインタプリタを組み込めないライセンスだからなー。 この制限さえなければ今までなかった用途が色々できると思うんだけど。
279 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 15:11:07 ] >>278 ??どういうこと?
280 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 15:38:39 ] >>279 うう〜ん……。問われたので改めて調べてみたが、どうやら間違った認識が一部あったようだ。 PHPインタプリタ本体はPHP License 3.01で配布されていて、 こいつは ・配布するソースコードまたはドキュメントに著作権表示、ラインセンス本文を記載すること ・PHP Groupから許可を得ずにPHPという名前を使用しないこと (PHP Fooやphpfooはだめ。Foo for PHPはOK) ・文言の表示強制("This product includes PHP, freely available from <www.php.net/> ") だけだな。インタプリタ自体を内蔵することは問題なさそう。 契約なしに内蔵できないのはZendライブラリなんだそうな。 (Zend Frameworkは修正BSDライセンス。Zendライブラリとは何ぞや?)
281 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 23:30:49 ] ここでzlibライセンスのSquirrelとAngelScriptの出番ですね!
282 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 01:54:10 ] luaスクリプト上でコルーチンを作成をした場合は 明確的に破棄する方法はないようなのだけどC側から //コルーチンを実行するのスレッド(ステート)を作る lua_State *L = lua_newthread(luaL_newstate()); //C側からコルーチンの操作 //コルーチンのスレッドを閉じる lua_close(L); とした場合はコルーチンを実行する為に確保されたメモリは解放されますよね?
283 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 03:54:02 ] そいや、Ioって言語はどうよ? シンプル、軽量というのが売りらしいが。
284 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 09:02:18 ] >>282 lua_newthreadで作成したコルーチンはlua_closeしちゃ駄目だよ。 開放はGCにまかせる。>>121 あたりから同じ様な質問出てるから見てみ。
285 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 09:33:44 ] >>284 指摘ありがとうございます つまりスタックに積まれたコルーチンのスレッドを lua_popで削除すればいいのですか でもそれだとGCまかせでスグにコルーチン破棄はされないので >>282 のを //コルーチンを実行するのスレッド(ステート)を作る lua_State *L = luaL_newstate(); lua_State *T = lua_newthread(L); //C側からコルーチンの操作 //ステートを閉じる lua_close(L); とすれば閉じるのはコルーチンのステートではないものの lua_newthread は元のステートのオブジェクトを共有するみたいなので コルーチンで確保されたメモリも同時に解放されますよね?
286 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:07:08 ] >コルーチンで確保されたメモリも同時に解放されますよね? まぁ、そらそうだが。 任意開放ならlua_gcじゃ駄目な理由でもあるの?
287 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:29:55 ] 駄目な理由はないのだけど GCという目に見えない物に頼るより 自分で明確的に管理したくて
288 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:37:32 ] つまりC#くそくらえってことですね
289 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:43:50 ] (#^ω^)
290 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 11:14:07 ] (C#^ω^)
291 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 11:22:19 ] (Ruby#^ω^)
292 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 11:27:18 ] >>287 Luaでは文字列もテーブルも関数もuserdataもGCで管理されてる訳だが、そういうのも自分で管理したいの?
293 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 11:31:28 ] >>292 そこまではこだわってないです それらはスクリプトに自分で定義しないと生成されないから ある程度は管理出来るので
294 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 11:54:51 ] >>285 元のステートごと閉じてたら、そのコストがでかすぎて全然うれしくないと思われ。 GCいやな人は lua 使うな、が精神的には正しい。squirrel にしときなされ。
295 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 12:06:48 ] >>283 遅い 検索しづらい
296 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 12:07:49 ] >>283 言語としては面白いよ 組み込みも簡単に出来るし でもWinの開発環境を整えるの面倒
297 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 12:26:45 ] ネットでの検索しやすいのさは大切だよね iPhone 3G S もジョブスが発表後に iPhone 3GS に改名させたそうだ
298 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 12:28:16 ] > ネットでの検索しやすいのさは大切だよね 「ネットでの検索のしやすさ」の間違いです… 自分でワロタ
299 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 12:37:33 ] >>294 >元のステートごと閉じてたら、そのコストがでかすぎて 具体的にkwsk
300 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:09:55 ] >>299 や、普通にグローバルな関数や変数も全部毎回順次解放&登録しなおすハメになるじゃん そういったコストを下げるために共有させる仕組みなのに本末転倒だろう それぞれのスレッドが完全独立で頻繁に起動するものでもないのなら止めはしない。
301 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:17:45 ] >>285 を見る限りコルーチンを実行し終わった時に 不要になったのを解放するのだから問題ないでしょ
302 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:09:07 ] 実際にはluaL_openlibsが必要だからコストが大きいよ 擬似コードにはいちいち書かないだろうけど 擬似コードを書くとどうしても、目に見えない物に頼りがちだよね
303 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 16:00:28 ] ちょっと前にLuaで乱数を作っていたものだけど 今度は重複しない乱数を表示させたいと思っている。 でも何度やってもできない。。。 ヒントだけでも教えてください
304 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 16:05:01 ] そもそも重複しないものは乱数とは言わない。もはや lua とは関係ない話なので手頃なアルゴリズム系の質問スレに移るのをオススメする ヒント:シャッフル
305 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 16:19:02 ] >>304 レスありがとう ということは、最初に規定量の数値を指定しておいてそれをシャッフルすればいいってことか! ありがとう。
306 名前:デフォルトの名無しさん [2009/10/18(日) 16:59:56 ] 個人情報が流出しても、ニュー速民は困る人いないよね? tsushima.2ch.net/test/read.cgi/news/1255851428/
307 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:54:16 ] (C#^ω^)
308 名前:デフォルトの名無しさん [2009/10/23(金) 14:27:21 ] 以下のようなプログラムで クリティカルセクションの所有権を放棄し それぞれのスレッド、スクリプトの実行を 安全に終了させるにはどうしたらいいでしょうか? -- test.lua while true do foo() end -- test2.lua while true do foo() end -- main.cpp void thread1(){ ・・・ if(luaL_dofile(L,"test.lua")){ ・・・ } void thread2(){ ・・・ if(luaL_dofile(L,"test2.lua")){ ・・・ } int foo(luaState* L){ EnterCriticalSection(&CriticalSection); // 少し重めの処理 LeaveCriticalSection(&CriticalSection); }
309 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 00:21:40 ] 1つ1つのLuaステートをLua_yield使って個別に動かすのはダメなの?
310 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 00:42:33 ] あれ もしかしてAngelScriptって結構良いんじゃね? 名前が可愛いからちょっと舐めてたわ
311 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 00:51:08 ] >>310 できたら、どの辺りが気に入ったか詳しく
312 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 06:30:35 ] ついでに、このスレに常駐しているAngelScript信者の方にお聞きしたいのだが、 LuaやSquirrelと比べて優れている点は何がありまんすか?
313 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 06:39:49 ] // / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ AngelScript!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
314 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 07:09:44 ] AngelScriptの@がよくわからん。 オブジェクトの参照なのか? Hoge@ hoge; みたいなの。 C++みたいに、インスタンス入れる変数と参照がわかれているのか?(C++詳しくないからなんtねいったらいいかわからん) LLなのに面倒な言語だな… 全部、デフォで参照でいいと思うんだが
315 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 12:38:48 ] >>314 スクリプト言語の癖に静的型付言語だからなぁ。 それって本当に意味あるのか? って思ってしまう。 Booとかも触ってみてその動作速度は認めるけど、スクリプトの記述が面倒に感じる。
316 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 13:28:09 ] ActionScript3.0 もいちおうスクリプト言語だけど、静的型付言語。 まぁ、インタプリタじゃないけどね。
317 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 23:43:43 ] >>312 ・文法がC++まんまなので書きやすい ・C++との連携が簡単 ・クラスとかほぼそのまま使える ・const〜やenumなど、定数定義が可能 ・#includeも可能 こんなところか? >>314 その例だと、「Hogeクラスの参照型」って扱いになる。 C++のHoge &という記述に近い。
318 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 00:41:08 ] スクリプトを自分で改造して使いたいんですが、ライセンスが緩くて ソースが読みやすく短い組み込みライブラリのお勧めを教えてもらえませんか? 今のところLuaが最有力候補だと思ってます。
319 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 01:10:08 ] Squirrelがソース短いんじゃなかったっけ。読みやすさは知らんが。
320 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 05:11:42 ] >>319 実質としてはそんなに悪いコードではないが、しかし決して良いコードではない。 そして、SqPlusは絶対に読むな。頭が痛くなること請け合い。 それはそうと、Xtalのコードは大変いいと思うぞ。 言語自体の仕様は首を傾げたくなるところがあるが。
321 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 08:12:58 ] \ l´⌒\⌒\ \\ \ \ ヽ ) ) \\ \\ ( \ \∩___∩ \\ \ \ ⌒⌒| ノ ヽ \\ \ \ / ● ● ト、\ \\\ \ Y | ( _●_) ミ\ \\\ \ / 彡、_ |∪| ノ \ \\\ (____)―ヽノ' ヽ  ̄ ̄ ヽ\\ \, j l l .l } Lua! l (_ノノノノ
322 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 17:53:23 ] >>320 Xtalのコードは俺の頭じゃ解析不可能だからLua読んでます。
323 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 18:55:12 ] SqPlus使おうと思ったらもう全然更新してないのか いったいどれにすれバインダ
324 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 20:22:51 ] そもそもSquirrel自体全然盛り上がってないというか終わってるというか 始まる前に終わっちゃったよ的な
325 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 20:29:35 ] Lua 5.2まだー
326 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 22:01:57 ] >>323 SqPlusはダメすぎる、忘れましょう、使ってる人はたぶんいません squirrelのバインダは自分で使い易いように自分で書いた方が1024倍マシよ
327 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 22:15:15 ] そこでバインダとか無くても全然問題のないAngelScriptの出番だな
328 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 22:36:22 ] >>326 ごめん、動いてるものはさわるな原則にのっとって使い続けてる^^; 一部手はいれてあるけど。 時間あったら新しいバインダにしたいんだけどなかなか……
329 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 23:08:08 ] スクエニのゲームはSqPlus使ってるって cedecのスライドに書いてあったよね。
330 名前:318 mailto:sage [2009/10/26(月) 01:03:53 ] SquirrelとXtal読んでみます。 ありがとうございました。
331 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 02:05:58 ] こうなったらLuaとSquirrelとAngelScriptの合わせ技でいくか
332 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 14:10:36 ] angelscript初めて知った。いいなこれ!! スタックゴニョゴニョしなくていいからコード読みやすいし なによりデフォルトでメモリ上から「のみ」スクリプトコードをロードできるってのがイイ! ゲーム開発だと裸のままスクリプトファイルが置いてあることなんてないからね。。。 モジュールのロードとかもオブジェクト指向で非常に素直に書けるぽいし さっそくLuaを破棄して組み込んでみよう
333 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 14:25:29 ] AngelScript つかう場合は、これ C++ だけでよくね?という思考に陥らないように注意な
334 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 16:01:05 ] まんまC++なのがメリットでありデメリットでもある
335 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:39:28 ] >>AngelScript つかう場合は、これ C++ だけでよくね?という思考に陥らないように注意な 前使おうとして陥った ちょっと聞きたいんだが、AngelScriptを使っている人や使わなくなった人(他の言語に移った人)は なんで使っている、使わなくなった? C++そのままというか継承に制限があるのが大きくてSquirrelに移ろうと思ってるんだけど、 他の人はどう思ってるのか気になる アプリ実行時にちょこちょこ書き直したり、コンパイル/リンク時間の省略とかスクリプト自体の メリットは分かるんだが…
336 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 21:10:20 ] コルーチン
337 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:17:06 ] コルーチン
338 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:21:46 ] チンコール
339 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 08:20:18 ] ∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
340 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 09:35:24 ] >>335 C++との連携が簡単、C++クラスをほぼそのままで使える、複数のコンテキスト(LuaStateに相当?)を同時に処理させるのも簡単、 定数定義や列挙型も使える、といった点が便利なんで使ってる。 特にC++との連携はLuaやSquirrelより簡単だし、マニュアルもサンプルも英語だけどわかりやすい。
341 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 18:19:47 ] コルーチン
342 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 00:13:00 ] AngelScriptに乗り換えようかな 細かいとこがc++と違和感無くて簡単だわ
343 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 04:00:43 ] そこで敢えてPawnという選択肢も
344 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 04:39:16 ] コルーチ
345 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 13:47:14 ] AngelScript と Luaって メモリ消費や処理速度はどれほど違う?
346 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 14:09:25 ] /ヽ /ヽ ':' ゙''" `':, ミ ・ω・ ;, :; . っ ,つLua! `:; ,;' `( /'"`∪
347 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 14:17:51 ] Pawnつえーな、使い勝手とか全然知らないけど ttp://codeplea.com/game-scripting-languages
348 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 14:48:51 ] これ見るとリス使いの俺涙目だわ
349 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 15:50:27 ] ・メモリ消費低 ・静的型付 ・スレッドセーフ ・スタック操作なし(またはLuaより容易) で選ぶとしたら やっぱりAngelScriptがいいのかな〜
350 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 15:51:52 ] おなじくリス使いの俺涙目(笑) まあ、リスはわかりやすいからいいんだよ!とか言ってみる。 でも Pawn の性能は魅力だな。とりあえず組み込みテストして みてよさそうなら、静的スクリプト言語としての併用もかんがえてみよう
351 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 15:53:37 ] まあなんとかとかんとかはトレードオフってやつだな
352 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 18:03:22 ] Pawnはスクリプト内で日本語文字列を扱わなくてもいいならいいかも
353 名前:デフォルトの名無しさん [2009/10/28(水) 18:17:32 ] リスのバグ発見。 setdebughookを仕掛けた状態で_callメタメソッドをコールすると死ぬ。(SQVMでぬるぽ発生) ちなみにdebughook関数の中身を空にしても同様です。 公式フォーラムの垢を紛失してしまったので誰か報告たのむ squirrel-lang.org/forums/7/ShowForum.aspx function debughook(event_type, sourcefile, line, funcname) { local fname = funcname ? funcname : "unknown"; local srcfile = sourcefile ? sourcefile : "unknown"; ::print(::format("%s:%d: [DEBUGHOOK:%c] %s\n", srcfile, line, event_type, fname)); } ::setdebughook(debughook); class FOO { function test() { ::print("FOO::test()\n"); } function _call(orig_this) { ::print("FOO::_call()\n"); } }; local foo = FOO(); foo.test(); ::setdebughook(null); foo(); ::setdebughook(debughook); foo(); // Segmentation fault (core dumped)
354 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 18:39:16 ] >>353 すんまそ、環境を書いてなかった。 Squirrel 2.2.3 stable VisualC++, cygwin, Linux, 何れでも発生。 Squirrel 3はまだ試していません。
355 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:22:06 ] Pawn Language Guide っていうドキュメントみてみたけど、無名関数がつくれないっぽいね。 だとするとクロージャが作れないから、ちょっと不便かな。 状態遷移とかの記述に特化しているようだし、UnrealScript に似ているかも。
356 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 17:27:53 ] 347のリンク先見て思ったが、GameMonkeyが何気に性能いいな。
357 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 20:25:50 ] >>353 拙い英語ですが報告しておきました。 temp_regがメタメソッドコール前にhookで使われるのが一因っぽいです。
358 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 04:54:40 ] Squirrel フォーラムに代理の報告をしてもらえるなら、 sq_mem.cpp をはじめ メモリ確保失敗についてまったく考慮してないのを修正してくれ、と頼んでみて もらえまいか? 組み込み言語としてリソースの乏しい環境で使うことを考えれば、メモリ確保が 失敗しないなどという前提で組まれるとツライものがある。
359 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 04:56:12 ] s/sq_mem/sqmem/
360 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 04:57:50 ] なんで自分で報告しないのん?
361 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 05:00:20 ] 残念ながら英語で会話ができる自信がない。 リファレンスマニュアルを読む程度ならなんとかなるんだけど。
362 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 05:20:40 ] パッチ作って送れば英語できなくてもだいじょぶじゃないかな。 here is a patch for memory allocation error とか一文だけ書いとけば通じると思う。
363 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 05:42:29 ] うーん。問題はコード全体に散らばってるんで、まずは全体的な方針をはっきり 決めてからじゃないとマズイ感じ。 sq_malloc や sq_realloc がいくつかのマクロを通して間接的に使われてるんだけど、 どれも呼び出し元で NULL が返ってくることが考慮されてない。 典型的なのは配列伸ばすのに p = SQ_REALLOC(p,oldsize,newsize) してるところ。 NULL 返したら元の領域がリークするうえに後続のコードでは確保成功したものとして 余裕でアクセスしてくる。 最初は、C++だからsqmem.cppの関数から例外投げろってことかと思ったんだけど、 呼び出し側で例外の発生も考慮されてないからまた別の理由でリークするし。
364 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 10:21:32 ] AngelScriptでマルチバイト文字列を使おうとする場合の不具合も報告したほうがよさそうなんだけどなぁ…
365 名前:353 mailto:sage [2009/10/30(金) 14:26:46 ] >>357 ありがとう!!
366 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 17:39:48 ] >>364 なんか不具合あるの? AngelScript試してみようと思ってるんで気になる UTF8扱いたいんだ
367 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 17:48:06 ] >>366 ライブラリをビルドする際にプリプロセッサでAS_DOUBLEBYTE_CHARSETを定義するんだけど、 それやるとビルドでエラーが出ちゃう。 しかもマルチバイト文字かシングルバイト文字かを判定するやり方もマズい。 最新版出るたびに毎回そこ修正してるよ。
368 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 19:04:19 ] それは本家に報告してあげればみんな幸せに
369 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 23:19:35 ] >>367 ソース弄ってみるよ
370 名前:デフォルトの名無しさん [2009/10/31(土) 00:09:14 ] >>221 それ新しい版では修正されてたと思った。
371 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 10:39:11 ] AngelScriptでUTF8を使う場合、ソースの修正なくても、 asIScriptEngine *lpEngine=asCreateScriptEngine(ANGELSCRIPT_VERSION); lpEngine->SetEngineProperty(asEP_SCRIPT_SCANNER, 1); みたいな感じでエンジンの設定すれば大丈夫だったと思う。
372 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 23:04:23 ] あら、ありがと
373 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 06:54:37 ] AngelScript2.17.2で試してみた UTF8はデフォルトでサポートしてるっぽく読めたんでDLしたまんまビルド static const char* scriptString = "void hellow()" "{" " Print( \"hellow world\" );" " Print( \"UTF8テスト\" );" "}"; とりあえずこれOKだった ホストへstd::stringで渡せたり楽だわあ
374 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 13:25:04 ] 次の更新でUTF16もサポートするみたいなことが書いてあるね
375 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 16:16:50 ] >>374 それできたらShitJIS対応の改造しなくて済むな。
376 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 10:58:55 ] Linuxでx64運用してるんだが、ファイルをHDD中でコピーするだけでファイルが壊れてしまう状態になって、 パーツを電源も含めて色々入れ換えてみたところ、 SATAケーブルをノイズに強いタイプに変更したら改善した。 残念ながら完全には直ってないようだけど、十分実用レベルには戻った。 資金に余裕ができたらHDD買い足してパーティションを作り直そう……。
377 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 10:59:54 ] おっと。スレ違いスマン。
378 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 09:41:07 ] pawnダウンロードして、マニュアル読みながらcmake使ってVC++用のプロジェクトファイル作るところまではできたんですが… プロジェクト開いても、なんかファイル構成がよくわからないです。 もしかしてこれ、コンパイラとVMが別のプロジェクトファイルになっているんでしょうか? luaみたいに、単純にヘッダファイルとlibファイルだけが欲しいんですが… もしかしてDLLしかない??
379 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 16:02:52 ] >>378 pawnについていいなと思い試してみたはいいものの 詳しく使おうとするにつれてファイル構成が?で 投げ出した俺と同じ状態だね 確かにあれはわかりにくい
380 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 02:12:15 ] >>371 asEP_SCRIPT_SCANNER の設定で何がどう変わるのか AngelScript 2.17.2 の ライブラリのソースを見てみたけど、単に 'あ' みたいなUTF-8の文字リテラルが 正しく読めるようになるだけっぽい。 "あいう" みたいな文字列リテラルは設定に関係なく1バイトずつ読んで処理してる。 ただし AS_DOUBLEBYTE_CHARSET プリプロセッサを有効にしてビルドしたライブラリで asEP_SCRIPT_SCANNER の設定が 0 だと、マルチバイト文字を考慮する。 >>367 が言っているように判定方法がマズいからShift_JISの半角カタカナを渡すと おかしな挙動になるだろうけど。 あと AngelScript 2.17.2 での asEP_SCRIPT_SCANNER の既定値は 1 っぽい。
381 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 16:15:58 ] となると、マルチバイト判定用のコールバック関数を登録できるような改造した方がいいのかな。 2箇所いじれば大丈夫っぽいし。
382 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 04:57:26 ] >>381 Xtalはそんな感じのことをやってますね。 初期化関数に渡す Setting クラスインスタンスの ch_code_lib メンバに 文字コードクラス(例:SJISChCodeLib)のインスタンスを渡すことで好きな 文字コードを選択できるようになってます。 SJIS, EUC, UTF8, UTF16, UTF32 の文字コードクラスは標準で用意してある模様。
383 名前:382 mailto:sage [2009/11/10(火) 05:09:58 ] > SJIS, EUC, UTF8, UTF16, UTF32 の文字コードクラスは標準で用意してある模様。 …とはいっても別に内部で文字コード変換をしてくれるわけじゃないから、 Windowsのマルチバイト文字セットで使うなら基本的にSJISを選ぶことになるだろうけど。 Unicode文字セットで使うなら、XtalライブラリをUnicode文字セットでビルドして、 文字コードクラスは指定しない(=デフォのまま)ことで正しい挙動になりそう。 もちろんその場合のスクリプトはUnicodeで書く&渡す。 連投&AngelScriptと直接は関係ない話でゴメン。
384 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 09:30:35 ] 試してないけどソース見る限り、UTF-16用の文字コードクラス使うと、 文字列長取得時にサロゲートペアのことも考慮してるようだ 他の文字コード用のも、一文字進めるとか比較とかも変えられるようにはしているようではあるが、 今のところ文字単位での文字列長取得しか違いはないようだ
385 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 11:02:15 ] AngelScript、TCHARとかにも対応できて、Unicodeとマルチバイトのどっちでもビルドできるようにしたいが、 かなりの大部分を修正しないとダメだなぁ… Squirrelは最初から対応してるみたいだけど。
386 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 22:18:49 ] // .amxファイル(コンパイル済みPawnバイナリ)を実行するための最小コード。これをビルドするためには // ダウンロードしてきたPawnのソースに含まれている amx.c, amx.h, amxaux.c, amxaux.h, amxcons.c, amxcore.c をプロジェクトに追加しておく #include "amx.h" #include "amxaux.h" #include <stdio.h> extern "C" AMX_NATIVE_INFO console_Natives[]; extern "C" AMX_NATIVE_INFO core_Natives[]; int main(int argc, char *argv[]) { AMX amx; cell ret = 0; if (aux_LoadProgram(&amx, "test.amx", NULL) != AMX_ERR_NONE) exit(1); if (amx_Register(&amx, console_Natives, -1)) exit(1); if (amx_Register(&amx, core_Natives, -1)) exit(1); if (amx_Exec(&amx, &ret, AMX_EXEC_MAIN)) exit(1); printf("%ld\n", (long)ret); aux_FreeProgram(&amx); return 0; }
387 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 22:20:25 ] Pawnコンパイラのビルド方法 -- CMakeダウンロードする CMakeインストールする CMake起動する "Browse Source"をクリックし、実行環境をビルドするなら<pawn>\source\amxを指定する。Pawnコンパイラをビルドするなら<pawn>\source\compilerを指定する "Browse Build"をクリックし、適当な出力フォルダを指定する(以下、<out> と表現する) "Configure"をクリックし、VisualC++ネイティブを選択する。エラーが起きても、もう一度 ConfigureをクリックするとGenerateボタンが有効になる。 "Generate"をクリックしてファイルを生成する <out>にVC++用のプロジェクトファイルができている ソースに<pawn>\source\compilerを指定した場合、<out>にはpawnc.slnができている。それをVCで開いてビルドする。 ..\bin\pawn.icoが存在しませんとかエラーがでたら、該当場所に適当なアイコンファイルを入れておく。 <out>\Debugにpawnc.dllとpawncc.exeができている。それがコンパイラ。
388 名前:デフォルトの名無しさん mailto:age [2009/11/11(水) 23:56:32 ] Goのビルドが早いらしいので期待age
389 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 00:07:43 ] ttp://jp.techcrunch.com/archives/20091110google-go-language/
390 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 13:31:44 ] そのGoって組み込みじゃないんじゃ・・・・
391 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 17:18:47 ] ゴルーチン
392 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 23:59:48 ] ttp://golang.org/doc/go_faq.html#Do_Go_programs_link_with_Cpp_programs There is a “foreign function interface” to allow safe calling of C-written libraries from Go code. We expect to use SWIG to extend this capability to C++ libraries. There is no safe way to call Go code from C or C++ yet. 組み込みまだ出来なさそう。あとは、luaみたいに使える方向性があるか分からない。 現在の対応はdarwinのx86/x86_64とlinuxのx86/x86_64/armとnative clientのような気がする
393 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 00:23:26 ] you ain't gonna need it
394 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 11:03:02 ] GCサポートとあるけどc++好きにはウケナイ気がする GC無しでc++的にガチガチに使えるなら使いたい c++は0xも控えてるしGoは微妙な位置に落ち着きそう
395 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 11:47:27 ] そういや0xって後50日くらいで終了するんだなぁ
396 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 12:51:11 ] C++0xはコンセプトを捨てて再調整中で、まだ時間がかかるようだ 最近はC++1xと呼ばれている・・・
397 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 12:52:17 ] っていうか検索しにくさでDに勝負挑んでんの? って感じのネーミングなんだが……。
398 名前:397 mailto:sage [2009/11/13(金) 13:00:17 ] あ、ごめんなさい誤爆。Dスレに投げたつもりだった……。
399 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 18:49:47 ] Squirrelの画像検索のしにくさよりはましだろ
400 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 19:04:49 ] 16進数だと思って欲しいだって びょーん?さんのお知らせ
401 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 02:54:01 ] で、誰かPawnつかってみた? 激高速ぽいし、静的型付けで余計なバグも少なそうだし、かなり使えそうだけど…
402 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 21:13:23 ] >>388 GoはLinuxとMacにしか対応していません。
403 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 21:54:06 ] この手の組込スクリプトエンジンをShiftJIS対応させる場合、基本的にWindows用に組んじゃって大丈夫なのかな。 Unicode対応させる場合はWindowsだけじゃダメだよね?
404 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 23:22:05 ] 修正を公開するつもりが無いならどうしたって構わないよ #ifで切り分けるくらいはしておけばいいんじゃないか #if (defined WIN32) 実装 #else naiyo!! #endif これならWindows以外で使いたい人が中を見て、流用できそうならそうすることも出来るだろう
405 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 23:56:52 ] thx!
406 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 00:09:23 ] >>404 上手くいけば公開しようかなと思ってる。 ただ、Windowsでしかプログラム組んでないんで、Linuxでもちゃんと動くようにするための技法とかさっぱりわからないんだ。 ちなみにShiftJIS対応は簡単だけど、Unicode対応はソースあちこちいじらないとダメなんで無理かも…
407 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 07:08:38 ] UTF-8でもなければUCS2やUTF16でもなく、UNICODEと言っている時点で、 何にも分かってないのが丸わかりだからやめておけ。
408 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 08:00:11 ] /ヽ /ヽ ':' ゙''" `':, ミ ・ω・ ;, :; . っ ,つLua! `:; ,;' `( /'"`∪
409 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 08:10:51 ] ぅあたんおはよう
410 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 10:48:18 ] しかし、今時ShiftJISはねえなあw
411 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 11:48:04 ] WindowsだとまだShiftJIS現役だしなぁ…
412 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 13:12:23 ] WindowsのNTFSのファイル名とかUTF-8にする方法ある?
413 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 13:25:40 ] それ以前に一つ確認しておくが、NTFSのファイル名のエンコードがどうなっているのかは理解しているのか?
414 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 14:27:33 ] ICUとか無駄にでかいのを勧めてみる そういう話じゃないんだろうけど、Windows依存の話はもう勘弁しておくれなんし
415 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 14:56:21 ] ファイル名ってUNICODEじゃなくてmbcsだろ mbcsにUTF-8そのまま突っ込んでもファイルは出来るが 望みのものにはならない訳で
416 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 15:05:36 ] www-06.ibm.com/jp/domino01/mkt/cnpages7.nsf/page/default-007ACA9B
417 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 17:13:46 ] >>415 Windowsは内部的には全部 Unicode で NTFS もUnicode。 Win32 API的には、Uincode な API と MBCS な API が両方同時に存在していて任意に選んで使う。 原理的にはエンコードが UTF-8 な Locale を指定すれば MBCS なAPIでそのまま使えるはずだが、 あいにくそんなロケールは定義されてない。もっとも、UTF-8 から Unicode へは単純に変換できるので、 Unicode な API をラッピングして使えば良いだけなので自前プログラム上で問題になることは特にはない。 自分のプログラムで文字列を char ベースで扱ってるなら、MFC の CString のような char <-> wchar_t 変換 対応したクラスを作ってAPI に渡す時はそれを介するようにしておけば良い 一般的にこの手の組み込み言語の場合「Unicode対応 」ってのはワイドキャラ化のこと。変換は全部入出力部で 処理してしまって、内部は全部 char ではなく wchar_t で処理を行うようにする。英数字もひらがなかたかな 漢字も同じ「1文字」として扱えるので、もろもろ概念や処理が楽になる。そのかわりメモリを喰らう。 Windows だと、Unicode な APIがあるのでこれで作業するのが定番。 UNIX 系OSは、Unicode API は存在してないので、API に渡す必要がある部分(ファイル名など)は 逆にMBCS に変換する必要があってそれなりに面倒だったりするが、これが C言語系における正道 「SJIS対応」だとパーサの類をいじって、\ とかの特殊文字のエスケープ対応を行う対応になる。 また、文字列系のクラスに、専用の mblen とか mbsubstr とかSJISとして1文字単位で扱える 専用の処理を足さないと実用上困る。正規表現系をまじめに対応とかすると死ねる。 「UTF-8対応」や「EUC対応」はASCII 的に安全な文字コードなのでパーサ部は通常いじる必要がないが、 文字列処理用に専用の命令系を足さないと実用性が低いのは SJIS対応と同じ。 古いプログラムを wchar_t 化するのは大変だけど、Unicode は扱いたい、といった場合にUTF-8 対応が行われる。
418 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 17:18:13 ] ファイル名の場合、NFDにも注意ね
419 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 17:23:01 ] >>418 OSX はさっさと直せよと思う。まじで
420 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 18:20:29 ] Microsoftのコンパイラは wchar_t は2byteなので、全部一文字って訳にはいかないです サロゲートペアに対応させようとかおもった場合は手動で処理してやらんとダメです。 少なくともVS2008時点では、_tcsincやCharNextといった ポインタを進める関数がサロゲートペアをちゃんと処理してくれない (おそらくOSがサロゲートペアに対応する前のコードとの互換性を気にしてるのだろう) もっとも、クロスプラットフォーム名コード書くなら、CharNextとか使わずに自前で処理してるだろうけど・・・
421 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 19:20:13 ] 書かれてる事の意味が解らないままレスする人多すぎ ここが組み込み系言語のスレな事も考えず読んでる人も多すぎ
422 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:46:16 ] >>420 落ち着いて考えるんだ。 組み込みスクリプトごときでサロゲートペアが関係してくるようなややこしい話がどれくらいある? まあ、議論自体は有意義だとは思うが。
423 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:52:23 ] 素直にTRONコードを使え
424 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 23:33:37 ] とりあえずVSで使う時に、文字セットを「Unicode文字セットを使用する」にしてちゃんと使えればそれでOkだな。 Squirrelはデフォでいけたが。
425 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 10:17:44 ] 知れば知るほどVSなんぞ捨てた方がマシ UTF8はBOM有り前提とか諸々腐ってるし(VS2005までしか知らんけど) Windows環境で作業しなきゃならんなら gcc、devc++、エディタ、こんだけでいいよ
426 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 10:23:35 ] >>425 お前……VisualStudioまともに使いこなせてないだけだろ? UTF-8 BOM付きなんて使う機会ほとんどないぞ。
427 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 10:28:50 ] VSでエンコード付きテキストエディタを指定するとUTF-8はシグネチャ付きとなしと両方選べる。 つまりどっちも扱える。
428 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 10:47:43 ] IDEの方に問題は出ないが、VCのコンパイラ側がBOM無しだと、 文字コードの認識に失敗する。
429 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:18:43 ] ttp://msdn.microsoft.com/ja-jp/library/xwy0e8f2%28VS.100%29.aspx BOM無しUTF-8の時 文字コードの認識に失敗するんじゃなくて、そもそも対応していないだけ IDEでBOM無しUTF-8で保存可能なのは、ドキュメントとか編集するときのためだろうか?
430 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:42:08 ] Squirrel 2.2.4 stable来てるね 3.0もbeta1になった
431 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:19:38 ] おー、Squirrelのバージョンアップまじか 色々バグ修正されてるのかな BuildとShift-JISパッチ入れるのめんどくさいけど、今夜試してみるわ
432 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 04:33:19 ] >>429 WEBの世界だとそれが標準だからだと思うよ>BOM無しUTF-8で保存可能 Visual Web Developper あわせの対応であって、VC はスルーされてるってことかと。 コンシューマ機が UTF-8 ベースに移ってるのでそれあわせでコード共有しようとするときに地味に困る > VC がUTF-8をまともに扱えない BOM つけると今度は gcc がこけるんだぜ……
433 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 10:47:44 ] LuaでLua_Stateの解放をせずに、グローバル変数等の環境を個別に初期化する サンプルはどこかにないでしょうか?
434 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 11:56:04 ] グローバル環境を空のテーブルに置き換えるのって 普通にできんかったっけ?
435 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 12:37:17 ] じゃあこんな感じで良いのかな? Lua_State *L; 〜 一回load、callして使用 〜 lua_newtable(L); lua_setfenv(L, LUA_GLOBALSINDEX); //グローバル変数だけ初期化される? lua_gc(L, LUA_GCCOLLECT, 0); //念のためにGCも走らせるべき? 〜 Lにまたloadして再利用 〜
436 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 18:16:26 ] 426の読解力に溜息が出るよ
437 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 08:36:36 ] >>429 UTF-8てそもそも既存のシステムに手をなるべく加えないで動かすための文字コードじゃないのか? よくわからんな
438 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 08:45:59 ] そもそも文字列はハードコーディングするべきじゃない。 外部リソースとして、入出力時にコードを調整すればいいだけのこと。
439 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 08:49:56 ] print loadstring(0x34d3a6b8); こんなプログラミングが歓迎されるんですね
440 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 09:00:17 ] >435 を試してみたのですが、lua_setfenvだとグローバル環境の操作は無理なようです。 グローバル環境テーブル全体に対する操作関数って無いのでは?
441 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 09:34:40 ] >>438 スクリプトを読み込んだ際に特定の文字コードに変換して、内部の処理はその文字コードで統一って感じかな? だとすると、何に変換するのがいいんだろう。UTF16?
442 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 09:47:54 ] スクリプトファイルは基本UTF-8、 ネイティブに引き渡すときはUTF-16、面倒ならUCS2にするのが一番問題が少ない。
443 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 11:51:20 ] >>437 その恩恵にあやかれるのはASCIIコードしか使ってない欧米人だけだけどな。 非ASCIIコード圏は、既存のエンコード方式と区別ができないので余計に混乱する。 全てのプレーンテキストがUTF-8に置き換わるまでの過渡期は、BOM付きUTF-8が 一番無難な選択だと思うけどね。 俺はWindows上でgccとか使わないので、FTPクライアントにBOMの有無を変換する 機能さえついてくれればあまり問題ない。 もっとも、MSは独自にBOM付きUTF-8を強行するのではなく、非ASCIIコード圏で 過渡期にはBOMが必要であることを訴えて、規格に盛り込ませるべきだと思うが。
444 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:26:22 ] >>437 「ファイルの中身」自体が最大のレガシーシステム。だから UTF-8 が使われるようになってる。 日本人は一度 SJIS やら EUC やらで通った道をもっかい世界規模で通り直してるだけではある >>438 なにが一番困るって、ファイル名中の「コメント」 コメントに日本語つかうな?ごもっとも(苦笑)
445 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:27:06 ] ファイル名中じゃねえ、ファイル中
446 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:31:33 ] >>443 > 全てのプレーンテキストがUTF-8に置き換わるまでの過渡期は、BOM付きUTF-8が > 一番無難な選択だと思うけどね。 この上の記述はわかるし、それはよくわかるんだが、 実際はBOM付きでトラブることが多くて、俺は折れたわw BOMなしで上手く行くようにすべき
447 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:44:29 ] あ、437 のいってること完全によみちがえてたや。すまん。 動作上は問題ないに決まってるんだから、ツールで対応できない意味がわからんってことだな。 既存エンコードと混在したのを自動判定する必然性は別にないんだから、 ツール側に「MBCSではなくUTF-8として扱う」スイッチだけつければすむことだ。 MS1社が対応するだけで世界は平和になるんだからさっさとそうしてくれってことだな
448 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:56:28 ] >>443 もう手遅れ MSがいまだにSJISを強行している時点で終わってる
449 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 13:38:56 ] SJISを強行しているように見えるのはロケールを日本語にして使っているからなんだが、 なんでそんなに視野が狭いんだろう? ちなみにOSのロケールを英語にすると、UTF-8も無しでコンパイルが通るぞ。
450 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 13:40:42 ] BOM無しで
451 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 13:58:43 ] thx! おまいあたまいいな
452 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:03:05 ] >>449 L"日本語" って正しく通る?
453 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:12:51 ] ロケール変えて見た こりゃええわw まともなアプリと糞アプリの違いが一目瞭然になったw
454 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:16:50 ] やっぱりコマンドプロンプトは糞のままだったw
455 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:23:06 ] boost.cppll.jp/HEAD/ このサイトが初めてエンコード選ばなくても 日本語で文字化けせずに表示されましたw ほんとうにありがとうございましたw
456 名前:デフォルトの名無しさん [2009/11/20(金) 14:24:23 ] 日記はチラ裏で
457 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:41:12 ] >>455 ブラウザの文字エンコードが正しく認識できないって、どこの田舎ものやねん……。
458 名前:デフォルトの名無しさん [2009/11/20(金) 14:42:25 ] >>454 cmd.exeはフォントを日本語にすれば治る cygwinのbashはスクロールがおかしくなるが英語ロケールでインストールし直すと治るのかもしれないがやっていない しかしいかに日本のWindowsアプリケーションが日本語=SJISで決め打ち(mbcs)しているかが良くわかるね 本来はhogehogeW()を呼ばないといけないところをhogehogeA()で済ませちゃってるんだろうな mbcsでもSJISだとそれで動いちゃうから日本語ロケールだと気付かないし気にならないんだね 正しいプログラムの作り方についてもう一度勉強しなおす(日本のMSががんばってアナウンスする)必要があるんじゃないかな
459 名前:デフォルトの名無しさん [2009/11/20(金) 14:47:32 ] >>457 ああごめん ここのことね boost.cppll.jp/HEAD/libs/date_time/doc/BuildInfo.html
460 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:50:07 ] スレ違い
461 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 17:39:18 ] 質問どうぞ
462 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 20:08:17 ] >>440 lua_replace(L, LUA_GLOBALSINDEX) ならどう?
463 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 08:14:53 ] >>462 できました! ありがとうございます
464 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 09:04:14 ] Luaのテーブルってキーを使ってアクセスするようになってますが、 キーが分からない場合に全ての項目を調べたい時のサンプルってありますか?
465 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 09:14:26 ] for k,v in pairs(t) do hoge(k,v) end
466 名前:463 mailto:sage [2009/11/21(土) 09:49:37 ] >462 でグローバル環境を空にはできましたが、 これだけだと再使用ができないような? このあとlua_openlibsを使っても標準ライブラリが使用できません。 Lua_Stateをcloseせずに再使用するのは大変みたいですね。
467 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 10:09:26 ] >>465 thx pairsやnextでなめれるんですね
468 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 10:14:16 ] lua_openlibは副作用でレジストリにも変更加えるからじゃね? 走らせたいチャンクを一旦スタックに積んで そいつの環境を置き換えるのはどう?
469 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 10:56:34 ] >>468 具体的なやり方が今一思いつきません。 load〜で積んだあとに空の環境に置き換えるって意味じゃないですよね?
470 名前:469 mailto:sage [2009/11/21(土) 11:03:04 ] そもそもスクリプト側で使ったグローバル"変数"だけ初期化して ライブラリ等のテーブルは使いまわせたらlua_Stateの再構築の コストを減らせて、細かいスクリプトの連続呼び出しに良いのではと 考えていたんですが、Luaは変数も関数もその他色々もテーブル分けて ないので、選択的に変数だけで消すのに無理がある気が・・・
471 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 11:04:51 ] 何でデフォの宣言がglobalなんだろうかね・・・
472 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 11:52:21 ] >>469 いや、そういう意味。走らせるチャンク毎に独自の環境を差し込む。 luaL_openlibsに関しちゃ対象がグローバル環境決め打ちのサポート関数でしかないんで どのみち使えないんだけど、そこはチャンクの環境に差し替えるテーブルの__indexにフックかけて グローバル環境に委譲してしまうって感じでどうか。 これならlocalをつけない変数宣言はチャンク毎の独自の環境に登録されるだけなので グローバル環境の汚染も防げる。やってることはmodule関数と大体いっしょ。 コード書いて検証したわけじゃないのでうまくいくかは知らんw
473 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 13:01:22 ] --ライブラリ等のテーブル_Gと、スクリプト側のenvironmentを分ける local metatable = { __index = _G } local chunk = loadfile(filename) local environment = {} setmetatable(environment, metatable) setfenv(chunk, environment) --Cを使えばなんでもできるので、ダイナミックリンク禁止 environment.require = function() end environment.package = {} return chunk()
474 名前:469 mailto:sage [2009/11/21(土) 13:11:20 ] >>473 なるほど、こうやるのですか。 ありがとう!
475 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 10:32:35 ] ゲーム内にN個のオブジェクトが存在する。 それぞれのオブジェクト固有の状態を保存するために、Cプログラム側でN個のテーブルを用意する。 オブジェクトの行動を定義したluaファイルをロードしてlua_Stateインスタンスを作る。 オブジェクトはN個だが、このインスタンスは1つしか作らない(みんな行動パターンは共通なので) で、個々のオブジェクトの状態を更新するときに、そのオブジェクトに対応するテーブルを引数にして lua関数を呼び出し、テーブルを更新させる。 というのをやりたいのですが、N個のテーブルを作るのが「?」です。 テーブル作ってスタックに積むのはいいんですが、なんせスタックに積むわけですから、 どこかの操作で勝手にPOPされたり、消えたりしませんかね??
476 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 12:35:08 ] >>475 そういう用途のためにレジストリとリファレンスの機構が存在する。 1. 任意のオブジェクト(この場合はテーブル)を作る 2. int table = luaL_ref(state, LUA_REGISTRYINDEX); でレジストリに該当テーブルを格納してリファレンスを取得。 オブジェクトはスタックからは解放されて、レジストリテーブルでのみ保持された状態になる。 リファレンス値は全体でユニークで、C 側でそのままオブジェクトを区別しつつ単純保持するのに使える 3. 使いたい場面(この場合は引数として渡す時)では、 lua_rawgeti(state, LUA_REGISTRYINDEX, table) としてレジストリからスタックに取り出してきて使う 4. 最後破棄する場合は luaL_unref(state, LUA_REGISRYINDEX, table) として解放させる N個つくるならこんなかんじで // テーブル確保 int table[N]; for (int i=0;i<N;i++) { lua_newtable(state); table[i] = luaL_ref(state, LUA_REGISTRYINDEX); } // 例えば table[0] をわたして関数を呼ぶ lua_getfield(state, LUA_GLOBALSINDEX, "func"); // 関数取得 lua_rawgeti(state, LUA_REGISTRYINDEX, table[0]); // 引数としてつむ lua_call(state, 1, 0); // 引数1戻り値無し // テーブル解放 for (int i=0;i<N;i++) { luaL_unref(state, LUA_REGISTRYINDEX, table[i]); } ちなみに squirrel だとオブジェクトのリファレンスを、直接C側から HSQOBJECT としてスタックから取得して 保持できる。概念としてはこっちのがシンプル。
477 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 03:18:07 ] ぶった切りすいません luaは組み込みに最適だと思うんですが、 lua単独でGUIを表示してゲームを作り、実行ファイル(exe)に変換はできるのでしょうか? もしできるなら、教えてください。 ぐぐっても探すことができなかったので・・・
478 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 04:22:36 ] 自前で組み込むの前提の言語でそういうもの作ってもあまり嬉しくないのでだれも作ってないと思います
479 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 05:02:50 ] 言ってることが良く分からないが、Lua単独ではGUIは無理だと言っておく そもそもこのスレで紹介されてる言語は、用途を特定しないスクリプトであって組み込んでどのように動かすかはその人次第 そういう用途なら○○ツクールやHSPにしておきなさいな
480 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 08:23:05 ] 厳密には単独ではないけど、Luaのモジュールか何かでSDL使うのとか無かったっけ?
481 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 09:34:33 ] 自分でGUI処理の組み込み部分を作り、スクリプトリソースをリンクすれば、 単独exeに出来るだろ。
482 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 10:12:43 ] >>477 その用途なら、Pythonじゃね?
483 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 12:08:15 ] I think so.
484 名前:477 mailto:sage [2009/11/23(月) 16:28:01 ] みなさん、レスありがとうございます。 どうしてもluaでゲームを開発しなくてはいけない状況なのです。 ウィンドウの表示がわからないため、苦戦しています。 どの参考書を読んでも書いてなくて。 別の言語にウィンドウを作らせて、動作はLUAだけで、などでできますでしょうか?
485 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:30:06 ] >>484 なんでできないと思うの?
486 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:38:15 ] >>485 レスありがとう みんなやってないし、コマンドプロンプト上か ほかの言語に組み込むだけのものかと思いまして・・・
487 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:46:43 ] aims.dna-softwares.com/ こことか見てみ Luaを主体にしたゲームエンジン作って、このサークルのソフトは殆どLuaで作られてる それにしても、その知識量からどうしてもLuaで作らなきゃいけない状況が発生するなんて いったいどんな大見得切ったんだよ
488 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:53:23 ] 参考書読んだのなら、Luaを使っている人がどのような目的と仕組みで走らせるのかは理解した? あくまで組み込みスクリプトなんだよ? ウィンドウズを表示するという関数を組み込んでもらって、 Luaにインターフェース提供してもらわないとprintやscanすらままならないよ ゲーム開発でスクリプタとして働くのならLuaの言語仕様を覚えるのと、PGからバインドした関数一覧もらってこれば良いよ
489 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:00:01 ] レスありがとう 正直、大学のゼミでこの言語を使うということに決めたんです いくつもある言語から選んで、luaを選んだのは自分だけ。 頼る人もいないので、本とネットで勉強してるかんじです。 >>487 サンプルをdlして参考にしていますが、難しい。 もっとじっくり読んでみます。 >>488 用途は理解しているつもりですが、これをメインにしてプログラムを組んでいかなくてはいけなくて・・・ やはり、ウィンドウを表示する関数をCなどで書いて、luaからその関数を持ってくることが一番楽なんですかね。
490 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:11:31 ] 明日、学校でごめんなさいして もっと詳しくて質問できる奴のいる言語で 最初からやり直す方がましのような気がする。
491 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:13:36 ] >>490 それはしたくないというか、結構この言語は気に入っているので辞めたくないんですよ
492 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:17:17 ] それでここきてなんとかしようなんてあますぎる
493 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:18:29 ] C側とのデータのやり取りがめんどいから余り良い言語とは・・・
494 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:26:23 ] >>489 > やはり、ウィンドウを表示する関数をCなどで書いて、luaからその関数を持ってくることが一番楽なんですかね。 Lua を使うと言って、こういったバインド系の作業はしたくないとか、意味がわからん。 もともとそうやって使う言語だろうに。 「みんなやってない」とか言ってるが、何個のプロジェクトを見て言ってるのか怪しいもんだ。
495 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:26:36 ] Luaの言語を理解して使えるようになる手間を1とすると、 ゲーム用のC/C++ライブラリを組むのが最低10倍〜ぐらい手間も時間かかるよ Win32APIからDirectXかOpenGLまで使えるようにならないと話にならない ゲームライブラリは既存のものでいいならC素人ならDXライブラリを組み込むのが多分もっとも最短だと思う ゼミテーマが「組み込みスクリプト研究」で実例として「ゲーム」を選んだのなら、外部ライブラリにどっぷり頼っていったほうが幸せだとは思う
496 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:27:39 ] 怒られたくなくて嘘を付いている幼児じゃあるまいし 無理せず諦めておけよ
497 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:33:10 ] >>493 つまりAngelScriptがいいって事ですね。 わかります。
498 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:42:29 ] 自分の実力より遙かに上の事をやろうとしても無駄になるだけだぞ ちょっと上ならともかく分不相応すぎ。諦めろ
499 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:48:07 ] Luaじゃ宿題スレも使えないしねえ。 (答える奴はどうせこのスレも見てる)
500 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 18:23:45 ] HSPスレに逝けよ
501 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 21:35:31 ] とりあえず、この本みてみて、何とかなるか考えてみたら。 スクリプト言語による効率的ゲーム開発 C/C++へのLua組込み実践 www.amazon.co.jp/dp/4797348550 サポートページ lua.mine.nu/w/LuaBookSupport どうなんだろうなあ。
502 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 21:46:36 ] ttp://en.wikipedia.org/wiki/Category:Lua-scriptable_game_engines Luaでルーチンいじれるゲームとかゲームエンジンとかあるけど 日本語の資料があんまりないと思う
503 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 10:46:49 ] Lua for Windows: A batteries included Lua installation on Windows. luaforwindows.luaforge.net/ これいっこダウンロードしてインストールすれば、 GUI から OpenGL から DB 接続までなんでもはじめから入ってるよ。 ウィンドウ作る程度なら、サンプルそのまま使える。
504 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 07:48:34 ] Pawn始める人への組み込みメモ(修正版) // .amxファイル(コンパイル済みPawnバイナリ)を実行するための最小コード。 // 必要ファイル: amx.c/h amxaux.c/h amxcons.c/h amxcore.c osdefs.h #include "amx.h" #include "amxaux.h" #include <stdio.h> AMX_NATIVE_INFO console_Natives[]; AMX_NATIVE_INFO core_Natives[]; int main(int argc, char *argv[]) { AMX amx; cell ret = 0; if (aux_LoadProgram(&amx, "test.amx", NULL) != AMX_ERR_NONE) exit(1); if (amx_Register(&amx, console_Natives, -1)) exit(1); if (amx_Register(&amx, core_Natives, -1)) exit(1); if (amx_Exec(&amx, &ret, AMX_EXEC_MAIN)) exit(1); printf("%ld\n", (long)ret); aux_FreeProgram(&amx); return 0; }
505 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 07:49:39 ] // Pawnコンパイラの最小プロジェクト // 必要ファイル: libpawnc.c lstring.c/h memfile.c/h sc1.c〜sc7.c sc.h sc5.scp sc7.scp scexpand.c sci18n.c sclist.c scmemfil.c scstate.c scvars.c svnrev.h // それに加えて ../amx でアクセスできる場所に osdefs.h amxdbg.h が必要 // 実行時にsc1.cのsetconfig()あたりでNULLエラーが発生するなら[プロジェクトの設定->構成プロパティ->全般->文字セット]でUnicodeを無効にしておく #include "sc.h" int main(int argc, char *argv[]) { return pc_compile(argc, argv); }
506 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 14:11:52 ] luabindを使っていて気になったのですが、 //cpp struct A { int x; }; A *ptr; A& ref() { return *ptr; }; A a; luabind::module(L) [ luabind::def("ref", &ref), luabind::class_<A>("A") .def_readwrite("x", &A::x) ]; ]; --lua v = ref() v.x = 1 --参照なのでC側のaにアクセスできる クラスのインスタンスの参照を渡すときに、上の様に一度staticかglobalな変数 (上の場合ptr)を経由させる方法しか思いつかなかったのですが、ダイレクトに 渡す方法は無いものでしょうか?
507 名前:506 mailto:sage [2009/11/25(水) 14:14:17 ] 訂正 A a; ptr = &a; luabind::module(L) [ luabind::def("ref", &ref), luabind::class_<A>("A") .def_readwrite("x", &A::x) ];
508 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 17:56:07 ] Lua詳しくないんでアレだが、lua_pushlightuserdataではダメなの?
509 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 09:43:19 ] Luaで実行状態を全部ファイルに保存して、また復帰するようなことは可能ですか?
510 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 10:10:30 ] >>509 Lua側でioで記録、読み込みするコード書くしかないかも
511 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 10:18:51 ] Smalltalkなら可能です
512 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 11:32:21 ] >>509 言語機能としてはないので、無理やりやることになる。 一応こういうのはあるけど、安定してるかどうかは不明。 lua-users.org/wiki/PlutoLibrary
513 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 13:19:28 ] >>508 試してみましたが、luabindではligthuserdataではなくuserdataを使用して 独自の型ID等を付加してチェックしているようで、無理でした。 luabindのソースを追ってみたところ、luabind::detail::convert_to_luaで C++側の変数の参照をluaのスタックに積めることが分かったので、 これでどこかのテーブルに置くとか引数で渡すとかの方法が使えそうです。 luabindのドキュメントにもサンプルにも、こういったスタックを使う方法が 記載されていないので、本来の使い方とは違う気もしますが。
514 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 13:24:32 ] >>513 通常、スクリプトにはC++クラス型のインスタンスのポインタを渡してポインタで操作させる。 C++の参照はC++固有の機能なので他の言語では使えないと考えたほうがいい。 別の変数に代入した瞬間(参照で無く実体のコピーとして)にコピーコンストラクタが発動したって文句言えないぞ。 まあバインダがエラー吐いてコンパイルの段階で失敗すると思うが。
515 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 13:29:57 ] 休止モードを呼び出せばいいんだよ。
516 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 14:09:30 ] >>514 bind側に参照を渡した場合は、ポインタに変換して管理してるみたいですね。
517 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 08:47:27 ] >>510 >>512 ありがとうございます。 Pluto調べてみます。
518 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 09:36:22 ] LuaでGUIムリだろと思ってたら、意外とバインダが出てくるもんだなw お前ら優しすぎw
519 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 10:21:52 ] 小学生に方程式ムリだろと思ってたら、意外と鶴亀算が出てくるようなもんだな
520 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 11:31:33 ] 最近はメインループのかなりの部分まで組み込みスクリプトで作っちゃうのが主流になりつつあるのかな。
521 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 12:02:53 ] Luaだと入力補完のあるエディタが無いから 逆にやり難いと感じる俺
522 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 12:11:48 ] >>520 大半を組み込み言語化した結果、パフォーマンスの壁にぶちあたって 機能分離可能なところはどんどんC++化していく、ってのが定番だとオモ サンプル:俺
523 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 12:45:05 ] まあ通常、動的(型付け)言語はネイティブコードと比べて10倍以上は遅いからな。 オレもスクリプトでゲーム開発環境を一通り書き上げたところだが、 60フレームまわしたらそれだけで意外にCPU食ってしまうので、ちと困ってる。 最低ラインがPentium 4 2.4GHzくらいになった。
524 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 14:49:37 ] JIT付き静的型付けスクリプト言語 穴場だから誰か作れば 有名になれるかもよ
525 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 15:10:52 ] >>524 すでにあるっちゅうねん。 .NET Framework向けだがな。
526 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 15:54:13 ] >>.NET Framework向けだがな。 駄目じゃん
527 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 16:18:55 ] 作りたいと本気で思ってる俺が来ましたよ もし作るならスクリプトで定義したクラスのインスタンスがC++から簡単に作れて、マルチスレッドとか使って同時に複数のインスタンスを参照してもおかしくならない仕様にしたいな
528 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 16:46:03 ] つAngelScriptJIT ただしやり方は不明。
529 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 18:52:02 ] LuaJIT ってなかったっけ?
530 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 19:09:51 ] Luaは静的じゃないでしょ
531 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 19:18:30 ] ああごめん、静的を見落としてた
532 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 13:59:21 ] luaのlua_pcallのerrfncが呼ばれたときに、元のエラーメッセージとは 別にソースファイル名、行番号を収集する場合なんですが、 lua_getstackのレベル指定で、1から++しながら順にたどって 最初にcurrentlineの値が-1以外になったレベルがソースファイルの 階層と判断して問題ないでしょうか?
533 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 15:45:53 ] メンバアクセスの:と.ってどう違うの?
534 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 17:27:09 ] .が通常のメンバアクセスで、:でアクセスする場合は v.(v ,〜 に展開される。 例: v:open(arg) -> v.open(v, arg)
535 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 17:53:43 ] d
536 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:04:12 ] >>17 問題1 使用言語: R f <- function (n) {substr("abcdefghijklmnopqrstuvwxyz",1,n)} > f(6) [1] "abcdef" > f(30) [1] "abcdefghijklmnopqrstuvwxyz"
537 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:06:04 ] すみません。 書くところを間違えました。 ごめんなさい。
538 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:06:48 ] 聞かれてないけどついでに補足すると.は[]に展開される v:member(arg) -> v.member(v, arg) -> v[menbe](v, arg)
539 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:09:23 ] v['menber'](v, arg)
540 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:17:00 ] へー じゃあメンバアクセスのたびにマップ検索してんのか 遅くならないのかな
541 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:28:37 ] 空想具現化プログラミングというところから落としたlua5_1_3_Win32_mbenc_a2.zipを展開したところbin2c5.1.exeにウイルス検知ソフトが反応したんですが、これは大丈夫なんでしょうか?
542 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:31:42 ] >>540 そりゃ勿論遅いだろうさ
543 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:41:44 ] メンバだけの話じゃないだろうし。 変数名からなにから全ての識別子の判定で毎回どこかのテーブル見てるはず。
544 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:59:47 ] >>541 カスペルスキー系の誤検出のはず。 bin2cとか別に普段使うものでもないから削除しておいても良いかと。
545 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 19:20:09 ] >>543 ローカル変数は実行時はテーブル見ない。例えば、 local a = b * c + d を local a = b * c a = a + d に変えても速さは変わらない。
546 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 19:37:56 ] >>544 ありがとうございます安心しました
547 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 23:33:25 ] 静的型付けならPawnいかがかな?
548 名前:デフォルトの名無しさん mailto:sage [2009/11/30(月) 22:05:16 ] ちょっと確認したいんですが lua_registerで登録した関数を呼び出すときには新しいスタックが毎回生成される、したがって Glue関数内部ではlua_gettopでスタックの数を確認する必要なしにスタックの1番目が最初の引数、2番目が・・・としてよい 同様に、返り値もスタックの1番目が最初の返り値、二番目が・・・としてよい(何も考えずにスタッククリアして返り値を積めばいい) これは正しいですか?
549 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 00:52:46 ] うむ
550 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 06:17:28 ] >>524 ActionScript 3.0 がそっちのほうを目指しているんじゃないかな。 いちおう Flex SDK はオープンソースらしいから、 自分のプログラムに組み込むこともできるかも。 >>540 Lua Performance Tips www.lua.org/gems/sample.pdf for i = 1, 1000000 do local x = math.sin(i) end runs 30% slower than this one: local sin = math.sin for i = 1, 1000000 do local x = sin(i) end
551 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 21:46:34 ] Luaについて質問です。 10進数で書かれた文字列、たとえば「\130\160\130\162\130\164」は Lua上で「あいう」となりますが、外部ファイルに記述したものを io.linesで取り出したものだと、コード列が返ってきてしまいます。 これを通常の文字列に変換したものとして使いたいのですが、どうしたらいいのでしょうか。
552 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 21:50:08 ] >>549 ありがとうございます
553 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 22:20:40 ] >>551 多分C側でバイナリに変換しないとダメじゃないだろうか。 Luaの標準ライブラリでももしかしたら出来るかもしれないが、 Cの方がてっとり早いだろう。
554 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 23:27:17 ] SquirrelのほうがLuaよりゲーム向けなんかな? どっちも知識なしだったらSqから勉強でいいのだろうか
555 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 23:54:06 ] >>554 どちらも汎用スクリプトだから処理系単体ではどちらがよりゲーム向けということはない。 周辺ライブラリやバインダの入手性や使い勝手の差はあると思うけど。
556 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 01:51:00 ] >>554 速度がLua>Sqで結構大差あったりするんで ttp://ja.wikipedia.org/wiki/Squirrel のLuaとの違いに強い魅力を感じるんでなければLuaがオススメ。 特に知識なしなら、Luaのほうが日本語資料が充実してるんで勉強しやすいかと思う。
557 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 02:00:16 ] lua は文法がな……
558 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 08:15:39 ] 日本語は文法がな・・・
559 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 09:41:13 ] AngelScript|Д゚)ジー
560 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 11:48:28 ] >>551 loadstring をつかえばできるよ。 local str = "\130\160\130\162\130\164" -- io.lines で取り出した文字列 local decode = loadstring("return \"" .. str .. "\"") print(decode())
561 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 15:29:08 ] >>449 コンパイラがOSロケールに依存してるから英語にしましょうなんて愉快すぎるわ 他のロケール依存アプリ全部道連れにする方法なんぞ万人に薦められんだろ
562 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 16:39:37 ] 問題が起こるのはShiftJISを決めうちして作っている一部の馬鹿アプリだけだろ。 なぜ全部とか間抜けな話になるのか、頭の悪い奴の考えはさっぱり分からん。
563 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 16:40:53 ] バカアプリの代表が Visual Studio って話じゃないのん?
564 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 18:39:01 ] そんな事よりお前ら、GameMonkeyについて語るんだ。
565 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 18:47:34 ] winアプリにスクリプト組み込む場合、メッセージ(WM)処理どうしてる? 自分はマルチスレッドにしてるんだけど、WM_CLOSE受けたときに スクリプトが走ってたら、スレッド他殺していいものなのかどうか。
566 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 18:57:22 ] 保存したいデータがあるかどうかで判断しね?
567 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 19:00:15 ] データ保存しない場合はどんなタイミングで落としても問題無いってこと?
568 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 19:16:24 ] スクリプトを複数スレッドで別々に動かす状況がわからんな… Luaだと、Lua_yieldでスクリプトの処理を一時停止させて次のスクリプト、という感じではダメなの?
569 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 19:43:49 ] それだとスクリプト書く側に停止を意識させないとダメですよね?
570 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 22:23:10 ] スクリプト側にメインループを置いて処理してるの?
571 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 00:38:27 ] winmainでメッセージループ、別スレッドでスクリプト。 スクリプトは入力待ち(マウス等)で関数無いで停止することがあって、 その間にメッセージループ側にWM_CLOSEとか来た場合にどうやって 終了させるかで色々迷っている、と。 スクリプトで割り込みを意識するような書き方は手間なので、 スレッドごと落とせると楽なんだけど、lua_Stateってスレッドごと 落とした後にlua_closeに渡して大丈夫なのか?ってのが疑問な わけですよ。 lua_call系にステップ実行があると良かったんですがね。 ステップ数も指定できたりするのが。
572 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 09:26:27 ] >>571 スレッドを強制終了したら、基本的に何が起こってるか不明というか たとえばガベコレの途中だったりしたら(その他でもあらゆる不明な原因で) 異常な状態になるからやめたほうが良い。 手段としては、別スレッドのほうの処理をコルーチンで構成しておいて、 コルーチンがyieldしたタイミングでコルーチン呼び出し側のコードで 終了チェックするようにする。 あとウエイトが絡む関数については、待ちループで終了チェックをするようにして、 終了フラグが立っていたらyieldを起こすようにする。 とかそんな感じじゃないの。
573 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 09:30:46 ] >>571 無限ループ防止という観点では、デバッグフックで1行実行ごとに関数呼ばせて、 その中でカウンターアップしていって、カウンターが一定の数になったらyieldとかいう手もある。はず。
574 名前:デフォルトの名無しさん [2009/12/03(木) 11:24:54 ] スクリプト側の待ちループの中でlua_yieldを呼び出すグルー関数を呼びだすようにしておき、 メッセージ処理の待ちの間、具体的には MSG *lpMes=&m_Msg; ZeroMemory( lpMes, sizeof(MSG) ); while(lpMes->message!=WM_QUIT) { if(PeekMessage(lpMes,NULL,0,0,PM_REMOVE)) { TranslateMessage(lpMes); DispatchMessage(lpMes); } else { 〜〜〜 } } の、〜〜〜の部分で1回目はlua_call、2回目以降はlua_resumeでスクリプトを呼び出せばいいような気がする。
575 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 11:28:06 ] >>565 他のスレッドはいきなり殺したらあかんでしょ。 メインスレッドからフラグたてて、よしなに自殺
576 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 11:29:49 ] てか、この辺のマルチスレッドの話ことってLua関係なくないか?
577 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 11:44:10 ] >>571 (before) 入力待ち(マウス等)で関数内で停止する (after) yieldを使い、外で停止する 入力が来たらresumeで関数内に戻る WM_CLOSEが来たらresumeしないまま終了
578 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 12:59:28 ] lua関係ないよな。普通にC++だけで書いてても全く同じだ。 まあ、lua (ないしは squirrel) なら、yield のタイミングで同期を とるようなコードにしておくのが無難ってのはその通りだと思われ
579 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 20:42:03 ] >>573 なるほど、それならステップ実行できますね。 >>他のレスくれた方々 具体的に書いた例だとマルチスレッドになってるけど、根本は WindowsでLua使うときにメッセージ処理をどうしてるかって話ですから。 避けて通れないだろうから、実際に組み込んでる方々はどう対処してるかが 気になったもので。
580 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 22:32:02 ] >>579 シングルスレッドモデルで組んであれば処理の流れ的に問題になるようなことは別にない あとはオブジェクトをどう管理してるかの問題。 ウインドウのインスタンスを lua 配下にしてある(生成もlua側から)なら、それぞれのウインドウの メッセージ処理部から、lua でのインスタンスの適当なメソッド (onCloseとか) をイベント的に callback させて閉じるかどうかをスクリプト側に判定させればいいだろう ウインドウのインスタンスがグローバルなら、lua 側も同様に グローバルメソッドをイベントとして呼び出して判定させるように組めばいい
581 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 18:14:29 ] Luaのスタックとか文法とかにいまいち馴染めないからエンゼルスクリプトをやってみようかと思ったが日本語資料がなさすぎて泣いた
582 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 18:28:07 ] >エンゼルスクリプト なんか可愛いな
583 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 18:39:34 ] つ英文マニュアル 結構読みやすいよ。 あと、WIPのtest_featureに入ってるサンプルもわかりやすい。
584 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 20:37:59 ] エンゼルスクリプトって速度どれくらい?
585 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 21:19:06 ] >>584 >>347
586 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 21:19:32 ] >>584 >>347
587 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 21:20:21 ] おい、結婚するか
588 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 21:46:45 ] そうだな。結婚すると良いよ。
589 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 21:49:36 ] じゃあ俺が息子になろわ
590 名前:551 mailto:sage [2009/12/04(金) 21:52:36 ] >>553 ,560 回答が遅くなってすみません。 >>560 さんの方法で望みの動作になりました。 お二方とも、本当にありがとうございました。
591 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 23:34:54 ] >>581 tolua++を使えばいいと思います。 ttp://lua.mine.nu/w/LuaBookSupport
592 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 23:36:01 ] 日本語資料が無いから辛いと書いてるのにそんなの勧めるなよw
593 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 23:46:07 ] Pawn何で人気ないん?
594 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 23:49:03 ] Luaの入門書読み終わったけどユーザーデータについてあんまし書いてなかったぜ ポインタ渡せないとオブジェクトの操作ができないジャマイカ
595 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 23:49:50 ] Luaの入門書ってどれのこと?
596 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 00:06:50 ] 入門Luaプログラミングというやつなんだけど、ちょろっと1Pくらいしか説明がなくてわかりにくかった
597 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 00:21:15 ] luaといえば、下の二つのスクリプトを順に実行すると、 --a.lua local v = 1 local function f() print(v) end fv = f --b.lua fv() 結果 1 感じになるんだが、関数の実体もガベコレされてるのかな? 関数内で使ってるlocal変数もコピーかリファレンスを持つことになると?
598 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 00:32:19 ] >>597 Luaはよく知らないが、単にグローバル変数を 2つのスクリプトで共有してるだけなんじゃね?
599 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 05:19:56 ] >>597 fv が f をつかんでいる間はつねに f のなかから v が参照可能だよ。 Lua の関数も参照されなくなればもちろんガベコレされる。 > 関数内で使ってるlocal変数もコピーかリファレンスを持つことになると? Lua ではこういう変数のことを upvalue と呼んでますが、 必要に応じてスタックからヒープへコピーされるみたい。 www.lua.org/docs.html ここにある The implementation of Lua 5.0 っていう論文に、 イラストつきで説明があります。
600 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 06:44:46 ] >>599 完全な回答をありがとう。凄くすっきりしました。 この辺の仕様はとても良くできてるなと思いますね。
601 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 07:34:58 ] closureみたいなもん?
602 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 08:39:50 ] >>601 そう。レキシカルクロージャです。
603 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 11:28:25 ] すっきりとした仕様だね。 Schemeライクというか。
604 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 12:22:26 ] squirrel だと同等のものは「Free variables」と呼ばれててこちらは対象の明示指定が必要だね
605 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 14:12:22 ] 未踏ユースにLua高速化が採択されているんですね。 スクリプト言語Luaの高速化と省メモリ化 (2009年度上期未踏ユース) www.ipa.go.jp/jinzai/mitou/2009/2009_1/youth/gaiyou/sk-3.html hogelog/lua (ソースコード) github.com/hogelog/lua [lua]記事一覧 - hogeなlog (開発者ブログ) d.hatena.ne.jp/hogelog/archive?word=*%5Blua%5D
606 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 15:06:08 ] >>605 エエー、あんな古臭い言語を今更高速化するのが予算つくのか。 LuaJITだってあるのに。
607 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 15:20:44 ] ヒント: 電気通信大学
608 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 17:15:48 ] >>606 ところがLuaJITのGCにはあんま手が入ってはいないんだ。
609 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 17:41:58 ] こんなんで採択されるのかよw ローカルなスクリプト言語 高速化してたら切りが無いぞ
610 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 17:43:19 ] 本家と連絡取らずにやってるんなら残念な結果になる可能性が高い気がする。
611 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 17:45:53 ] よーしじゃあパパAngelScriptを高速化しちゃうぞー
612 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 17:56:48 ] C言語そのままスクリプトにしたようなのってありますか?
613 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 18:10:43 ] >>612 文法のことならSquirrelとかPythonがある程度近いと思うがそのまんまってのはたぶんない
614 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 18:14:43 ] >>612 csl.sourceforge.net/csl.html
615 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 18:17:18 ] >>612 C++だけど、CINT
616 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 23:16:35 ] クロージャとコルーチンさえあればもうCでいい気がしてきた俺には十分魅力的だなぁCINTわ
617 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 08:17:06 ] CINTにクロージャとかコルーチンとかあったか?
618 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 08:25:09 ] >>616 それだったらGoのほうがいいんじゃ。
619 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 11:33:15 ] Cっぽい文法ならAngelScriptでいいじゃない
620 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 11:25:54 ] pawnとgoとgamemonkeyのスルーっぷりw
621 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 11:32:15 ] C言語みたいなプログラム書きにくい言語でスクリプト記述したいとか、どんなマゾよ?
622 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 11:34:23 ] 世の中、なにか一つ習得するとそれにしがみつくのが習性という猫もいるんだ。
623 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 17:37:44 ] >>621 これってたまに見かけるが、Cってそんなに書きにくいか?
624 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 17:49:32 ] >>623 慣れだよ
625 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 17:56:34 ] Cの書きにくさは、資源管理(malloc/free)がプログラマ任せであることや、 文字列操作がめんどいことにあって、構文や文法自体はそんなに書きにくくは ないよね。Cが書きにくいなら、JavaがあそこまでCを引き継いだような仕様には なってないと思う。 # でもまぁCが書きにくいと主張する人は、JavaはCから書きにくさを継承したと # 主張するか。
626 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 18:04:16 ] Cの書きにくさ ・クロージャがない ・ガベージコレクションがない ・メモリアクセス保護がない ・文字列型がない ・というかコレクション型が一切ない ・というかforeachがない ・せめてイテレータくらい付けて ・関数オブジェクトの定義が面倒(定義と関数ポインタの扱いが別) ・というかファーストオブジェクトになってない とまあ、仮にオブジェクト指向でなかったとしてもこれくらいあるわけだ。
627 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 18:06:45 ] アセンブラに比べたら格段に書きやすい
628 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 18:10:14 ] あー複雑な型の宣言や定義の構文は魔境入ってるかw
629 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 20:04:32 ] Cは40年近く前に出来た化石言語だからな。 当時のスペックのコンピュータで動かすためにキモイ仕様にしてるから書きづらくて当然。
630 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 21:35:50 ] ネイティブ系ではテンプレートの便利さに触れると、C++以外の言語を受け付けなくなるよ。
631 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 21:57:19 ] >>630 ふーん……。 D言語とかOCamlとかHaskellは触ってみたことあるの?
632 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 22:09:32 ] 臭いものに蓋をするのがITの正道 蓋をしないネイティブ系・組み込み系は邪道だな
633 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 23:16:45 ] なでしこやろうぜ!
634 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 23:20:52 ] >>632 怖いものみたさor言われるままに蓋を開けて 自分の足を撃つのがITの正道
635 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 12:43:40 ] >>630 テンプレートでほら、関数型言語っぽいプログラミングも可能になる!!! とか言われてもぶっちゃけあれキモいんだけど実際のところどうなの?
636 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 12:51:44 ] boost spiritとかboost lambdaは、使う使わないは別として、 キモいと思わない人はいないんじゃないかと。
637 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 13:51:30 ] C++をメインで使ってるけど、ぶっちゃけDirectXやライブラリの対応が いいネイティブの別言語ができたらそっちに乗り換える。
638 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 13:57:23 ] >>637 そういうのは、ラッパーライブラリひとつで解決できる話なのさー。(他言語対応) ただし動作検証用のコードは一部C++で用意しとかないといけないと思うが。
639 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 14:01:28 ] その使い勝手のいいラッパーが無いという話をしているんだろう。
640 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 15:47:16 ] boost::lambdaを使いこなしてない奴はC++を理解していない(キリッ
641 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 20:17:26 ] >>636 あれはその、なんていうかキモかわいい。
642 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 21:15:09 ] Brainf**kやろうぜ!
643 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 21:42:40 ] コンパイルにかかる時間が可愛くなさすぎる。
644 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 21:54:01 ] その視点で見るとGoは実に可愛らしい
645 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 05:14:24 ] Goって組み込めるの?
646 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 08:05:54 ] \ l´⌒\⌒\ \\ \ \ ヽ ) ) \\ \\ ( \ \∩___∩ \\ \ \ ⌒⌒| ノ ヽ \\ \ \ / ● ● ト、\ \\\ \ Y | ( _●_) ミ\ \\\ \ / 彡、_ |∪| ノ \ \\\ (____)―ヽノ' ヽ  ̄ ̄ ヽ\\ \, j l l .l } Lua! l (_ノノノノ
647 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 11:00:26 ] >>637-638 お前、なにかよさげなライブラリある度にラッパー作ってたDelphi使いの俺をなめるなよ。 さすがにもう嫌になってDelphi使ってないわ(´・ω・`) 昔は良い言語だったんだが
648 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 09:36:15 ] ああ、次はDelphi用Lua、Delphi用Squirrel、Delphi用AngelScriptだ…
649 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 02:30:59 ] ぶった斬りすいません luaでテキストから文字を読み込んで使いたいのですが、 そのあとに文字入力のために同じ関数(io.read)を使うと文字入力できなくなってしまいます。 文字読み込みのio.readと、キーボード入力のio.readの区別をつけるにはどうすればいいのでしょうか? よろしくお願いします。
650 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 02:34:20 ] >>649
651 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 05:21:19 ] テキストってテキストファイルのこと? それとも標準入力?
652 名前:>>649 mailto:sage [2009/12/12(土) 21:22:55 ] >>651 レスありがとうございます。 テキストファイルから文字を取り出してluaの配列に入れています。
653 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 14:27:50 ] >>504-505 これってコンパイル済み(.amx)ではなくて 普通のPawnファイル(.p)も実行出来ます?
654 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 15:13:42 ] と思ったらPawnはコンパイル済みのしか実行出来ないみたいですね スレ汚しすみません
655 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 19:25:17 ]
656 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 19:26:52 ] Luaファイルって、配布するときに隠すことできる? Cの組み込みで使おうと思っているのだけれど、Cはコンパイルすれば自動的にソースは見えなくなってくれるからおk。 けど、Luaファイルで記述した部分がもろばれになってしまうので、どうにかならないかなぁということです。
657 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 19:43:00 ] 隠すというのがコンパイル後のバイナリでOKというなら、Luaもバイナリ出力することができるよ。
658 名前:656 mailto:sage [2009/12/14(月) 20:47:13 ] まじか。 blog.dlixia.com/index.php?UID=1243877250 こんな感じなのか。 なんとなくだけど、Luaは簡単にリバースエンジニアリングできそうな予感がするな。。。 まぁ及第点はあるよね、きっと。 ありがとう!
659 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 23:07:40 ] javascriptを組み込んだらいいんじゃね? ユーザー多いし、資料多いし。 って思ったら、処理系実装が軒並みLGPLとかMPLとか・・・・
660 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 00:00:39 ] スクリプト言語から離れるが、自作のファイルアーカイブクラスでメモリにスクリプトやコンパイル後のバイナリを読み込み、 そのメモリの内容をコンパイル、もしくはバイナリ読み込みするようにすればいいと思う。
661 名前:デフォルトの名無しさん [2009/12/15(火) 00:34:42 ] >>659 CRIScriptとかはどうなんだ? BSD風ライセンスらしいが
662 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 00:35:06 ] さげわすれた・・・・
663 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 02:36:52 ] CRIScriptね。 どうなんだろ、使用感を聞いたことがない。 あれ、主開発者がApple行っちゃったけど大丈夫かな、CRIなのにww いや、すごく期待はしてるんだよ
664 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 03:14:13 ] SpiderMonkeyかな
665 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 05:28:35 ] >>652 はじめ言っていることが良くわからなかったんだけど、いまわかった。 www.lua.org/manual/5.1/manual.html#pdf-io.input When called with a file name, (略), and sets its handle as the default input file. つまりいちど io.read でファイルを読み込むとデフォルト入力ファイルが変更されるので、 それ以降は io.read では同じファイルをさらに読み込もうとするみたい。 標準入力(キーボード)から読み込みたいときは、 io.stdin:read() を使えば良いんじゃないかな?
666 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 10:54:38 ] あー、もう!Pawn性能いいから組み込もうとしたけど ソース汚くて処理系によってはエラー続出で修正必須、もうやだ int main(int argc, char *argv[]) { extern AMX_NATIVE_INFO console_Natives[]; extern AMX_NATIVE_INFO core_Natives[]; extern AMX_NATIVE_INFO string_Natives[]; AMX amx; cell ret = 0; if (aux_LoadProgram(&amx, "test.amx", NULL) != AMX_ERR_NONE) exit(1); if (amx_Register(&amx, console_Natives, -1)) exit(1); if (amx_Register(&amx, core_Natives, -1)) exit(1); if (amx_Register(&amx, string_Natives, -1)) exit(1); if (amx_Exec(&amx, &ret, AMX_EXEC_MAIN)) exit(1); printf("%ld\n", (long)ret); aux_FreeProgram(&amx); return 0; } 悪銭苦闘しながらもコンパイラ、amx 実行側のビルド完了まで行ったから試しに サンプルコード(examples/cards.p) をコンパイルして実行してみたけど aux_LoadProgram のところでメモリエラー起きて落ちる もうPawn意味が分からない、資料少なすぎ助けて・・・・
667 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 10:57:56 ] 追記 Pawn ファイルで include <###> をしていない物は正常に実行出来た
668 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 12:14:25 ] ドキュメントが全てpdfだったり、インストールが実行形式だったり 変なところで敷居上げてる気はするな 敷居を下げる配慮をした結果なのだろうとは思うが
669 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 12:47:31 ] PawnはFloat使おうとして挫折した。なんで組み込み型じゃないんだよ。。。。
670 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 14:54:37 ] スレタイにある「Squirrel」の読みはアメリカ英語で「スクワール」で、 イギリス英語だと「スクウィール」のようです。
671 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 15:21:23 ] Luaのライブラリを最小限のサイズにしたいのだけど 削っても動作に影響ないファイルとかあります?
672 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 16:48:46 ] >>671 パーサー部分は削った? 参考→Lua書庫内etc/noparser.c
673 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 17:42:19 ] 最近Squirrelを始めた者です。 今、C++のクラスをバインドしているんですが、分からないことになりました。 あるクラスAがあってそのクラスのインスタンスからgetB()でクラスBのインスタンスを取得できるとします。 で、そこまでは a<-A(); b<-a.getB(); とすることでbには[instance]が入っているのを確認できました。クラスBもバインド済みです。 しかし、そこからbにたいしてBのメンバを呼ぼうと思っても呼び出せません。以下がエラーです。 AN ERROR HAS OCCURED [the index 'draw' does not exist] バインドするときに戻り値が何型であるかを設定する方法があるんでしょうか?
674 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 20:37:30 ] バインドの方法がおかしいんだろう。クラスインスタンスを返す場合は、その返したいクラスに対して sq_createinstance して squirrel のインスタンスとしての構造を作ったものに sq_setinstanceup したものを返す必要があるんだがそうしてるかい?
675 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 21:07:46 ] >>674 してませんでした。> createinstance 使い方が分からん・・・
676 名前:デフォルトの名無しさん [2009/12/15(火) 22:40:50 ] こんなコードにしてみましたが、違うんでしょうね・・・。だって、動かなかったですしね・・・。 static SQInteger bitmap_getgraphics(HSQUIRRELVM v){ Bitmap *b; sq_getinstanceup(v,1,(SQUserPointer*)&b,0); sq_setinstanceup(v,1,&b->getGraphics() ); sq_createinstance(v,1); return 1; }
677 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 23:30:53 ] Cの組み込みでLuaって速度的にどれぐらい出る? ゲーム作ってるんだけど、1fps≒16msの間にpcall呼びまくったりしても大丈夫かな。 ざっと3000回ぐらい。
678 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 23:43:58 ] ソース読んでたけど、よくわからん? sq_getclassでクラスをスタックに sq_createinstanceでそのクラスのインスタンスを作成し、スタックへ sq_setinstanceupでユーザーポインタをインスタンスにセット と思ったんだが、最初のsq_getclassでどうやれば返り値のクラスを取得できるんだ・・・
679 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 23:56:21 ] bzr
680 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 23:57:02 ] 間違えたぜ
681 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 01:05:04 ] >>678 主要なバインダには該当コードあるんだからそれを探して読もうよ。 sq_getclass はインスタンスのクラスを取得するもの。sq_createinstance をする場合に 参照するクラスはあらかじめわかってるんだから、C側で参照を保持しておくか、 あるいは global から名前指定しで取り出して使う
682 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 10:10:40 ] >>672 それはどうやれば良いですか? noparser.c でググったのだけど ファイルサイズが削れるだけの説明ばかりで
683 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 14:42:20 ] >>670 PCのスペックも環境も書いてないのにそんな話しても無駄だが、 最近のPCで本当にただpcall呼ぶだけなら3000回くらい平気じゃないかね。
684 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 14:43:41 ] >>682 コンパイル済みのスクリプトしか読ませないの前提でパーサ削除しろって話じゃないかね。
685 名前:デフォルトの名無しさん [2009/12/16(水) 17:03:32 ] 今更だと思うけど、luaとsquirrelのスピード測ってみたんで貼っておく (CentOS 5.3 64bit) 処理内容の擬似コードは ans=0 for(i = 0..10000) { ans+=i;} for(i = 0..10000) { ans-=i;} これを更に10000回 lua 5.1.4 10000 times ( 3.176293) squirrel 3.0 10000 times ( 8.569499) ruby 1.9.1 10000 times ( 20.318498) cpp 10000 times ( 0.197799) squirrelも十分速いと思うけど、lua速え、ルbywww ちなみに組み込んだ際の処理系サイズ lua 188k squirrel 371k ruby 5.2M
686 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 17:10:52 ] 意味無いことを
687 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 17:18:42 ] 下手をすると、Cでは変数が後で利用されていないと、 最適化でごっそり無かったことにされるから気をつけろ。
688 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 17:33:31 ] コンパイル時に計算済ませていきなり即値代入して終了とかな。
689 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 17:44:46 ] >>687 あるあるww 最初測ったら0秒だったよ 今回はLuaの1/15くらいだからこんなもんでしょ あと、rubyをコケにしてるような書き方になってしまった あれは便利さ重視だからスピードは二の次 rubyユーザーごめん 引き合いに出したのは、自分がよく使ってて、一応組み込めるから。
690 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 17:48:38 ] オブジェクト生成するからな。 とにかく意味が無い例であるのはたしか。
691 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 20:15:55 ] >>676 たぶんこんな感じかな。テストしてないので動作するか分からないけど static SQInteger bitmap_getgraphics(HSQUIRRELVM v){ Bitmap *b; //Bitmapのポインタを得る //Bitmap_tagはBitmapクラスを登録したときのタイプタグ if(SQ_FAILED(sq_getinstanceup(v,1,(SQUserPointer*)&b,(SQUserPointer)Bitmap_typetag))) return 0; //Bクラスのインスタンスの作成 //B_handleはBクラスを登録したときのハンドル sq_pushobject(v,B_handle); sq_createinstance(v,sq_gettop(v)); sq_remove(v,-2); sq_setinstanceup(v,-1,&b->getGraphics()); return 1; } BitmapとBのクラスはすでに登録されているものとしします。 ちなみにクラス登録時はこんな感じ //クラス登録 //class_nameにクラス名 sq_pushstring(v, class_name, -1); sq_newclass(v, SQFalse); //クラスハンドルの獲得 //class_handleに用意したクラスハンドルへのポインタ sq_getstackobj(v,-1,class_handle); //クラスハンドルタグの設定 //class_tagにクラスのタイプタグ sq_settypetag(v,-1,class_tag);
692 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 20:57:00 ] >>691 作りにもよるけどたいていは sq_setreleasehok 処理も必要
693 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 21:08:29 ] >>692 ん?sq_setreleasehookってコンストラクタの中じゃないの?
694 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 21:46:22 ] >>693 sq_createinstance はまさに構築済みの C++オブジェクトをラップして返すために あるもので、squirrel のコンストラクタをよばない。 普通のコンストラクタは中で C++のインスタンスを new してるから、 呼んでしまうと余分なC++インスタンスがつくられる上に、さらに 別のインスタンスを sq_setinstanceup した時点でリークしちゃうからね。 で、よばれないから、たいていコンストラクタでやってるはずの sq_setreleasehook は別途必要になる
695 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 22:27:12 ] >>694 おおっ、なるほどな。 良く見たら自分のメモリ開放できてなかったわ^^;)
696 名前:デフォルトの名無しさん [2009/12/17(木) 00:22:06 ] >>691 うおぉぉぉ 本当にありがとうございます!しかし、こんな風に書くとは全く思ってませんでした・・・ 勉強になりました。が、Squirrelは使いづらいなと思いました・・・。 >>694 ちなみにですが、691にはどんな追記をすればいいんでしょうか? 自分は下のようにやったんですが、プログラム終了時にあぼんいたしました。 Bitmap *b; if(SQ_FAILED(sq_getinstanceup(v,1,(SQUserPointer*)&b,(SQUserPointer)&SQBitmap)))return 0;//環境オブジェクトからBitmap*を取得 sq_pushobject(v,SQGraphics.getSQClass());//Graphicsクラスのクラスハンドルをスタックに乗せる sq_createinstance(v,sq_gettop(v));//そのクラスのインスタンスを作成(Graphics自体のインスタンスは作られない) sq_setreleasehook(v,-1,graphics_releasehook);//一番上のインスタンスに解放関数を持たせる?わからない sq_remove(v,-2);//クラスハンドルを削除している? sq_setinstanceup(v,-1,&b->getGraphics() );//実際にインスタンスにGraphics*をセットする なんか、他の部分も怖くなってきました。リファレンスだけじゃわかりませんね。
697 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 00:34:19 ] >>685-689 Rubyて感覚的には30分走らせる代わりに10分でコード書く。C言語は1時間でコードかくかわりに1分で走らせるとか、比喩があったなw
698 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 09:54:34 ] C言語と30年戦う代わりに1年で味方につけるべきだったな。
699 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 10:16:12 ] AngelScript|Д゚)ジー
700 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 11:05:57 ] >>696 記述自体はそれであってるけど、sq_setreleasehook するのは sq_setinstanceup が成功したのを確認した後でしょう。 終了時あぼんは、そりゃどっかプログラムが悪いんだろうとしか言えない。 その b->getGraphics() でとった Graphics が勝手に独自に解放されて大丈夫な構造で作られて ないのなら setreleasehook してはダメ、って、&つけてるってことはメンバ変数か。それはダメかも C++で管理を単純化するために、親が責任もって解放してるので、子オブジェクトは ポインタ参照したあともそのまま放置したのでOK、という書き方は実際よくあって、 そういったものをsquirrel に移すときは、子オブジェクトにポインタ渡してオブジェクトとして 作るけど sq_setreleasehook はしないという書き方にする必要がもちろんある。 親が先に死んだ状態で子をさわるとポインタ腐ってるのでクラッシュするけど それはそういうもの。squirrel は機構は提供してくれるけど、自動で判断してくれるわけでは ないから、あくまで C++ 的に破綻しないように注意して書く必要がある。 そういうのいやならオブジェクトを全体的にリファレンスカウント 方式とかで管理するようにするしかない。 そして循環参照トラップにはまるw
701 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 11:44:13 ] 循環参照嫌うなら弱参照系ないしはGCの実装が必要 もっとも、squirrel 自体がリファレンスカウントもGCも弱参照ももってるから、 既存ライブラリを持ってくるのではなく最初から書くのなら、C++ 側を squirrelの機構にべったりのっかるように書くという考え方もある。 個別のオブジェクトはごく単純にバインドするようにして、C++ 側でオブジェクトの親子構造を持つ場合は、 C++そのもののポインタではなく、squirrel のオブジェクトを一旦作ってそれを HSQOBJECT で持つようにする。 さらには、配列や辞書が必要なら、STL とかを使うのではなく、squirrel の array / dictionary を使う。 C++ 側で元のオブジェクトを参照する場合にも squirrel の機構を経由する必要があるので一手間増えるけど、 squirrel に値を返す時は持ってる HSQOBJECT を sq_pushobject するだけになるからとても簡単になるし、 オブジェクトの寿命管理も squirrel 側になるから、いつ誰が破棄しても安心
702 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 14:23:49 ] >>700 あー、やっぱり、新しくインスタンス作ってるんじゃないんならsetreleasehookはいらないんですね。 なんか中で気持ち悪いことやっててGraphicsインスタンス作ったつもりはないのに解放関数与えないとダメなのかと思いました。 (ソース読んだ限りではそういう記述が無かったので、疑問には思ってましたが・・・) あとは、終了時あぼんの原因を探れば動きそうです。ありがとうございました。 ていうかBCC5.5ってテンプレートが弱いからSqPlusとか使えないんですね・・・。メチ不便
703 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 15:54:55 ] xtalの新verが出てる。 デバッガー早くできるといいな。
704 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 16:06:30 ] Squirrelの演算子一覧に => ってあって え!? と思ったら単なるtypoだった・・・
705 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 16:07:52 ] ぅあ
706 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 19:09:29 ] squirrelで {};hoge をコンパイラが受け付けないのには何か理由があるの? 疑似BNF見る限り許容されそうなものだけど ワンライナーだとついテーブルコンストラクタに ; 付けてしまう
707 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 13:49:00 ] nscryptみたいな軽量な物で小数点も扱えるのあればなぁ luaとかは無駄な部分が多すぎて
708 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:00:18 ] 他の部分がNスクで十分なら、多分Nスク作者に要望を投げてみるのが、 その要望の解決にはいちばんいいと思う。
709 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:17:21 ] >>708 出来るならそうしたいけど nScript作者はここ最近活動休止中みたいで そのスクリプトも含め更新と言う物が一切されてないから期待出来ない だから自分で実装しようとしてるけど 元々Cのみで書かれてないから移植作業がまず大変
710 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:40:00 ] はてな日記見てみたけど、なんか次世代エンジンに注力してるみたいね。 そのへん追いついてなかった。
711 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:46:52 ] あ、あと、どう使うつもりか知りませんがライセンス大丈夫ですよね? Nスクのライセンスは全く見ずに言いますが。
712 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:47:50 ] >>711 個人利用のみだから問題ないはず、と思う
713 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:48:14 ] nScriptってWWWCの作者のだよな? NScripterと話がごっちゃになってね?
714 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:51:05 ] 突っ込もうと思ったら怒涛の勢いでレスが・・・ 確かに混同してるな
715 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:53:30 ] >>713 このことです ttp://www.nakka.com/soft/ns/
716 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:55:29 ] あれ、ソースみてるけどフルCでね? windows.hに依存してるのはあるかもしれんが
717 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 15:02:33 ] パイソンとかルビーをゲームに使ってる人はいますか?
718 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 15:07:10 ] >>716 フルCに見えるけど一部Winの機能使ってて 手直し必須だと思う
719 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 15:37:08 ] スクリプト実行する根っこの部分でWinの機能つかってるから 一部と言うより根本的な修正が必要だなこれ
720 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 17:09:35 ] ところでお前ら、この手のスクリプトエンジンに手直し入れる場合、どのぐらいまで手を入れますか? 基本命令や文法とかまで変えたりする?
721 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 17:10:05 ] >>717 ノシ IronPython使用中。 1週間ほどあればスクリプト部分はcPythonにも移植出来るかな。 特に問題ないよ。 スクリプト内でマルチスレッド化が普通にできるのが強みだな。
722 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 17:58:46 ] >>720 本家バージョンアップの度にパッチ当てるの面倒だから基本的にそのまま 作業を楽にする目的で文法いじるとしたらプリプロセッサとかトランスレータを間にいれるかな 文法変えずに必要な機能が実現できないなら言語の選択に問題があるかと ライブラリレベルならアーカイブが透過的に扱えるようIOを自作のに差し替えてる
723 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 02:05:39 ] 誰か>>715 のnScriptをCのみで動かせるように 手直ししてくれる人いません? メモリ管理や足りない型の再定義とかはなんとかなるけど マルチスレッド処理には詳しくないから 同期処理とある部分の代用関数が分からない
724 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 02:28:47 ] そもそもCにスレッドなんて無いような
725 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 04:55:19 ] TCP使えるネットワークライブラリでC汎用なのも無いきが
726 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 14:10:06 ] luaはどうも記述が冗長になる・・。 if ~ then ~ endとか。 「関数先頭でリソース割り当て。割り当て成功してたら 終わりで開放。」見たいなコード書くとフラグ使って 最後でif文みたいな感じになるけど、 C#のIDisposable見たいな機能があると便利かと。 割り当て・開放のコードが集約できるから見やすそう。
727 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 16:26:27 ] Cでそういうの書けばいいねん
728 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 17:54:01 ] ・テーブルに関数をpushする ・テーブルが空になるまで関数をpopして呼び出す の2つを簡単に出来るようなライブラリを作ればいいと思う
729 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 17:55:48 ] >>728 で、それが種々のbinderになるわけですが何か。
730 名前:726 mailto:sage [2009/12/20(日) 18:18:19 ] きっと欲しいのはこんな感じ do local resource=... finaly finnalize(resource) end : : end -- ここでfinalyの内容が自動で呼ばれる。 自動で呼ばれるとなると言語サポートは必須かと。 metaluaあたりで作れるかな?
731 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 18:25:56 ] 何のためにGCがあると思ってるんだろうか
732 名前:726 mailto:sage [2009/12/20(日) 18:28:56 ] javaのGCじゃリソース管理できないから C#はIDisposable入れたんじゃないの?
733 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 18:33:54 ] >>732 違うよ。 本来的にアンマネージドなリソースの管理はGCじゃなくてプログラマの責任だから、 プログラマが明示的にDispose()かける仕組みになってるんだよ。
734 名前:726 mailto:sage [2009/12/20(日) 18:44:32 ] え? C#はかじった程度しかしらんのでうそ言ってるかもしれんが、 usingとIDisposabeなクラス組み合わせると リソース開放漏れが(ファイルのクローズとか)が防げますよー って使い方するんじゃないの?(C++のRAIIみたいな)
735 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 18:46:57 ] これでどうだ call_with_finally = function (block) local t, n = {}, 0 block(function (f) n = n + 1 t[n] = f end) for i = n, 1, -1 do t[i]() end end call_with_finally(function (finally) local resource = ... finally(function () finalize(resource) end) : : end)
736 名前:726 mailto:sage [2009/12/20(日) 18:57:38 ] >>735 よく思いつきますな。理解するのに 上下のブロックを10回ぐらい往復しましたよ・・・。 ただ、複雑になったらそのコードを一年後理解しなす 自身がないかも。 ついでにmetaluaでよろしく ノシ (冗
737 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 19:04:56 ] >>734 IDisposableを継承したクラスはusing構文で使うことが推奨されているわけだが、 当然この構文が使えない使い方があるわけで。 (using構文を使うと実用上スタックに載せているのと同じなわけで、ヒープに置きたい場合だってあるだろう、という話) で、ユーザーが手で作ってホールドしているIDisposableなインスタンスは当然自分で明示的に破棄しないといけない。
738 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 03:50:01 ] // / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ AngelScript 2.18.0!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
739 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 15:13:06 ] AngelScriptが2.18.0になってるな
740 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 15:16:21 ] ASの本だれか書いてくれ
741 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 15:39:12 ] ActionScriptなら
742 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 16:54:21 ] 仮想マシンをいくつもopenするのって良くないですか?
743 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 17:13:43 ] 同時に動かす必要が無いなら良くないんじゃない
744 名前:デフォルトの名無しさん [2009/12/21(月) 19:21:29 ] 良くないですね
745 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 21:23:01 ] >>740 まずは2.18.0のShiftJIS対応版だ…
746 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 00:10:03 ] sjis対応なんて激変してない限りいつも同じ手順だろうに
747 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 00:38:06 ] AngelScriptはこまめに更新されるから、結構手間なのよ。
748 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 07:10:33 ] ShiftJIS<->UTF-8の変換を間に挟むだけなんだから、 一度書いたら別に毎度手間がかかる訳じゃないだろ。
749 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 07:53:25 ] // / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Lua!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
750 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 09:25:42 ] >>748 AS_DOUBLEBYTE_CHARSETで有効になる部分に、そのままだとビルドエラーになる部分があって、 そこを毎回毎回直さなきゃならないんだ。 公式に知らせたほうがいいとは思うが英語が苦手でね…
751 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 10:12:37 ] とりあえずdiff 取って投げれないの?
752 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 10:37:03 ] >>735 こういうの、JavaScriptとかRubyとかやってると思いつくよなw
753 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 10:38:18 ] 毎回なおすってまさか手でなおしてるんじゃ・・・ バージョン管理してパッチ吐いたりして、どうしてもパッチあたらないときは手で直すとかしたらどうかと
754 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 11:34:26 ] >>751 自分がいじったファイルをリポジトリにコミットって事? >>753 まさかの毎回手直し。 あと、 >バージョン管理してパッチ吐いたりして、どうしてもパッチあたらないときは手で直すとかしたらどうかと ってのは、TortoiseSVNの「パッチを作成」「パッチを適用」を使えって事? 質問ばかりですまん。
755 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 12:01:22 ] >>754 公式は svn かな。それなら 1. 公式から任意のバージョンをエクスポートしてきて、それで自分の手元で自前の svnレポジトリを作る 2. 自分の更新はそこに任意にコミットする 3. 公式の svn から適当なタイミング(リリースがあった時とか)で更新を「マージ」する これでおおむね安全に手元作業できるはず svn は以前は外部レポジトリからのマージができなかったので、 手元のレポジトリに「ベンダーブランチ」として公式の内容をまるごとコピーして、さらにそこからマージする 必要があったんだけど、今のは普通に外のレポジトリからマージできるのでこの手の作業は楽になった あるいは最先端技術でいくなら、bazaar のような、svn プロトコルに対応した分散構成管理ツールをつかうという手もある。 svn のマージはわりとややこしいし、ログの類もマージ作業に依存してしまうので、こっちのが構造的にははるかにスマート。 この場合、自分の変更分はローカルコミットとして維持する形になる
756 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 12:26:40 ] >>755 詳しい説明d。 ただ、AngelScriptはWIPのみsvnを公開してるみたいなので、 >手元のレポジトリに「ベンダーブランチ」として公式の内容をまるごとコピーして、さらにそこからマージする というやり方になりそう。 ちょっと試してくる。
757 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 12:38:19 ] >>756 WIPってなにかと思ったら work in progress か。 まあ、そりゃ svn ってのはそういうものだから^^; えーと、任意のリリースバージョンならタグうたれてるみたいだから ttps://angelscript.svn.sourceforge.net/svnroot/angelscript/tags/ からとれるかと。 バージョン間でのマージ処理したければ、ここのツリーの差分をひろってくればいい
758 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 16:40:58 ] そもそも 英語が苦手とか駄々こねてんじゃねえよクソが 死ねばいいのに
759 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 17:24:49 ] ごめん誤爆してた
760 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 17:30:59 ] >>759 ということにしたいんですね
761 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 17:34:46 ] メインラインにマージしてもらえば今後そのケースで悩む必要は無いというのに 英語が出来ないからというそれだけの理由で一生無駄な作業をしつづけるんだろうな 英語が出来ずともパッチ送るだけで十分なのに
762 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 17:39:17 ] そういうのはそう思う人がやればよろし。おしつけはおーぷんそーすの精神に反するのでいくない
763 名前:762 mailto:sage [2009/12/22(火) 17:39:53 ] ごめん誤爆した
764 名前:762 mailto:sage [2009/12/22(火) 19:33:50 ] >>763 人を騙るな。まじ気にしなくていいよ>パッチ送るとか
765 名前:762 mailto:sage [2009/12/22(火) 19:38:59 ] お前こそ誰だよ
766 名前:762 mailto:sage [2009/12/22(火) 20:51:42 ] 何で俺こんなにいるん?
767 名前:762 mailto:sage [2009/12/22(火) 23:13:59 ] >>762 の人気に嫉妬
768 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 23:16:08 ] 4800円もするpython入門書が古い版でしかもC組み込みについて全然触れてなかったでござる
769 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 23:33:42 ] 何も文章書かずにパッチだけいきなり送るとか、どんだけ失礼なんだよ。
770 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 02:41:15 ] お歳暮だって何も文章書かずにいきなり送りつけてくるだろ。
771 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 02:58:59 ] 最近お歳暮という日本の習慣を覚えたばかりの外国人の方ですか?
772 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 07:42:11 ] つまりパッチにoseiboって書いて送れと
773 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 07:56:22 ] おう、てめーらサンタさんディスってんのか
774 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 13:52:13 ] サンタさんはいい子にしかこないけど、 いい子以外にもパッチを送りつけるような真似はいかがなものかと。
775 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 15:55:19 ] ASが悪い子だと
776 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:46:07 ] >>769 gitなんかdiff形式のメール生成して送る機能なかったけ?w
777 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:48:17 ] まーでも、こういうときってgithubとかbitbucketみたいなサービス使って欲しくはある。 forkして変更して、変更を相手に送る(pullリクエストする)というのがシステムに組み込まれているから、 パッチ送るのも気軽なんだよね。
778 名前:デフォルトの名無しさん [2010/01/04(月) 14:49:54 ] コムラッドのタカネ終わってるな namidame.2ch.net/test/read.cgi/venture/1260791115/l50 set.bbspink.com/test/read.cgi/sm/1246009466/l50 set.bbspink.com/test/read.cgi/sm/1249183350/l50
779 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 15:51:39 ] オイ俺のコピペ脳、まで読んだ。
780 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 09:15:42 ] Lua について相談なんですが、 メタテーブルの __newindex を使えば、 テーブルに新しい key を追加するときにフックをかけることができるけど、 同じような感じで、テーブルの既存の key の値を変更するときに、 フックをかけることってできないかな?
781 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 10:36:17 ] メタテーブルの__indexは調べた?
782 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 11:26:52 ] __index は調べたんですが、 キーがすでにテーブルにある場合は __index はなにもしないですよね。 Metatable の index の擬似コードから抜粋: local v = rawget(table, key) if v ~= nil then return v end ← キーが存在するならその値を返す。 www.lua.org/manual/5.1/manual.html#2.8
783 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 11:52:07 ] 単純に、テーブル本体は何も仕事をしないでメタテーブルにすべて丸投げしたい と考えれば簡単なことなんだけどな。 空のテーブルにメタテーブルを持たせて key が何も無い状態を維持すれば良い。 いったんメタテーブルに丸投げするが、データを保持する仕事はテーブル本体でやる と考えるとややこしくなるよな。
784 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 12:20:51 ] 確かに! 間に空テーブルをかませばいいんですよね。 ありがとうございました。
785 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 00:41:10 ] Lua 5.2.0 work1 出てるね ファイナルもうすぐかも
786 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 18:50:02 ] > ファイナルもうすぐかも それはない
787 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 01:12:00 ] 環境周りが結構変わったのかな? - lexical environmentsの導入(in EXP do BLOCK end) - setfenv/getfenvがなくなった(debugのはある?) - 全thread(コルーチン)で環境はひとつのみ? 自作ライブラリは結構見直さないとなー
788 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 03:37:11 ] こうですか?わかりません local x = 1 do local y = 2 do ・・・ end end in {x = 1} do in {x = x, y = 2} do ・・・ end end
789 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 10:13:28 ] lexical environment は、ECMAScript (JavaScript) の with みたいなもんかな。 set/getfenv は関数に対して破壊的な操作をしてしまうので、新しいやり方のほうがきれいに書けるかも。
790 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 11:19:29 ] 空テーブルをsetfenvするモジュールシステムに慣れてる人なら、 もともと空っぽの環境を破壊されてもほとんど困らないけどね
791 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 21:19:47 ] 破壊的なのは「グローバルな関数の環境を変えてしまう」って とこじゃないの?setfenvする場合たいてローカル関数 をつくったうえで行う場合がほとんどだし。 function global_f() ~~~ end に対してglobal_fの挙動を変えたいがために(たとえば global_f内で呼び出しているprintの挙動を変える) setfenv(global_f,~~)とはやるのは危険だし。 (ほかスレッドでの呼び出しも影響を受ける) in { print=function(...) ~~ end } do global_f() end とできるからそのほうが安全・・・ってのが 使いどころなのかな?
792 名前:791 mailto:sage [2010/01/13(水) 00:53:12 ] ごめん激しくうそ言った。 791の例でprintはglobal_fが作られた時点で固定化されているので 一番最後の方法では挿げ替えはできないね(orz
793 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 01:02:20 ] Tropico3という箱庭(miniスケープの方の)ゲームでlua使われてた。 なんかzlib圧縮(?)されてるから.luaファイルみてもわからんけど
794 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 09:45:12 ] >>792 それであってるんじゃないかな? print が global_f の外側で local で宣言されていれば global_f が作られた時点で固定化される(レキシカル変数として)けど、 そうでなければグローバル変数として参照されるので、 環境を変えればその影響を受ける。
795 名前:791 mailto:sage [2010/01/13(水) 19:13:03 ] 実際にビルドして試したので「間違い」で正しいかと。 本質的にはスレッドに対するsetfenvと同じで >94の勘違いと同質な問題。 子供の関数の呼び出しまで影響を受けるとなると 危険極まりないのも事実だし。(トレードオフではあるが) それよりもpcalやCスタック先からyield可能になったのは大きい。
796 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 07:28:39 ] あ、ごめんなさい。勘違いしてた。 関数が定義された場所の環境をそのまま引き継ぐってことですよね。 だから、スクリプトファイルを読み込むとき(dofile とかで)に in ... do を使うと、 以後、そのファイル内で定義された関数はサンドボックス環境で実行されるわけか。
797 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 18:43:54 ] Luaって table = { element1 = 3 element3 = "str" func element2() ...... end } みたいなことできませんか?
798 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 18:52:44 ] 事故解決しました。。。。ごめんなさい
799 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 06:58:28 ] Lua 5.2 work2キタ━━ ファイナルもうすぐかも
800 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 08:28:47 ] URLください
801 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 11:27:15 ] lua5.1.dllがノートンでウィルス扱いされるな
802 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 11:46:33 ] なにそれこわい
803 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 18:24:53 ] そういやShiftJIS対応Lua5.1.3もノートンでウィルスありと判定されてたな。 誤検出なのかな?
804 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:46:56 ] 皆luaスクリプトの暗号化はどうやってるん? リファレンスマニュアル探したけど、それらしい物が無かったんだが…
805 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:53:24 ] Luaってシリアライズできなかったっけ
806 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 01:12:18 ] lua_load/lua_dumpで自前で暗号化するくらしかできんよね
807 名前:デフォルトの名無しさん [2010/02/03(水) 08:55:04 ] 暗号化したファイルを読み込んで復元し、文字列にする>luaL_loadbufferやluaL_loadstringにその文字列を渡してコンパイル って手順ではダメ?
808 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 10:27:02 ] Python人気ねーな。luaより断然コード書きやすいのに。遅いけど
809 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 12:43:27 ] >>808 >>4
810 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 12:46:04 ] Luaがもうちょっとキモくない文法ならいいんだけどなぁ
811 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 12:49:10 ] 文法だけ変換するプリプロセッサかトランスレータのようなものを作ればいいんじゃないだろうか
812 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 13:02:55 ] たった数十kbくらいのサイズで Cライクな文法が使える超軽量な組み込みないかな LuaとかPawnも、小さい部類だろうけど不要な物が多すぎる
813 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 18:35:51 ] asじゃあかんの
814 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 21:16:11 ] Win版でUTF8とUTF16を相互変換するようにLuaを改造したけど需要ないかしら たとえばSDLとか ところで、Windows x64向けにビルドしてみたけど > print(2^63 - (2^63+1)) でなぜか0が返ってくる > print(2^31 - (2^31+1)) なら1になるけど ちなみにlua_Integerの実体ptrdiff_tは8バイトになってる どこがおかしいのかわからん
815 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 21:57:11 ] 整数も浮動小数点で計算するからだそうだ‥‥ 64bit integerに対して64bit doubleじゃ精度足りないっての パッチがあったからつっこんでみるが、ちゃんと動くか心配だ
816 名前:804 mailto:sage [2010/02/03(水) 21:57:40 ] >>805->>807 アドバイスありがとう。 luaL_loadbufferやluaL_loadstringを使うという発想は思いつきませんでした。
817 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 15:53:15 ] >>811 Euphoria, t3x, moto, JavaなどCトランスレータを実装している言語は探すと色々あるものの、 トランスレート後に吐いたCソースとハンドコードしたCソースとのリンク方法が 文章化されてなかったりするするんだよな。 >>812 小さくはないが...elastiCは? ttp://www.elasticworld.org/
818 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 19:12:28 ] Luaスクリプトってバインダなしで使い物になるレベル?
819 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 19:41:20 ] 何らかのバインダ及びグルーが無いと、スクリプトの意味が無い気が。
820 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 21:35:40 ] mingw ,gcc を前提としてるバインダが多い様な気がして lua手を出しにくいのです。。。
821 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 21:52:42 ] lua51.libとlua5.1.libって何が違うんだろう
822 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 21:53:06 ] それは気のせいないし思い込みでは……
823 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 21:57:42 ] .so を makefile でつくる、という事例にちょくちょく 遭遇しまうまう・・・orz
824 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 22:02:22 ] バインダはLuaではなくバインダという言語である!!
825 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 22:04:46 ] $(CC) を $(CL) とか代えて、pkg-config はそのままでも nmake -f makefile でビルドできるもんなんだろうか・・・
826 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 00:11:51 ] pkg-configはシェルスクリプトだからmsysなりcygwinなり要るだろ
827 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 00:39:23 ] nmakeには、一から書き直して食わしてる 必要なobjぐらいなら写せるだろ
828 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 00:52:13 ] それ全然lua関係ないじゃん 必要なc/cppファイルひろって Makefile 書き直すなり Visual Studio でプロジェクトファイルつくるなりぐらいやりなされ。 そんな難しいもんじゃない。
829 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 11:59:44 ] >>828 こういう問題を回避するためにSquirrelのソースパッケージをCMake対応にして フォーラムに投げてみたら、いらないって言われた……。
830 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 18:05:55 ] オレはCMakeで固まろうとした
831 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 12:14:44 ] luaのuserdataとlightuserdataの違いって userdata ・lua側でアロケート ・lua側でデアロケート(GC) ・Cには参照のみが渡される ・Cからは寿命が分からない lightuaserdata ・C側でアロケート ・C側でデアロケート ・luaには参照のみが渡される ・luaからは寿命が分からない これ以外になんか有りますか? それとluaとCでuserdata、lightuserdataの寿命を同期させる方法は有りますか?
832 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 12:41:41 ] meta tableの有無も違ってたかも
833 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 14:15:34 ] >>831 これは心の贅肉をそのまま箇条書きにしたみたいで面白いな 考え方としてはとりあえず lightuserdataは無くても整数値で代用できる、と割り切ってしまうほうが簡単 そうすると、整数とuserdataを比較するのは無意味だとわかる
834 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 21:32:49 ] |Д゚)<バインダが面倒な人向けにいいもの置いておきますね |Д゚)つ[AngelScript] |ミ サッ [AngelScript]
835 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 21:47:45 ] // / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ AngelScript!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
836 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 23:25:21 ] >>832 ,833 レスどうもです メタテーブルの有無は重要ですね いろいろいじってようやくユーザークラスをLuaに公開できるところまでこぎつけました しかしlightuserdataは使い道がわからず・・・
837 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:50:27 ] lightuserdataはCからのポインタの入れ物として使うのが想定されているらしい。
838 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 14:36:10 ] lightuserdataは、スクリプトで操作したいクラスのインスタンスとか放り込むんじゃないの? ゲームとかだとひとつのスクリプトで複数のオブジェクトを制御する必要があるし。
839 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 15:41:29 ] C++のオブジェクトとLuaのオブジェクトが混在するのか・・・ C++/CLIならもっとすごいことになるな
840 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 17:14:33 ] C++のオブジェクトをスクリプトで操作する感じかな。 例えばスクリプトで SetSpeed(1,20) とかいうような関数があった場合、C++側でlightuserdataを取り出し、 //lightuserdataからObjectのポインタを取り出す Object *lpObject=(Object*)GetLightUserData(L); //Objectを操作する lpObject->SetSpeed(x,y); って感じの処理をするグルー関数を用意する。
841 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 18:22:00 ] lightuserdataでC++/Luaのインスタンスを協調させてみようかと頑張ってるんだができないorz userdataでやれば上手くいくんだけどlightuserdataのほうが軽いらしいし・・・ C++側で tableを作る tableにインスタンスへのポインタをlightuserdataで格納 tableに各種メソッドを格納(メソッドはself(第一引数)tableからインスタンスへのポインタを取り出してクラスのメソッドをコールする) さらにtableを積んで__gcフィールドにデリータを格納 最初のテーブルにメタテーブルとして設定 最初のテーブルを返す という感じでやってるんだけどLua側で__gcが呼ばれてくれない mt = getmetatable、mt.__gc(hoge)とすればちゃんとデリータを呼んでくれるのに・・・ こっちがDLL codepad.org/5CuryxGE こっちがLua codepad.org/BON62sBh
842 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 18:44:41 ] userdataとlightuserdataは全く別物。用途が違う。 パソコンでできることがケータイではできないと嘆いているようなもんだぞ?
843 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 19:23:56 ] >>841 そういうことができなくなってる分軽いわけなんだが……
844 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 19:31:07 ] じゃあlightuserdataは何に使うんだろう コールバック的な使い方でしょうか
845 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 19:44:12 ] だから主にC側で作ったインスタンス(のポインタ)の受け皿だって
846 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 19:51:50 ] >>844 てか、マニュアルにもCのポインタそのものだって書いてあるだろう。 Cでよくあるハンドルスタイルやコールバックスタイルの構造を直接扱うためにある。 例えば fopenの帰り値の FILE* を void* にキャストして lightuserdata として持ってそのまま使う。 処理する時には、必ずCの関数をいちいち呼び出すのを前提として、 「LUA側は持ってるだけで何もさわらないデータ構造」として準備されてる。 これの使い方が直感的にわからない人がいるってのが驚きだった^^;
847 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 20:54:46 ] わからない人というか、深読みする人もたまにいるな。 ひどくなると「それはただの××だよ」と言われると反論してくる。 「お前はそうやって分かったつもりになってるだけだ」とか。
848 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 21:05:07 ] lightuserdataはテーブルのキーとして使う。 自前のオブジェクトのアドレスや、OSから渡されるハンドルをキーにしてテーブルを参照すれば、同じアドレスやハンドルに同じuserdataを対応させることができる。 ちなみに、この時のテーブルはweak tableにしておくといい。 ということを初めて知った時は目から鱗だった。
849 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 22:40:47 ] 何かLuaって面倒くさいな(´ω`)
850 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 23:14:16 ] ひたすら軽量さが売りの言語って感じだなあ。
851 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 23:22:51 ] ところで848のテクニック?のサンプルソースとかどっかでダウンロードできないかな?
852 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 23:50:34 ] >>841 みたいにuserdataの方にクラスのインスタンスのポインタを格納して Luaから呼ばれるC++側の関数で取り出して使ってるんだけど、>>831 みるとuserdataはLua側でGCかかるの?
853 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 00:40:38 ] codepad.org/8Z7d8J62 うーんこんな感じですかね? ポインタをキーにという発想はすごい便利そうな予感がしますね しかしグルーコード内のエラー処理とかってどうすればいいんだろう C++例外を投げるべきなのか、関数内でもみ消してlua_errorするべきなのか
854 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 07:40:28 ] >>852 「C++側」と「Lua側」をきっちりと分離したいんだな。 組み込み言語は、そういう幻想にうんざりしてる人のためにあるんだと思うけどな。
855 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 10:48:05 ] Luaって速度が同じぐらいで、文法が素直な組み込みスクリプトが作られたらあっという間に駆逐されそう
856 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 11:02:47 ] >>855 作られてないから駆逐されてない訳で
857 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 11:04:23 ] もともとマイナーな分野なのに亜流が既にいくつも出ていてそれができないってことは 実際のところLuaのバランスが優れているってことでしょ
858 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 12:13:32 ] 罠を避けるのが上手い。 静的型 クラス メタプログラミング 並列処理 遅延評価 参照透明性 ・・・
859 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 12:58:59 ] 文法重視で速度気にしてない人は squirrel 使ってるし普通に棲み分けになってんじゃね?
860 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 13:04:33 ] 自分がLua選んだ理由は日本語の資料が一番多かったからだな。 次点の理由はスタティックリンクできたから。
861 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 19:55:29 ] 文法が嫌いとかいうやつって、 自分の英語ができないのは分法を教えるからって口だろ
862 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 20:54:28 ] まぁ855の言うことが真ならSquirrelによってあっという間に駆逐されてるはずだな。
863 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 20:56:42 ] >>861 逆だよ。 文法ができないから英語できないんだよ。
864 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 21:00:44 ] >>863 >861が何を言ってるのか分かってるの?w
865 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 21:12:14 ] 俺スクリプトをLuaのVM用のバイトコードにコンパイルすればいいじゃん
866 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 21:19:01 ] yieldをライブラリとして提供するのは実装の幅を狭めてると思う
867 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 23:28:24 ] >>862 >>347 みる限り速度はでLua>>>>Sq
868 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 23:34:53 ] はじめて日が浅いけど L とか -1 が乱舞する C拡張に馴染む日はくるんだろうか俺・・・
869 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 23:37:30 ] >>868 俺は2日で拡張できるようになったぞ
870 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 09:34:09 ] >>347 では速度がLuaより早いにも関わらず日本ではあまり使われていないGameMonkey。 ざっと見た感じは文法も特に変な感じじゃないから、使いやすそうな感じはするんだけどね。 日 本 語 資 料 皆 無 だ け ど な
871 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 11:26:11 ] >日本語資料 月並みなことを言うと 因果関係ではなく相関関係ならあるかもしれない
872 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 11:32:07 ] Pawnも文法はシンプルに見えるが流行らないのはやっぱり何かが足りないんだろうな
873 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 14:25:57 ] 足りないというよりはLuaの情報量や実績やユーザ数を 代えられるほどのものではないということだろう
874 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 16:13:12 ] Luaってゲーム以外で使われてますか?
875 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 16:40:55 ] >>874 SciTEとか
876 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 17:04:31 ] apacheとかwiresharkの拡張に地味に使われてたりする もともとゲーム向けってわけじゃないしね
877 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 17:50:35 ] Schemeが以外と流行らなかったな
878 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 17:56:04 ] >>874 TextAdept caladbolg.net/luadoc/textadept2/manual/1_Introduction.html 半分以上 Lua で記述され、また Lua で拡張可能なテキストエディタ iconv で読み書きし内部は UTF-8 なので、日本語も使用可
879 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 21:54:30 ] >>874 tokyotyrantでLua知ったよ
880 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 14:33:21 ] dev.pocoo.org/projects/pygments/browser/pygments/lexer.py www.frykholm.se/files/markdown.lua coderay.rubychan.de/ プロジェクト管理ツール を作ろう Redmin, Retrospectiva, Trac 基本組み込み用途だよね、とツールを作る用途で 移行する気が起きない理由はこの辺にありそうだとさっき気がつきました・・・
881 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 17:47:01 ] lua5.1のDLL版を使ってるんですが、グルーコードの呼び出し規約は__cdeclでいいんでしょうか? それとも__stdcallにしたほうがいいですか?
882 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 20:55:07 ] >>881 たぶん__cdeclだけど仮に間違っていたとしても name manglingの違いで簡単に見分けられるような気がする
883 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 20:57:16 ] DLLを使う側の言語の規約に合わせるんだ Cでしか使わないのなら目的にもよるがどっちでもいいと思うがな
884 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 22:45:42 ] >>882 >>883 thxです さっきluaのヘッダ見たところ呼び出し規約は書いてなかったので多分C言語デフォルトのcdeclでよさそうですね
885 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 14:50:36 ] Programming in Lua携帯するにはしんどいな PDFで売ってくれりゃいいのに
886 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 15:59:41 ] ばらして持ち歩けよ
887 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 16:49:25 ] 組み込んで歩けよ
888 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 18:52:41 ] lua で連想配列形式のテーブルの要素数を調べる方法ある? 配列形式だったら #tbl で、出来るみたいだけど・・・。
889 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 20:14:39 ] userdata型に型情報を与えて BOOL isHoge(lua_State *, index); の形で使いたいんですが luaのほうで予め提供されてる方法はありますか? それとも、自分で独自にマップするものなんでしょうか?
890 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 20:46:48 ] >>888 pairsやnextかな
891 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 21:04:58 ] nextだとnilが設定されたフィールドでハマるので pairsを使った方がいいんじゃまいか
892 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 23:23:44 ] luabashがすばらしすぎる。 bashにluaインタプリタ機能追加してbashの拡張ができる& bashが生きている間luaインタプリタも生きているのでlua変数を 保持し続ける。これ重要。 ファイル操作が多いとやっぱりシェルスクリプトが楽だけど コマンド間の結果の連携を環境変数orファイル書き出しで 実装するのはかったるい時に大活躍な予感。
893 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 01:40:15 ] 組み込み用途以外でLua使おうなんて思わんな 汎用的に使うには標準ライブラリ貧弱だし thenとかdoとか書くの面倒だし
894 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 02:40:47 ] 低レベルな質問で申し訳ないのですが wxFormBuilderから追加したイベント宣言を定義するのはどうしたらいいのでしょうか? Generateで書き出した.hファイルにある virtual void OnButton1( wxCommandEvent& event ){ event.Skip(); } の{ event.Skip(); }をコメントアウトすることで 出来なくも無いのですが ヘッダファイルの行頭に // PLEASE DO "NOT" EDIT THIS FILE! とありますし後々修正があったときに困りそうです。 // Virtual event handlers, overide them in your derived class このコメントが鍵のような気もするのですが正直意味が分かりません・・・
895 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 03:09:57 ] 誤爆ってる、失礼しました
896 名前:デフォルトの名無しさん [2010/02/14(日) 11:30:21 ] /ヽ /ヽ ':' ゙''" `':, ミ ・ω・ ;, :; . っ ,つ Lua! `:; ,;' `( /'"`∪
897 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 16:13:25 ] 自作型で__gcでC側のリソースを開放してるんだが __gcをうっかり書き換えてしまわないように メタテーブルを隠蔽あるいは変更不可にすることはできるだろうか?
898 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:19:53 ] __gcということはユーザーデータか。ならばスクリプト側からはメタテーブル自体の変更はできない。 さらにメタテーブルに__metatableを追加しておけば隠蔽も可能になり、メタメソッドの変更、追加を防止できる。 ただしこれらはC側やdebugライブラリには効果がないし、制限する手段も(多分)無い。
899 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 21:52:18 ] C++でRAIIをうっかり忘れてしまうレベルだ 初期化以外でsetmetatable()を使うのか?
900 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 22:33:58 ] >>898 __metatableというのがあったのか というかユーザデータはもともと変えられないって知らなかったorz レスthxでした >>899 metatableをうっかり書き換えるのはクライアントで、クラスじゃない RAIIをうっかり忘れるのとmetatableをうっかり書き換えるのは別次元の問題 そのクライアントのついうっかりを封印して出来なくしてしまえれば安心して寝れる
901 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 23:37:24 ] >>900 なにが別次元だ ファイルを読んだり書いたりdllをロードしたりする、普通の言語じゃないか
902 名前:デフォルトの名無しさん [2010/02/19(金) 02:15:03 ] (◞≼◉ื≽◟◞౪◟,◞≼◉ื≽◟ )
903 名前:デフォルトの名無しさん [2010/02/19(金) 20:31:33 ] ∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
904 名前:デフォルトの名無しさん [2010/02/21(日) 15:46:38 ] (´・ω・`)
905 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 16:32:07 ] LuaInterface 使ってる?
906 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 16:55:48 ] (`・ω・´)
907 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 17:51:50 ] ルアのmodule(name)のnameが被ったらどうなるの?
908 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 20:06:58 ] name ru houkei
909 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 02:06:10 ] local foo = function () local c = 0 return function () c = c + 1 return c end end f1 = foo() f2 = foo() この場合f1とf2に渡される情報はcと関数の参照だけ? それともcを含めて関数まるごとコピーされちゃったりする?
910 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 08:44:16 ] クロージャとしては別々だけどコードはもちろん共有
911 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 08:54:10 ] UpValとProtoの参照 それとenvの参照
912 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 02:47:27 ] なんかロベルトさんがLua5.2のグローバルとか環境まわりの仕様変え始めたような。lua-l参照。
913 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 14:12:12 ] バージョンアップは無能レベルに到達するまで止まらない でも5.2はまだリリースされてないから止めようと思えば止められるけど
914 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 04:05:04 ] イエルサリムスキー教授の翻訳本にuserdataのメタテーブルはLuaからCを出しぬいて手出しすることはできないから安全、みたいなことが書いてあるんだけど ud = create_ud() getmetatable(ud).__gc = nil のようにごくごく普通にアクセスできるように思えるんですが・・・これは本の間違いじゃないですかね?
915 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 08:33:03 ] >>914 保守的GCって知ってるか 解放すべきかどうか疑わしいときは、解放しないほうが安全
916 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 11:12:19 ] >>915 今ググって知りました しかし、保守的GCの話は>>914 の話とは関係ないように思えるのですが、実は何か関係があるんでしょうか?
917 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 11:20:30 ] Squirrelに興味があるやつは見ておけ。 よく考えられてるサンプルだと思う。 ruriko.denpa.org/201002c.html#23
918 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 18:44:23 ] >>914 userdataはsetmetatableはできないがgetmetatableはできる。 よってその例のようなアクセスはできる。 禁止したいなら__metatableを適切な値に設定するといい。
919 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 19:47:36 ] 安全とは禁止することと見つけたり・・・
920 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 11:27:59 ] coroutineの利点がいまいちわかんね state:update()の戦略の方がコスト低いしわかりやすいと思うんだが
921 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 12:48:09 ] 利点がわかんないなら 君には不要って事なんだよ 無理して使う必要ない
922 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 15:01:14 ] 自分の理解している範囲の外に利点があることだって普通にあると思うけど。
923 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 15:08:48 ] 複数回に分けて動かさないといけない処理を継続的な処理として実装可能になる。 結果として同期処理の不要な軽量スレッド的な実装ができるようになる。
924 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 15:46:16 ] コルーチンは、ゲームで「アイテムを取った直後に一定時間白くなる」という処理を書くときとか便利だな。
925 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 16:04:54 ] >>921 むちゃくちゃな論理展開わろた^^ >>922 ですよね >>923 複数回に渡って処理を分割するのってstateパターンでも普通にできることだと思う コルーチンじゃないとどうしてもできない、あるいは明らかに優れてるっていう要素が自分には見えないんすよね
926 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 16:07:46 ] Stateパターンが「普通」? Stateパターンのような回りくどいことをしないといけないのがおかしいとは思わない?
927 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 16:23:51 ] >>925 どうしてもできないから、で使ってる人はいないよ。 機能的にすぐれてる部分は全く無い。ぶっちゃけコルーチンも、 全状態保持を言語側が担ってくれてるだけのおおがかりな state だから。 State パターンで何個もあったり、さらには個数が変動したりするオブジェクトの複雑な 挙動のからみあいとか、考えたくもないけど、コルーチンだとわりとすっきり書ける。 最初に仕様にあわせて組んでいくだけなら State でもいいんだけど、 後から見直す時とか、細かい修正に対応する時とか、コルーチンのが圧倒的に読みやすいし記述も楽。 遷移図をそのまま if や while やら使って書き起こすだけだけになるからね コルーチン切り替えのコストは、固定で組まれた State 切り替えよりかなり大きくなってしまうけど、 表記の楽さがそれを上回る、と判断した人が使うもの。あらゆる状態遷移を頭の中だけでさくさくくめてしまえるので、 State のが簡単だよって言う人は知り合いにもいるけど、それ、凡人には無理ですからー
928 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 16:36:19 ] そもそもオブジェクト指向におけるデザインパターンというのは、 言語側でサポートしきれていないニーズを無理やり克服するためのバッドノウハウのようなものだ。
929 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 18:44:20 ] >>925 例えばFizzBuzzの通常版が既に完成していて function fizzbuzz(n, print) for i = 1, n do ... print("FizzBuzz") ... end 後になってState版が必要になったときに使う。 co = coroutine.create(function() fizzbuzz(100, coroutine.yield) end)
930 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 22:20:25 ] コルーチンの便利さは、記述が簡単になるって点だな。
931 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 22:34:16 ] coroutine.create(function (a, b) showMessageDialog(a, b, "Hello! World!") showMessageDialog(a, b "byebye")end) とか lua-users.org/lists/lua-l/2009-11/msg00214.html >Run Lua in a separate thread and somehow stop it if it takes too long. とか おつかい行って来てよ、と丸投げしまう簡便さ でもちゃんと帰ってこれるのかな・・・的不安
932 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 08:18:34 ] >>930 コルーチンは記述が簡単なだけに非同期対応が面倒に感じるんだよな >>924 みたいな単純な処理ですら、アイテムを連続で取るとキャラが白くならなかったり、 直後にゲームクリアしてもキャラが白いままだったり、直後にキャラが変身するとハングしたりとか Stateパターンならちゃんと回避できる人がコルーチンだと回避し忘れるのはありがちなこと
933 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 14:56:36 ] (何言ってんだコイツという眼差し)
934 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 23:06:08 ] >>932 他の人はコードで例を示しているんだから、君もコルーチンよりStateパターンが明らからに優れているという例をコードで示したら? そうでないと、ただの知ったか君と区別つかないよ
935 名前:デフォルトの名無しさん [2010/03/08(月) 23:32:20 ] >920の「state:update()の戦略」が良く判らん……トランザクションのこと?
936 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 00:01:37 ] Stateパターンを理解してりゃ、そこは判らない文脈じゃないと思うけど。
937 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 00:07:39 ] switch(state) { case WALK: … case WAIT: … case ATTACK: … } をちょっと格好付けただけ コルーチンと比較されるような使い方の場合は特にメリットもない
938 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 00:47:56 ] >>936 ハイハイ、逃げないでコードで示してね それともやっぱり、知ったか君だったのw
939 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 01:02:11 ] そもそもコルーチンと組み込み系言語って何か関係あるの?
940 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 01:15:03 ] このスレで話題になることが多い lua と squirrel が搭載している、以上のものではないかな 他何が搭載してたっけ
941 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 01:20:31 ] よくわかんないけど状態遷移するたびにStateインスタンスを破棄、生成してれば 切り替わるタイミングが明確になって後片付けとかが確実になるとかそういうことなんじゃないの
942 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 02:34:51 ] ちなみに型が厳密な言語でコルーチンを扱うと複雑になるか、制約が大きくなる どのみちオブジェクト指向が好きならJavaとかC#とかで正解なんだよ
943 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 02:43:45 ] 小規模だとコルーチンのがキモチイイけど、遷移が複雑になってくると機械的に遷移図からコードに直せるステートのほうがいいかなって感じる
944 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 03:03:14 ] 画面遷移処理とか、ADV的な演出の逐次制御とかはコルーチンがいいかんじにはまるね
945 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 09:40:22 ] コルーチン=呼び出すと区切りの部分まで実行してくれる関数オブジェクト みたいな感じで理解してるな。 Luaの場合、coroutine.resumeで呼び出すと、次のcoroutine.yieldの部分まで実行してくれる。
946 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 12:51:46 ] 10回繰り返し、という処理を、途中でイベントを受け取ったりしながらでも、 for (i = 0; i < 10; ++i) ですらっと書けるのがコルーチン。
947 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 15:59:05 ] cでcoroutineを自作しようと思ったら難しかったでござる。
948 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:26:47 ] 奇怪で制約の多いマクロを組むか sjljでコンテキストを書き換えるかの二択だな
949 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 17:11:31 ] その話題までいくともう組み込み言語まったく関係ないな。
950 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 20:01:13 ] マルチスレッドで済む処理まで凝るーチン
951 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 13:54:54 ] ルアってなんであんなテーブルマンセーなの?
952 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 14:17:35 ] シンプルだからじゃない? このテーブルひとつで普通の配列も連想配列も オブジェクトまでも扱えるから... でも無理やりオブジェクト指向マネるくらいなら ほかのスクリプト言語を検討するよ
953 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 15:10:04 ] Luaは初心者向けに見えて 実は玄人向け
954 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 17:48:04 ] 違うな M向け マニアとマゾ
955 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 18:37:58 ] AngelScript|Д`)<呼ばれたので飛んできました GameMonkey|Д`)<俺もー CRIScript|Д`)<俺もー
956 名前:デフォルトの名無しさん [2010/03/10(水) 18:51:20 ] \ l´⌒\⌒\ \\ \ \ ヽ ) ) \\ \\ ( \ \∩___∩ \\ \ \ ⌒⌒| ノ ヽ \\ \ \ / ● ● ト、\ \\\ \ Y | ( _●_) ミ\ \\\ \ / 彡、_ |∪| ノ \ \\\ (____)―ヽノ' ヽ  ̄ ̄ ヽ\\ \, j l l .l } Lua! l (_ノノノノ
957 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 18:29:44 ] 過疎
958 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 18:55:01 ] コルーチンのAAください
959 名前:デフォルトの名無しさん [2010/03/14(日) 19:23:00 ] ●)(●):::\ .\ :::::::::::::::::::::::::::::::::::::::::::::::: (__人__)./ ̄ ̄ ̄\:::::::::::::::::::::: / ̄ ̄ ̄\ コルーチン ::` ⌒´./ ⌒ ⌒ ヽ::::::::::::::: / ⌒ ⌒ ヽ ::::: ./ (●)(●) |:::::::::::: / ( ●)(●) | \ | (__ / ̄ ̄ ̄\ | (__人__) } コルーチン \/、. / ⌒ ⌒ ヽ/、.. ` ⌒´ .ヽ \ / (●)(●) | | \ \ | (__ / ̄ ̄ ̄\. | / |\ \/、. / ⌒ ⌒ ヽ──┐ |丿 コルーチン | .\ \ / (●)(●) |──┤ | | |\ \ | (__人__) }──┤ | | | \ \/、. ` ⌒´ ヽ\
960 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 20:37:44 ] /ヽ /ヽ ':' ゙''" `':, ミ ・ω・ ;, :; . っ ,つLua `:; ,;' `( /'"`∪
961 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 20:50:30 ] lldebugみたいな感じのデバッガって、他のスクリプト言語にあるんだろうか? JavaやPythonとかだと余裕でありそうだけど、SquirrelとかAngelScriptとかにはなさそうだ…