【Lua】組み込み系言語総合 その2【Squirrel】
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2009/05/25(月) 09:11:41使われるプログラミング言語についてのスレッドです
まとめwiki(なにか質問する前に必ずみること!)
http://wikiwiki.jp/lua/
その他の参考URLは>2から
■前スレ
【Lua】組み込み系言語総合【Squirrel】
http://pc12.2ch.net/test/read.cgi/tech/1205208141/
■過去スレ
その3 http://pc11.2ch.net/test/read.cgi/tech/1160799232/
その2 http://pc8.2ch.net/test/read.cgi/tech/1063711237/
その1 http://pc5.2ch.net/tech/kako/1034/10341/1034182349.html
0002デフォルトの名無しさん
2009/05/25(月) 09:15:36Io Language
http://pc11.2ch.net/test/read.cgi/tech/1201100624/
2 part forth
http://pc11.2ch.net/test/read.cgi/tech/1073673931/
●●●●TCL/TKなら俺に聞け 2●●●●
http://pc11.2ch.net/test/read.cgi/tech/1177998764/
ECMAScript デス 3
http://pc11.2ch.net/test/read.cgi/tech/1190160481/
各種ライブラリ紹介スレ2(ゲ制作)
http://pc11.2ch.net/test/read.cgi/gamedev/1177886529/
【Perl,PHP】LLバトルロワイヤル5【Ruby,Python】
http://pc12.2ch.net/test/read.cgi/tech/1238720336/
「コンパイラ・スクリプトエンジン」相談室13
http://pc12.2ch.net/test/read.cgi/tech/1233143342/
Garbage Collection (GC)について語るスレ
http://pc11.2ch.net/test/read.cgi/tech/1141646850/
0003デフォルトの名無しさん
2009/05/25(月) 09:17:28■Lua
ttp://www.lua.org/ (本家)
ttp://lua-users.org/ (lua-users)
ttp://luaforge.net/ (LuaForge)
ttp://sugarpot.sakura.ne.jp/yuno/html/lua51_manual_ja.html(5.1マニュアル和訳)
Lua言語の紹介
ttp://staff.aist.go.jp/yutaka.ueno/lua/docsjp.html
入門Luaプログラミング
ttp://www.amazon.co.jp/dp/4797342722/
■Squirrel
ttp://www.squirrel-lang.org/ (本家)
ttp://sourceforge.net/projects/squirrel/
ttp://sourceforge.net/projects/sqplus/ (SqPlus)
ttp://sourceforge.net/projects/squirrelsh/ (Squirrel Shell)
ttp://wikiwiki.jp/lua/?Squirrel_Lang%2Ftoc(wiki内2.1マニュアル和訳)
■Xtal(ゲーム向け。スタックを意識しなくていい?)
ttp://d.hatena.ne.jp/xtalco/
ttp://code.google.com/p/xtal-language/
ttp://blog.livedoor.jp/dankogai/archives/50836939.html
0004デフォルトの名無しさん
2009/05/25(月) 09:18:5410 名前:デフォルトの名無しさん[sage] 投稿日:2008/03/11(火) 21:17:18
RubyもPythonも組込めるけどなあ。
Perlはさすがにやったことないが、できないこともないだろう。
11 名前:デフォルトの名無しさん[sage] 投稿日:2008/03/11(火) 22:39:02
RubyにしてもPythonにしても標準ライブラリや言語機能がでかすぎにみえる。
組込みに向いてるってのはコードサイズまたは外部への依存の少なさと
言語機能のバランスが取れてるって意味にではないのかと。
12 名前:デフォルトの名無しさん[sage] 投稿日:2008/03/12(水) 01:23:20
没になったテンプレ案には書いてあったけど、
そういう比較的大きな言語の組みこみの話も
多少は許容することが前スレで同意されていたはず。
でも一応Luaスレの続きだからその辺は空気読んでねと。
■没テンプレ
The Pawn language(だれも使ってなさそうな、組み込み言語)
ttp://www.compuphase.com/pawn/pawn.htm
NullLogic Embedded Scripting Language
ttp://sourceforge.net/projects/nesla/
※テンプレ以上※
0005デフォルトの名無しさん
2009/05/25(月) 09:49:570006デフォルトの名無しさん
2009/05/25(月) 13:22:420007デフォルトの名無しさん
2009/05/25(月) 13:27:34ttp://www.angelcode.com/angelscript/
まとめwikiにテンプレのページ作ったほうがいいかな。
0008デフォルトの名無しさん
2009/05/25(月) 22:43:44かならずlua_settop(L, 0)したほうがいいんですか?
lua処理の前後でちゃんとスタック深さが一致するようにプログラムを心がけていれば
不要なものなのでしょうか。
何かする前に必ずlua_settop(L, 0)するクセを付けておいたほうがいいのか、
それともそれはCでグローバル変数を必ず=NULLや=0で初期化しないときがすまないような、
ちょっとできなそうな人がやることなのでしょうか。プロフェッショナルはlua_settop(0)
なんていちいちやりませんか?
0009デフォルトの名無しさん
2009/05/25(月) 23:22:12「かならず」などと言う杓子定規なスタイルで
プロフェッショナルになれるとは思えない。常識的に考えて。
0010デフォルトの名無しさん
2009/05/25(月) 23:56:400011デフォルトの名無しさん
2009/05/26(火) 01:49:160012デフォルトの名無しさん
2009/05/26(火) 07:32:04このスレは既に鯖移転してる物が含まれてるぞ。
プログラム板はpc12鯖だぞ。
0013デフォルトの名無しさん
2009/05/26(火) 09:04:08場合によって異なる。バインダの一部として実装するときは
settopによる副作用(必要だった値がスタックから蒸発するなど)の方が心配なので、
それ無しでも正しく動作するよう慎重に実装するべき。
一方、本体側からスクリプト側のコードを呼び出す際は大抵は戻り値は不要なので
削除しても差し支えない。だからsettopを呼び出す方法もアリ。
もちろん、エラーや例外がスタックに入っている場合もあるのでその対応は必要。
同じ仮想スタック型言語であるSquirrelでもまったく同じことが言えるだろう。
0014デフォルトの名無しさん
2009/05/26(火) 09:10:19公式サイトへのリンクだけでもいいから作ってあげてください( ´・ω・`)
0015デフォルトの名無しさん
2009/05/26(火) 12:22:10この戻り値をlua_tostring() でとったときに0xff8888ffの10進数表記である
"4287138047"が得られることを期待していたのですが、
なぜか1インクリメントされた"4287138048"が入ってきてしまいます。
しかもコンパイル→実行しなおすとちゃんと "4287138047" が入ってたり、
あれ?と思ってもう一度やると "4287138048" だったりで、よくわかりません。
この現象についてなにか心当たりありますか?
0016デフォルトの名無しさん
2009/05/26(火) 21:07:590017デフォルトの名無しさん
2009/05/28(木) 15:31:550018デフォルトの名無しさん
2009/05/28(木) 15:54:050019デフォルトの名無しさん
2009/05/29(金) 00:19:33これって使ってみた人いる?
http://wikiwiki.jp/lldebug/
0020デフォルトの名無しさん
2009/06/03(水) 22:12:04もしかしてSquirrelって基本的にVM一個だけ作るのが普通なの?
0021デフォルトの名無しさん
2009/06/03(水) 22:25:58そんなこたー無い。sqplus が設計古いだけ
でも、実際問題として、VM複数扱うと、初期化処理とかめんどくさくね?
実行処理を複数保留するだけならスレッドつかえばいいわけで。
0022デフォルトの名無しさん
2009/06/03(水) 22:28:48オレも以前そう思ってざっとソースを見たが、
VMが複数インスタンス動いたときに
static変数で干渉しそうなところは
エラーメッセージ関係くらいだった。
グローバル変数は探しにくいので確証は無い。
実際のところ、Tclなんかと違って複数VM間の通信手段が限られてるから
あまり使い勝手はよくないと思うよ。
0023デフォルトの名無しさん
2009/06/04(木) 02:00:12(1)敵1匹ずつにVMを持たせて個別に処理をさせる
(2)使う関数が異なる、背景のみの処理をするVMと、敵の出現パターンを管理するVMとを同時に動かす
のどっち?
0024デフォルトの名無しさん
2009/06/04(木) 05:22:10独立した複数VMを動かすのはちょっと用途が思いつかないなぁ
是非>>20のSquirrelの用途が知りたいなぁ。ゲーム以外なの?
0025デフォルトの名無しさん
2009/06/04(木) 08:10:20同じプログラムの中に、ゲーム用と3Dモデル変換などのツール用の2系統あって、
混在して使うことがないので分けたいなと思いました。
0026デフォルトの名無しさん
2009/06/04(木) 11:15:30C++ 側で HSQOBJECT でデータ保持するオブジェクトとかを組む場合にちょっとややこしいことになるね>複数VM
たしか sqplus はそのあたりの処理がすごく変なことになってた気がする。本当にまともに動くかどうか怪しい。
scrat はきっちり書いてあると思う。
それにもからんで、C++インスタンスからベースVMにアクセスしたくなる局面がたまにでてくるんだけど、
複数VM×複数スレッド使ってるとそこで困る。コンストラクタ含むメンバ呼び出しで引数に渡ってくるVMは、
あくまでスレッドのVMで、ベースVMじゃない。単独VMなら必殺技グローバル変数が使えるけど
複数VMだとそれでは特定できない。
この問題は sq_getforeignptr/sq_setforeignptr を使えばたぶん解決する。
sq_newthread で生成されたスレッドVMに、ベースVM の値をこれをつかって隠しパラメータと
して持たせるようにして、インスタンスからはこれで取り出して使うようにすればいい。
squirrel 側を拡張して、VMの親子関係を取得できるAPIを増設かなと一瞬思ったけど、
squirrel の構造的には、新規生成したスレッドVMと元のVMは完全に同格 (親子じゃなくて友達)
なので、この get/setforeignptr で正解だと思う。
0027デフォルトの名無しさん
2009/06/05(金) 02:32:54SqPlusは変というか、VM本体に対して余計なことをしている。
new()で作り捨てたクラスにVMのハンドルを管理させるようなことをしてるから、
main()関数を抜けた後でしかSquirrelの開放処理が行われなくなる。
こんな動作だと、フレームワーク解放前にリリースしないといけないC++側のオブジェクトの開放ができなくなる。
既に指摘はしてるんだが、開発者はその重要性がわかってないようだ。
一応複数のVMの対応はされてるように見えるが、実際に動かしてみないとなんとも。
scratはきっちり書いてあるんでなく、なにもやってないだけ。
こっちは試しに動かしてみたが、まだまだ完成度が足りない。
指摘したら開発者黙り込んじゃった。
SQBindのほうがややましかな。ちょこちょこといじれば何とか使えるレベル。
0028デフォルトの名無しさん
2009/06/05(金) 03:18:560029デフォルトの名無しさん
2009/06/05(金) 03:20:240030デフォルトの名無しさん
2009/06/05(金) 03:42:02ああ、なにもやってないの重要というか、オブジェクト保持用のクラスは明示的に
VM 指定の口をもってて取り回しするように書かれてるから、これなら完全に
ユーザの管理下におけるね、と思ったんだ。
SQPlus のほうはいきなり中の見えないとこで VM 管理してるグローバルな変数を
呼び出したりしてるから、いろいろ切り替えたりいじったりしてるうちに間違いなく
破綻すると思う。切り替え処理がグローバル変数に代入とか怖すぎる。
まあ、実はぱっと全体眺めただけで全然使ってみてはないんだけどね > sqrat
とりあえずあのメンバ変数の処理機構はいろいろ難ありだなーと思う。
あとインスタンス返す処理あたりもなんか微妙
sqbind はぱっとみ泥くさかったのであんままじめに見てない
0031デフォルトの名無しさん
2009/06/05(金) 03:56:50そう。VMのハンドルはユーザーの管理下におき、ユーザーの望むタイミングで
開放処理( sq_close() )が行えるようになってないと正しく終了できないじゃないか。
Sqratはなかなか筋がいいが、まだ作者がSquirrelの仕組みをよく理解できてないみたい。
メンバ変数の登録・呼び出しだけど、あれが普通だと思うよ。
この辺はSqratもSqBindもSqPlusも大差ないはず。(_get/_set乗っ取り)
SqBindはスレの進行である程度バグが直ってるのでまあ使えないことも無い。
しかし事実上SqBindクラスしか使えない構造になっていて、
意外にバインダ自体のカスタマイズの自由度が低い。
私自身はjkBindを買っていて、あのboost式の書き方はなかなかいけてると思うんだが、
(特にバインドするC++クラスのコンストラクタの登録の仕方が出色の出来)
ドキュメント・ユーザーが皆無なのでいまさら使ってくれる人がいるかどうか。
以前、数日かけてSquirrel-2.2.2-stableまでに追加された仕様にあわせた
追加実装をして、フォーラムに貼り付けたんだが。
0032デフォルトの名無しさん
2009/06/05(金) 04:48:08sqplus は、メンバ変数を登録しようとするまで _get/_set のっとったりしないのでその点は許容範囲w
sqrat はたしか問答無用でもってかれるよね。
個人的には、スクリプト側での継承性を重視してて、メンバは 必ず getter/setter の形の
メソッドとして squirrel 側に登録する形にしてるんだ。
C++ 側で getter/setter がなくて public なメンバーになってる場合でも、
その場でテンプレートで struct 内に static な参照用関数つくってそれを登録してしまう形にする。
だから、そのあたりのバインダの今の機構はまるごといらない。
ちなみに_get/_set 自体は、メンバが存在してなかったら、その名前に合致した
getter/setter を探してそれを呼び出すって形の機能を組んで使ってる。
jkBind はどんなだったかよく覚えてないや^^; 当時はまだテンプレートよくわかってなかったし、
なんかややこしいなと思って放置したような……
今、自分がメインでさわってる範囲だと、C++ のクラスのほうの形を固定化してる
ので、わりと手作業部分が多い形の簡単なバインダ書いてつかってるんだけど、
よそからもってきたライブラリの接続用に、もっと汎用的になってるのがほしくて、
一応 sqplus 使ってたんだけど、ちょっとなぁってことでもろもろ乗り換え検討中。
sqrat がとりあえずの筋はよさそうなので改造して使おうかなぁ。
0033デフォルトの名無しさん
2009/06/05(金) 07:12:40オレの場合、setter/getterは原則用意しない。
メンバ変数のみのstruct的なもの、メソッドのみのclass的なものに大抵は分かれる。
その説明だとC++メソッドをどう登録するかの説明が無いみたいなんだけど……?
それから、SqBindの場合、_get/_setはバインドしたメンバが無い場合は
キャンセルされてSquirrel側に制御が戻る。
だからバインドした後でSquirrel側から登録したものを呼び出したり(これは確認)、
継承したりも有効(これはたぶん)
オレはバインドされたC++側のインターフェイスの固定さ加減を自分で信用してないので、
バインドしたSquirrelクラスをさらに継承したりはしないようにしている。
そうするときは包含にするね。
そういや、Squirrelはプロパティがほしいかも。
0034デフォルトの名無しさん
2009/06/05(金) 10:34:090035デフォルトの名無しさん
2009/06/05(金) 11:50:44自動生成したコードを手動でデバッグするんだからな
0036デフォルトの名無しさん
2009/06/05(金) 12:15:10ボトルネックじゃない所を自動化しちゃってる可能性もあるわけだ。
0037デフォルトの名無しさん
2009/06/05(金) 12:56:24普通だよ〜 > C++ メソッド
関数ポインタとか必要な情報をクロージャにバインドさせておいてそれをつかって
呼び出す。sqplus とかとでやってるのと同じ。
後から登録したのが有効なのは順番が逆だよ。_get/_set がスルーしてるんじゃなくて、
squirrel 的に見つからなかったときに初めて _get/_set が呼ばれてる。
_set/_get でスルーした後は、squirrel 側ではメンバ見つからなかったよ例外になるだけ。
squirrel のメンバは常時上書き処理でつぶされるので、メンバの継承はできない。
C++ 側の継承概念を一貫性をもってひきこむにはメソッド化するしかない。
_get/_set で C++のメンバ参照を実現してる場合、そのメタメソッドを直接呼び出せば
元のC++のメンバは見れるけどそれは継承じゃないだろうと。
あと、メタメソッドは機構上、必ずインスタンスに張り付いてるそれが呼び出されるようで、
メタメソッドを上書きしてから親クラスのそれをよびだそうとしても自分のそれが
呼び出されて無限ループになるって罠もあったり <はまった
バインドされた C++ クラスの扱いは、まあ、好みの問題ってことで。
おいらは、squirrel だけで書いたクラスと同感覚で使いたい人
>そういや、Squirrelはプロパティがほしいかも。
↓これがプロパティもどき
>ちなみに_get/_set 自体は、メンバが存在してなかったら、その名前に合致した
>getter/setter を探してそれを呼び出すって形の機能を組んで使ってる
setter / getter 両方あれば読み書き可能プロパティ、getter だけなら
読み込み専用プロパティ、setter だけなら書き込み専用プロパティ、でまあ、ちゃんと
それっぽくできてる。その機構用に使ってるからバインダは勝手につかわんでくれってのもある
0038デフォルトの名無しさん
2009/06/05(金) 13:14:130039デフォルトの名無しさん
2009/06/05(金) 13:47:55あれ? すると、ちょっと解せない動作があるな。
C++側で定義したPointクラスをSquirrelにバインドしているんだが
このインスタンスに対する加算を
function Point::_add(point)
の形でSquirrelスクリプトの中で追加登録している。
この状態でインスタンスに対して加算を行われると、いったんSqBindのgetterを呼び出して失敗してから
_addが呼ばれているように見えるんだな。
メタメソッドは元から通常のメンバ・メソッドとは違う扱いになっているからそれでかなぁ。
# 例えばインスタンスに対してforeachをかけても登録したメタメソッドを検出できない。
0040デフォルトの名無しさん
2009/06/05(金) 15:34:28あー、なんかわかった。俺の理解はおかしかった
>あと、メタメソッドは機構上、必ずインスタンスに張り付いてるそれが呼び出されるようで、
>メタメソッドを上書きしてから親クラスのそれをよびだそうとしても自分のそれが
>呼び出されて無限ループになるって罠もあったり <はまった
これ間違い
メタメソッドは登録時に特殊処理されてて、クラスオブジェクト内の専用のテーブルに格納されてて、
メソッドとしてそもそも生えてない模様。 (class オブジェクトの _metamethods につっこまれてる)
クラスオブジェクトにメソッドが生えてないから、当然インスタンス側にもコピーされてきてない。
インスタンスでのメタメソッド呼び出し処理は、VM内から直接クラスオブジェクト内の _metamethods を見に行ってる
こんなかんじで呼び出そうとしてたんだけど(ちょっとうろおぼえコード)
function _get(name) {
if (自前処理) {
return XXX;
} else { // みつからないので親に投げる
return Parent::_get(name);
}
}
1. Parent::_get はそもそも存在してない(メタメソッドなのでクラスにも生えてない)
2. Parent::hoge のようなクラスメソッド呼び出しは、VM側がコンテキストをすり替えて this コンテキストで呼び出し開始されてる
3. 存在してないから今のコンテキストの _get が "_get" を探すために呼び出し開始される
4. 無限ループ
こんなオチではないかと
そちらのほうだと、Point::_add() をよびだそうとした時点で同じことがおこってるんじゃないかな。たぶん。
その先がちょっとわからんのだけど、もしかしたら SqBind がさらにテーブルから検索して呼び出すとか
そういう処理が入ってたりするのかな?
どちらにしても大変気持ち悪いことになってるってことになるんじゃないかと…
0041デフォルトの名無しさん
2009/06/05(金) 15:57:59スクリプト言語的にはメタメソッドも通常のメンバのように見えているべきなんだけど、
おそらく動作効率上の問題でそうなっているんだろうね。
メタメソッドの存在チェックはAPIが存在しないかもしれない。
Sqratがちょうどそんな実装で、バインドしたメンバの一覧に_getで呼び出されたメンバ名が存在しない場合、
エラーを返さずに何もしないものだから、
Squirrelインタプリタは返ってきたnullに対してメタメソッドの呼び出しをかけようとして失敗してる、んだったかな。
とにかくバインダ側で登録する_getは、管轄外メタメソッド呼び出しに対してはfalseまたは例外を返してあげないといけない。
Squirrelインタプリタの実装側ももうちょっとやりようがありそうな気がするけどね。
0042デフォルトの名無しさん
2009/06/10(水) 14:06:39http://code.google.com/p/android-scripting/
0043デフォルトの名無しさん
2009/06/11(木) 00:03:370044デフォルトの名無しさん
2009/06/11(木) 00:14:17元から使えて当たり前だもんなぁ。
0045デフォルトの名無しさん
2009/06/11(木) 04:03:51Cから参照されていて、どれがローカルだけで使用されているのかわからなくなる場合があるよね。
命名規則とか、やってる?
一応、Cから呼ばれる関数と変数名は全て __ で始まるようにしてる。
でも大文字で始まっているのが全てCから参照される識別子 って規則の方がほうが
わかりやすいのかな。どうだろう。 __ で始まるのは、間違いが無い気がする。
大文字で始める識別子って、けっこううっかりつけそうな気がする
0046デフォルトの名無しさん
2009/06/11(木) 08:39:16local宣言しないとローカルにならないし
requireもあるから問題無いよ
0047デフォルトの名無しさん
2009/06/11(木) 13:06:52それでは45に対する答えになってないだろ。
答えは、「区別する必要はない」だな。
後始末が必要ならファイナライザでも書いてあげれば済むことだ。
0048デフォルトの名無しさん
2009/06/11(木) 23:07:53C言語レベルのプリプロセッサのライブラリってあるの?
軽量スクリプト言語の、さらに前処理用。
自作しろといわれりゃ相応の時間をかければ作れそうだけど、
こういう泥臭いのは必要な人は自分で作るのかなあ。
0049デフォルトの名無しさん
2009/06/11(木) 23:18:36CPP32ってC/C++プリプロセッサがVectorにあるよ。
あとboost::waveとか。
0050デフォルトの名無しさん
2009/06/11(木) 23:22:52このへん? ライセンスは boost
005148
2009/06/11(木) 23:33:120052デフォルトの名無しさん
2009/06/12(金) 03:19:25有用さは認めるし、実際プリプロセッサを活用したゲームの処理系は見たことあるわけだが、
結局ソースコードが爆発してコンパイラ・インタプリタ側に負担がかかるのが落ちなので、
オレはあまり賛成はしかねる。
C++とC#のビルド速度の差を思うとな。
0053デフォルトの名無しさん
2009/06/12(金) 10:40:09ただ、Luaでそれやるとコンパイルエラー出まくりだったと思う。
AngelScriptは問題なし、Squirrelもたぶん問題ないと思う。
ただ、外部スクリプトであったらいいなと思うプリプロセッサの機能は#includeだけのような気がする。
0054デフォルトの名無しさん
2009/06/12(金) 19:42:57ってどうすればいいの?
Luaファイルをロードしてライブラリとして登録みたいな関数がある?
0055デフォルトの名無しさん
2009/06/13(土) 01:09:49>>54
requireかdofileじゃだめ?
0056デフォルトの名無しさん
2009/06/15(月) 19:46:26同名関数が別ファイルにあったばあいどうするんですか?
0057デフォルトの名無しさん
2009/06/15(月) 21:48:03軽量スクリプト言語なんだし
0058デフォルトの名無しさん
2009/06/15(月) 22:05:45グローバル変数を参照または代入する際に呼ばれるメタメソッドを設定できるよ
0059デフォルトの名無しさん
2009/06/16(火) 19:09:48同名関数が有った場合の挙動の設定ができる、
という意味でしょうか。
同名関数のあるLuaファイル2つを
C++側で開いた時、どうしても呼び分けられない・・・・
0060デフォルトの名無しさん
2009/06/16(火) 20:21:26というか、LuaもSquirrelも関数はファーストクラスオブジェクトなんだから、
2回定義したら最初のやつは消えちゃうでしょ?
オーバーロードとかはそのままではできんわなー
0061デフォルトの名無しさん
2009/06/16(火) 20:28:08テーブルで名前空間っぽいものが実現できる。
-- A.lua
A = {}
function A.hoge()
...
end
みたいに書いてCからは
lua_getglobal(L, "A");
lua_getfield(L, "hoge");
lua_call(L, 0, 0);
で呼び出せる。
0062デフォルトの名無しさん
2009/06/16(火) 23:17:00ありがとうございます!
成功しました!
0063デフォルトの名無しさん
2009/06/24(水) 09:22:21lua_pcallしたあと、
luaL_loadbufferのバッファって捨てられないんかな?
loadbufferしてpcallすると
実際のバイナリサイズの二倍くらいメモリを食っているようなんで
pcall後のloadbufferのチャンクは
感覚的にはいらないように感じるんだけど……。
0064デフォルトの名無しさん
2009/06/25(木) 00:55:31v = 1
fh = io.open("samplefile", "wb")
if fh ~= nil then
fh:write(v)
fh:close()
end
を実行すると、samplefileの中身は0x01では無く0x31です。
バイナリモードの書き込みはどうすればいいのかご存知の方教えて下さい。
0065デフォルトの名無しさん
2009/06/25(木) 11:58:28v = "\1"
0066デフォルトの名無しさん
2009/06/25(木) 12:01:56C#のクラスをPython側で使うときの便利さが神すぎるな。
なんせ、バインダ用のコードなんて一行も書く必要なく、
Python側で通常のモジュールのようにimportするだけで普通に作ったり殺したりできるんだから。
(当然ながら触れるのはC#側でpublicに指定している部分のみ)
いやはや。.NET Frameworkはすばらしい。
反面、Python側のコードをC#側から呼び出すのはちょっとしたおまじないが必要だが、
これはまあ型のある言語から型の無い言語の機能を呼び出すのに手間がかかるのはしょうがないかなぁ。
0067デフォルトの名無しさん
2009/06/25(木) 12:13:04liolib.cをみたら、g_write()の中で
if (lua_type(L, arg) == LUA_TNUMBER) {
/* optimization: could be done exactly as for strings */
status = status &&
fprintf(f, LUA_NUMBER_FMT, lua_tonumber(L, arg)) > 0;
}
な事してるので文字にしちゃうんですね。バイナリで書き出すのはやめときます。
0068デフォルトの名無しさん
2009/06/25(木) 12:15:48ありがとうございます。なるほど、たしかにそれだと0x01が書き出されました。
0069デフォルトの名無しさん
2009/06/25(木) 12:18:33ファイルIOくらい、簡単に自作してしまえばどう?
Squirrelの標準ライブラリはバイナリファイルしかろくに読めない代物なので、
通常の読み書きは自作のクラスを使ってるよ。
C/C++で書いてバインドしてしまえばいい。
0070デフォルトの名無しさん
2009/06/25(木) 13:18:5664です。
そうですね、頑張ってみる事にします。
まだlua始めて間もないので、もう少し慣れてからですかね。
アドバイスありがとうございます。
0071デフォルトの名無しさん
2009/06/26(金) 06:38:29.netのいいところは、同じ.netの言語の相互運用が従来の組み込み言語より格段に楽なところだよなー。
俺が何をいいたいかというと、IronRuby頑張ってくれっていう
0072デフォルトの名無しさん
2009/06/26(金) 09:28:58速度的にはどんなもん?
0073デフォルトの名無しさん
2009/06/26(金) 14:25:35すごすぎるwww
まあ逆コンパイルして眺めてみたら明らかにC#より無駄なコードが多いから
何でもかんでもこれというわけにはいかないけどね。
0074デフォルトの名無しさん
2009/06/26(金) 15:59:41あの人、元々は.NETを否定する論文書くために実装してたのにw
0075デフォルトの名無しさん
2009/06/26(金) 16:06:030076デフォルトの名無しさん
2009/06/28(日) 18:20:03色々増えるんだけどねぇ>IronPython
まあSquirrelのパフォーマンスを考えると、
その分処理能力が落ちちゃうのかと思わないでもないが。
0077デフォルトの名無しさん
2009/07/01(水) 07:23:03Squirrel 2.2.3 stable
June 30, 2009
-added sq_getfunctioninfo
-added compile time flag SQUSEDOUBLE to use double precision floats
-added global slot _floatsize_ int the base lib to recognize single precision and double precision builds
-sq_wakeupvm can now resume the vm with an exception
-added sqstd_format
-generators can now be instantiated by calling sq_call() or closure.call()
-fixed a bug in sqstd_printcallstack(thx takayuki_h)
-fixed modulo by zero(thx jup)
-fixed negative enums and constants
-fixed generator crash bug if invoked as tail call (thx Mr.Accident)
-fixed some minor bug
0078デフォルトの名無しさん
2009/07/01(水) 10:46:11開発続いてるのがありがたい
0079デフォルトの名無しさん
2009/07/01(水) 12:02:12要望出しても無視されてそのまま終わっちゃうことが多いんだよな。(フォーラムにて)
直接メールを出したほうがいいのかなぁ。
0080デフォルトの名無しさん
2009/07/01(水) 13:29:070081デフォルトの名無しさん
2009/07/01(水) 19:46:32pythonとsquirrelも2.xの開発がいつまで続くか気になるなあ
0082デフォルトの名無しさん
2009/07/01(水) 22:39:03C#の開発者がいなくなるとかそういう話ではない。
0083デフォルトの名無しさん
2009/07/03(金) 02:58:05そもそも組み込みでjsてエディタのマクロ言語とかしか見たことなかった・・・。
0084デフォルトの名無しさん
2009/07/07(火) 21:29:11int f(int a, int b=1) {return a+b;}
のように引数のデフォルト値持ってた時はどうしてますか。理想を言うなら
RootTable(vm).Func<int (*)(int, Optional<int,1>)>(_SC("f"),&f);
のような感じに綺麗に書けるといいんだけど自分の実力じゃうまく実装できないw
ちなみにフォーラムにある5/31付けのsqratの修正版使ってみたら、
エラーメッセージが_SC()で括ってないのでコンパイルエラーになりました。
うぷ主はJITの人みたいけど、あれは使わないで様子見の方がいいのかな。
0085デフォルトの名無しさん
2009/07/07(火) 22:33:38いやー、sqratの作者さんはJITの人とは別人ですよ。レスは書きましたがー。
一旦2引数の関数として登録して様子を見る、かな。
Squirrelのデフォルト引数はインタプリタが自前でやってるので
バインダ側で自動的に取得って言うのは無理っぽいんじゃないかなぁ。
理屈上はデフォルト引数をテンプレート型の
オブジェクトとして渡してあげればいけそうですが。
ともあれC/C++は関数型言語ではないし、あまり突っ込んで実装するほどのことではない気がします。
0086デフォルトの名無しさん
2009/07/08(水) 00:36:42そうですね。諦めてSquirrel側で関数定義しようかな。
DXライブラリというのを丸ごとバインドしようとしているのですが、ライブラリのAPIの仕様と
Squirrel上の関数の定義が一致していないとC++のソースからプログラム持ってくるのが
ややこしくなるので、ディフォルト引数定義しないわけにもいかない事情でして。
Squirrel JIT、オリジナル2.1.2の人と改造版2.2.2の人が別なのを忘れておりました。すいません。
ttp://squirrel-lang.org/forums/1/3314/ShowThread.aspx の 05-31-2009, 1:04 PM のZIPです。
最初の"I tried to bind with Sqrat-0.6."(オレはSqrat-0.6で固まろうとした)あたりから不安だったり...
0087デフォルトの名無しさん
2009/07/08(水) 01:26:52投稿している改変版ではフォーラムのレスであげている不具合は修正されてるよ。
ただ、自分のプロジェクトで正常に動かなかったのは本当。
もーちょっと色々動かしてほしいところだね。
0088デフォルトの名無しさん
2009/07/08(水) 23:11:57このスレを読むと、どうも>>41の人が言ってる話の関連のようですね。
ありがたく使わせてもらうことにします。レス下さった方ありがとうございました。
0089デフォルトの名無しさん
2009/07/09(木) 00:41:06>Cannot call method appended at Squirrel script as members of the class
> to binded C++ Classes includes meta-methods[_add/_mul/...].
> The hook getter [_get] should return false if the key is unknown.
直訳:
呼び出すことができない、メソッドを、それはSquirrelスクリプトで追加された、
メンバとして、それはクラスの、それはバインドされたC++クラスであり、
メタメソッド『_add/_mul/...』を含む。
hook getterである『_get』はfalseを返すべきである、もしkeyが未知ならば。
意訳:
Squirrelスクリプトで(クラスに)追加したメソッドを呼び出すことができない。
これ(クラス)はC++のクラスをバインドしたものでメタメソッド『_add/_mul/...』を含む。
もしもしkeyが未知の場合、hook getterである『_get』はfalseを返すべきである。
0090デフォルトの名無しさん
2009/07/09(木) 00:52:42readedMojisu
0091デフォルトの名無しさん
2009/07/09(木) 01:30:25クラスらのメンバーらとしてのSquirrelスクリプトの一点に呼び出しメソッドを
メタメソッド[_add/_mull/...]を含むbinded C++クラスへ追加されられない。
もし例のキーが未知ならば例のフックを取得する関数[_get]はfalseを返すべきだ。
methodにtheがない、bindの過去分詞はbound、hookをゲットする、その他もろもろ…
0092デフォルトの名無しさん
2009/07/09(木) 03:08:02lua にはインクリメント演算子がないのか..!?
0093デフォルトの名無しさん
2009/07/09(木) 03:19:05ttp://www.23ch.info/test/read.cgi/tech/1205208141/776-783
0094デフォルトの名無しさん
2009/07/10(金) 00:38:39defaultEnv = getfenv(0);
for k, v in pairs(_G) do
newEnv[k] = v;
end
setfenv(0, newEnv);
hoge = 10;
setfenv(0, defaultEnv);
print(hoge);
書き換えたグローバル環境(newEnv)にhoge=10を書き込んでるはずなのに
Lua5.0/5.1でこれで出力がnilにならないのなんでよ
"グローバル環境テーブル"=グローバル変数が属してるテーブルってのが間違い?
0095デフォルトの名無しさん
2009/07/10(金) 14:54:20シェルスクリプトにもLispにもTclにもRubyにもPythonにも、
インクリメント演算子なんて無いんだよ。
0096デフォルトの名無しさん
2009/07/10(金) 17:25:55実際に変数が存在するかの確認ってできませんか?
0097デフォルトの名無しさん
2009/07/10(金) 21:46:15setfenv(0,env)だと現在のスレッドの環境が変わる。
現在実行中の関数の環境を変えるにはsetfenv(1,env)で。
適当にまとめてみた
・グローバル変数の参照・代入…実行中の関数の環境
・getfenv(0)/setfenv(0,env)…スレッドの環境
・getfenv(1)/setfenv(1,env)…実行中の関数の環境
・関数の中で作られた関数は親の環境を受け継ぐ
例:
function f()
local g = function() end
return g
end
-- fは実行中のチャンクの環境を受け継ぎ、gはfの環境を受け継ぐ。
・load*系で作った関数はスレッドの環境を受け継ぐ
例:
local t = setmetatable({hoge="t"},{__index=_G})
hoge="main"
print(t,hoge)
setfenv(0,t) -- スレッドの環境が変更される
print(getfenv(1),getfenv(0),hoge) -- 実行中の関数はそのまま
loadstring[[
print(getfenv(1),getfenv(0),hoge)
]]()
0098デフォルトの名無しさん
2009/07/11(土) 07:26:02詳しいサンプルテラthx
スレッドの環境が問題なるのはload*系だけなのねorz
0099デフォルトの名無しさん
2009/07/12(日) 13:04:59http://d.hatena.ne.jp/KZR/20090712/p1
> Lua Programming Gems は, Lua のプログラミングテクニックについてまとめた,
> いわゆる「Gems本」だ。公式ページでは第2章 "Lua Performance Tips" を
> サンプルとして無料公開しており, PDF 形式でダウンロードして読むことができる。
> この内容がなかなか面白い。
> 最も基本的なポイントであるグローバル変数とローカル変数の違いから,
> table における配列とハッシュの扱いについて,文字列の内部的な扱いについて,
> 等々, Lua におけるパフォーマンスの要点について触れている。
> (略)
続きはサイトで
0100デフォルトの名無しさん
2009/07/12(日) 22:06:290101デフォルトの名無しさん
2009/07/13(月) 15:25:37http://sugarpot.sakura.ne.jp/yuno/html/lua51_manual_ja.html#pdf-_G
0102デフォルトの名無しさん
2009/07/13(月) 23:27:37うほっ。更新内容見てフイタ。
IronPythonは事実上.NET側のオーバーロードをサポートできてないみたいだな。
明示的に書けば読めないことも無いようだが、
これで実用になるとはとても信じられない。
http://blogs.msdn.com/haibo_luo/archive/2007/10/11/5413239.aspx
0103デフォルトの名無しさん
2009/07/14(火) 01:06:33MessageBoxあたりで試せばすぐわかるが普通に呼べんぞ?
てゆーかなんでいきなりIronPython?
0104デフォルトの名無しさん
2009/07/14(火) 09:26:14Lisp には演算子っていう概念がないからちょっと違うけど、inc ならあるよ。
Lua の代入文の = も演算子じゃないんだよな。代入文は式じゃないから。
>>96
Lua は変数の値が nil なら定義されていないっていう意味になるので、
値を取得してみて nil かどうかを調べればいいんじゃないかな。
厳密には、グローバル変数はテーブルのフィールドとして定義されていて、
値が nil ならそのキーは存在しないことと同値なので。
0105デフォルトの名無しさん
2009/07/14(火) 10:16:10MessageBoxは試してなかったけど、確かにそうだよなぁ。
IronPython呼び出し用に再定義してあげないといけないかも。
オレ、以前はSquirrel党だったんだけど今はIronPython方面に。
組み込みスクリプトとしてはアリだと思うんだけど、どうだろう。
0106デフォルトの名無しさん
2009/07/14(火) 15:38:04PythonはC関数を登録してスクリプトから呼び出すのが結構めんどくさい。
コルーチンに制限がある。同じ関数内でしか yieldできないし、yield で引数や戻り値の指定ができない。
独自のローダーを使った import 実装がとにかく面倒。 lua なら lua_load に自分定義のロード関数わたすだけでOK
Pyhton > Lua:
スタックではなく、C上でLua変数はすべて PyObject として表現されるのでCソースの可読性が高い。
関数も整数も全部 PyObject としてC側の変数に保存する事ができる。
環境が充実。
ゲーム用途で組み込んでいる自分としては、コルーチンの使いやすさと、
自作ローダーでのロードが楽(ゲーム用の圧縮ファイルから直接スクリプトを呼び出す必要がある)
な点でLua圧勝。
もしツールに組み込むんだったらソースの読みやすさ+ライブラリ充実さで断然 Python
Eclipse + PyDevが使いやすいのも勝ち点。
0107デフォルトの名無しさん
2009/07/14(火) 18:43:120108デフォルトの名無しさん
2009/07/14(火) 21:40:202日で0.71に上がってるからバグでもあったのかと思ったら、
バインドしたC++の関数の引数にSquirrel関数を渡せるようにしてほしいと
要望もらって一日で作ってきてるんですね。
Kanryuさんのパッチも入ったし仕事はやいぞ。
0109デフォルトの名無しさん
2009/07/15(水) 00:50:51GameMonkey|Д`)<全くだ
CRIScript|Д`)<全くだ
0110デフォルトの名無しさん
2009/07/15(水) 01:41:13> ChaiScript | Easy to use scripting for C++
0111デフォルトの名無しさん
2009/07/15(水) 02:24:00と思ったらロゴがほんとにミルクティーだw
0112デフォルトの名無しさん
2009/07/15(水) 02:28:390113デフォルトの名無しさん
2009/07/15(水) 06:59:47ttp://www.aegisub.net/
ttp://g-mark.jpn.org/index.php?Aegisub
字幕スクリプトの整形やエフェクトにLuaを利用してる
ライセンスはBSD、ソースは、
ttp://svn.aegisub.net/
0114デフォルトの名無しさん
2009/07/15(水) 19:21:30Python のyield は引数や戻り値の指定できるよ
Stackless Python なら同じ関数でしかyield使えないという制限もなかった気がするけどうろ覚え
0115デフォルトの名無しさん
2009/07/16(木) 10:35:29レスを見てジェネレータ関係を触ってみたら、
Pythonのバージョンによる挙動の差異が如実に出ててビビッた。
3.0系はprint文が関数化されて書式に互換性が無いとか、
ジェネレータのnext()メソッドが使えなくなってるとか。
IronPythonの現行版はまだ2.5系で、今年中に2.6系互換になる予定なのか。
オレには3.0はまだ新しすぎたようだ!
0116デフォルトの名無しさん
2009/07/16(木) 13:54:53http://www.python.jp/doc/nightly/ref/yield.html
本当だ、気づかなかった.... orz
0117デフォルトの名無しさん
2009/07/29(水) 10:08:15グローバル変数を独立させるようにできないの?
コードを共有して変数だけ独立させたいんだけど。
... って書いてて思ったけど、結局関数もグローバル変数と同じなんだから
lua_newstate でいいのか。
0118デフォルトの名無しさん
2009/07/30(木) 02:48:48そのメンバの値を変更したいのですが、変更するコードをスクリプトに
記述した場合、そのコルーチンをresumeするLUAの関数をC++から何度か呼ぶと
luabind::detail::unrefというところで例外が出てしまいます
struct Test { int a; Test(){} }; という構造体があって、luabindで
luabind::module(L) [
luabind::class_<Test>("Test")
.def(luabind::constructor<>())
.def_readwrite("a", &Test::a)
として、コルーチンの中で t=Test() t.a=0 の2行を書くと例外になります
この2行をコメントアウトすると、何度呼んでも例外が出ません
また、この2行をコルーチンでない普通の関数に記述してC++から呼んでも
例外が出ません
なぜコルーチン内から構造体を使用するコードを書くと例外が出るのでしょうか
0119デフォルトの名無しさん
2009/07/30(木) 06:10:29コルーチンから C の関数が呼ばれるときは lua_State(L の値)が違うから、
それが問題になってたりしないかな?
0120デフォルトの名無しさん
2009/07/30(木) 07:27:21ありがとうございます
すみません、質問しておいて何ですが、以下のフォーラムの記事に
よるとどうやらluabindにバグがあったみたいで、仰るとおりlua_Stateの
値が関係してるようです(英語がよく分からないので間違っているかもしれません)
それでluabind/detail/ref.hppを記事の下にあるものに置き換えたところ、
今のところ例外が出ずに動いています。。
ttp://www.nabble.com/Re:-Garbage-collector-crashes-if-luabind-objects-are-created-in-a-lua-coroutine-td24251470.html
0121デフォルトの名無しさん
2009/07/31(金) 16:36:17再開するのではなく、リセットして最初から実行しなおしたい場合がある。
このとき、どうすればいい?
マニュアルには lua_newthread で作ったスレッドは解放しなくていい、
GCが管理すると書いてあるけど、さすがにいきなり
ls = lua_newthread(..);
って上書きするんだと、いつまでたっても古い ls の内容が削除されないよね?
だってLua側からしてみれば、古い ls はあくまでも中断してるのであって、
いつ再開されるかわからないからGCで回収できないし、
古い ls はもはや不要になったよー ってことをまったく Lua 側に知らせてないし。
かといって、明示的に ls が不要になったことを伝えるために
lua_close(ls);
ls = lua_newthread(...);
lua_resume(ls, ...);
とやってみると、lua_newthread で内部エラーが発生する(メモリ違反ぽい)
どうすればいいですか?
0122デフォルトの名無しさん
2009/07/31(金) 18:37:55>いつ再開されるかわからないからGCで回収できない
んな事はない。
スレッドでも他のデータでも、参照できなくなったらGCで回収される
という事に変わりはない。
0123デフォルトの名無しさん
2009/07/31(金) 18:56:50でも C のレベルでは、参照されているかどうかってわからないんじゃない?
つまり、lua_newthread() した直後は、
Lua のオブジェクトからは参照されていない thread ができるわけですよね。
逆にいうと、lua_newthread() しただけだとどこからも参照されていない事になるから、
lua_setglobal か何かを使って、どこかから参照してあげないといけないとか?
0124デフォルトの名無しさん
2009/07/31(金) 19:50:44「新しいスレッドを"スタックに積み"……」って書いてないか?
0125デフォルトの名無しさん
2009/07/31(金) 19:59:52ここみてますけど、でもさすがに、スタックに積んだままじゃほかのことできないでしょ。
元の質問された方がどういう風に使っていたかによるけど。
0126デフォルトの名無しさん
2009/07/31(金) 20:09:46そのあとLuaで参照したいなら戻り値なりグローバル環境なりに押し込めばいいし
C側だけで管理したいならレジストリ+luaL_refとか使えばいいだろ
何がしたいんだかわかんねーよ
0127デフォルトの名無しさん
2009/07/31(金) 20:12:10古いスレッドが不要になったということをどうやってLUAに知らせるの?
最初に
ls = lua_newthread(...);
lua_resume(ls, ...)
を実行したとして、ls は中断状態のまま残っていると。
で、中断状態をやめて、最初から実行したいということで、いきなり
ls = lua_newthread(...);
lua_resume(ls, ...)
をもう一度呼び出すと、古い ls が上書きされるけど、古い ls への参照も、
なにもかもまったくいじっておらず、ただ単に新しいスレッドを追加しただけにすぎないわけで。
古い ls の参照カウンタをデクリメントするなり、古い ls への参照を
削除するなりの処理がまったく入っていないと。
0128デフォルトの名無しさん
2009/07/31(金) 20:38:13toluaとluabindだったらどちらが安定してる感じですか?
0129デフォルトの名無しさん
2009/07/31(金) 21:20:37だから削除したいならスレッドの参照を潰せばいいだけでしょ?
自分で最後に答え書いてるじゃん!
中断中のコルーチンが参照されなくなった場合に GC 対象になるかどうかは
マニュアルにも明言されてない、どっちなの? って質問なら確かにわかりにくいとは思うが。
int main(int argc, char* argv[])
{
lua_State* L = lua_open();
luaL_openlibs(L);
lua_State* thread = lua_newthread(L);
luaL_loadstring(thread, "print('co1'); coroutine.yield(); print('co2');");
lua_resume(thread, 0);
//lua_settop(L, 0);
lua_gc(L, LUA_GCCOLLECT, 0);
lua_resume(thread, 0);
lua_close(L);
return 0;
}
lua_newthreadで積んだスレッドを潰す処理であるlua_settopの行のコメントを削除すると
二回目のlua_resumeの時点で落ちるところから「GC対象になる」が正解みたいやね。
0130デフォルトの名無しさん
2009/07/31(金) 21:27:07まず
lua_State *base = lua_newstate();
lua_State *ls = lua_newthread(base);
は、
lua_State *base = lua_newstate();
lua_newthread(base);
lua_State *ls = lua_tothread(base, -1)
と意味的には等価ね。
ここで ls は、あくまでスタック上にあるスレッドの情報を、
直接ポインタとして参照してるだけで、別にリファレンスを持ってるわけではない
lua_newthread がこれを返してるのは、単に便利だからにすぎない
この状態で、lua_pop(base,1) することで、スタックの末尾にあるもの=さっき作ったスレッドが
破棄されて解放されることになる。これでスレッドが破棄された後に ls にアクセスすると、
実体がなくなってるポインタの参照になるから誤動作を引き起こす
一般的には、スレッドをスタックにつんだままにしとくのはわけわかになるので、
>>126の言ってる通りに管理することになる
0131デフォルトの名無しさん
2009/07/31(金) 21:52:47お前も使い方間違ってるよ・・・
0132131
2009/07/31(金) 21:59:29メインスレッドのスタックに、新しいスレッドと関数と引数を積んでlua_resumeを呼ぶ
と思ったけど、違うのか
0133デフォルトの名無しさん
2009/07/31(金) 22:01:02え? それだけ言われてもわかんない、どこどこ、教えて!
0134デフォルトの名無しさん
2009/07/31(金) 22:04:32ってなんじゃいゴルァ!w
いやそこは合ってるはずだよ、とゆーかみんなCで組み込むなら標準ライブラリのソース読もうぜ
組み込みの基本からトリッキーなものまで一通りそろってるぜ
0135デフォルトの名無しさん
2009/08/01(土) 20:41:441番目の引数がLではなくcoだということがマニュアルを読んだだけではわからなかった。
0136デフォルトの名無しさん
2009/08/10(月) 17:41:02例えば
Pythonのソースにスペルミスがあったとして
それをC++側で知る方法が全く分からない
どなたか分かりませんか
0137デフォルトの名無しさん
2009/08/10(月) 17:52:13∩_
〈〈〈 ヽ
〈⊃ }
∩___∩ | |
| ノ ヽ ! !
/ ● ● | /
| ( _●_) ミ/ Lua!!
彡、 |∪| /
/ __ ヽノ /
(___)
0138デフォルトの名無しさん
2009/08/10(月) 17:57:43Pythonスクリプトのコンパイルエラーやら実行時エラーを取得したいっていうこと?
0139デフォルトの名無しさん
2009/08/10(月) 18:02:39そのとおりです。
PyErr_Print () の出力先を変えればいいのだと思うのですが。。。うまくいきません
0140デフォルトの名無しさん
2009/08/10(月) 18:44:19PyErr系はstdoutに出力するけど、これはcで定義されたstdoutではなく
python で定義されたsys.stdout を呼んでいるので、その変数を上書きすれば良い。
sys.stdout 変数を書き換えるコードを最初に実行する。
const char *s = "\
import sys\n\
sys.stdout = MyStdout\n\
class MyStdout:\n\
def write(s):\n\
call_c_function(s)\n";
てやって s を実行すれば、Python側の sys.stdoutが自作クラスで上書きされる。
もちろんあらかじめ自作C関数を call_c_function で呼び出せるように登録しておく。
0141デフォルトの名無しさん
2009/08/10(月) 21:11:59PyErr_Occurred で存在を確認して、PyErr_Fetch で取得
0142デフォルトの名無しさん
2009/08/10(月) 22:22:230143デフォルトの名無しさん
2009/08/10(月) 23:09:19ありがとうございます
出来ました
0144デフォルトの名無しさん
2009/08/11(火) 07:43:44〈〈〈 ヽ
〈⊃ }
∩___∩ | |
| ノ ヽ ! !
/ ● ● | /
| ( _●_) ミ/ Lua!!
彡、 |∪| /
/ __ ヽノ /
(___)
0145デフォルトの名無しさん
2009/08/13(木) 01:25:43開発効率はそんなに悪くないんだが、
スクリプトで書いたメソッドの実行のレスポンスが悪いような気がするなぁ。
最初の実行時に引っかかる感じ。2回目以降は問題ないんだが……。
A. 外部サイトへの突撃大好きな真性厨房
韓国突撃でお馴染みの自動保守
最近は自動焼人 ★として2ちゃんねるのボランティアにも精を出す日々
だがそんな彼にも、人間らしい部分はあったのだ…
名言集
『アパッチ砲はワシが作った』
『お前が規制系キャップ取れるか審査してやるよ』
『いつもサボってばかりのキャップがウゼえ』
『俺、100人規模の集団サイバーテロの主犯だったこともあるんだぜ』
『俺の経歴カックイイだろ?』
最近のニュース
8月15日の韓国突撃の際に歴史的大敗を喫する。ラジオでの敗戦宣言のときに声が震えていた
本人は体調不良と言っているが…
----------------------------------------------
この自動焼人 ★メールマガジンの配信停止をご希望される方は
http://qb5.2ch.net/test/read.cgi/sec2chd/1250169591/
にて自動焼人 ★までご連絡ください
0147デフォルトの名無しさん
2009/08/19(水) 22:37:230148デフォルトの名無しさん
2009/08/19(水) 22:48:59\ ヽ ) ) \\ \\
( \ \∩___∩ \\
\ \ ⌒⌒| ノ ヽ \\
\ \ / ● ● ト、\ \\\
\ Y | ( _●_) ミ\ \\\
\ / 彡、_ |∪| ノ \ \\\
(____)―ヽノ' ヽ  ̄ ̄ ヽ\\
\, j l l .l }
Lua! l (_ノノノノ
0149デフォルトの名無しさん
2009/08/20(木) 00:02:360150デフォルトの名無しさん
2009/08/20(木) 08:49:220151デフォルトの名無しさん
2009/08/20(木) 13:51:23っていうか使えるんだろうか
0152デフォルトの名無しさん
2009/08/20(木) 14:17:00バインド部分がテンプレートべったりなんだから、そのままではC++以外で使えるわけがない。
ぼやき。
Squirrelを.NET向けに移植しようかと考えたこともあったが、
この分野ではIronPythonが便利すぎてやる気が失せた。
起動が重過ぎる点を除けば処理速度以外は特に不満点はない。
Luaに関しては.NET判処理系のNuaがあるみたいね。
0153デフォルトの名無しさん
2009/08/20(木) 16:54:28ですよねー
もうちょい汎用的なバインド方法が欲しいところだ
0154デフォルトの名無しさん
2009/08/20(木) 19:43:09試してないけど
extern "C" {}
でC言語リンケージに変換してみるとか。
0155デフォルトの名無しさん
2009/08/26(水) 05:27:30Rubyも楽に組み込めるといいんだけどね。例えば、スクレイピングの部分だけまかせるとかさ
0156デフォルトの名無しさん
2009/09/07(月) 08:56:09http://www.igda.jp/modules/bulletin/index.php?page=article&storyid=122
0157デフォルトの名無しさん
2009/09/07(月) 11:13:190158デフォルトの名無しさん
2009/09/07(月) 11:31:580159デフォルトの名無しさん
2009/09/07(月) 11:45:23Xtalに特に興味があるなら別のイベントに期待って感じかな。
0160デフォルトの名無しさん
2009/09/07(月) 12:08:050161デフォルトの名無しさん
2009/09/07(月) 12:19:500162デフォルトの名無しさん
2009/09/07(月) 12:24:07言語じゃないけど、NativeClient
0163デフォルトの名無しさん
2009/09/08(火) 00:34:11JITコンパイルじゃないが。
0164デフォルトの名無しさん
2009/09/08(火) 12:15:39ttp://www.compuphase.com/pawn/pawn.htm
0165デフォルトの名無しさん
2009/09/08(火) 23:51:16これ良さそうだけど人気ないのかな
0166164
2009/09/09(水) 02:11:46ttp://pawn.my-sv.net/index.php?%B4%F0%CB%DC
0167デフォルトの名無しさん
2009/09/11(金) 08:52:360168デフォルトの名無しさん
2009/09/11(金) 11:08:55帰れ
0169デフォルトの名無しさん
2009/09/12(土) 12:24:04LuaJIT 速いらしいよ。
C ほどじゃないだろうけど、Python には大体勝ってるみたい。
http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=luajit&lang2=python&box=1
0170デフォルトの名無しさん
2009/09/12(土) 14:17:340171デフォルトの名無しさん
2009/09/12(土) 14:30:542.6系ならさらに速くなってる。
ただし速いのは数値計算で、文字列計算などはPythonより遅かったりするが。
0172デフォルトの名無しさん
2009/09/12(土) 15:36:57「Cで書いた (だから速い)」と喧伝しながらこっそりと組み込むものではないのか?
0173デフォルトの名無しさん
2009/09/12(土) 15:43:13Pythonを組み込みに使っている人は、どんなアプリに使ってますか?
0174デフォルトの名無しさん
2009/09/12(土) 17:14:54マジで!? IronPython スゴイんだな。
数値計算に関してなら、以前に計測したとき Lua は Python より2〜5倍速かったんだけど。
数値計算については .NET すごいということなのかな?
0175デフォルトの名無しさん
2009/09/12(土) 19:32:490176デフォルトの名無しさん
2009/09/12(土) 19:37:08C/C++にスクリプト言語の動作を追加するのは柔軟性を増やすことで
開発・運用を容易にするためであって速度のためではない。
スクリプト言語で実装した部分が重いなら改めてC/C++側に移植することを考えればいいだけのこと。
0177デフォルトの名無しさん
2009/09/12(土) 19:43:510178デフォルトの名無しさん
2009/09/12(土) 19:55:55ユーザによる拡張をばりばり推進するぜ派(洋ゲー、リアルタイム物メイン)と、
そんなもん完全にアウトオブ眼中だぜ派(和ゲー、アドベンチャー系メイン)で、
まっぷたつですな。
0179デフォルトの名無しさん
2009/09/12(土) 20:10:01プログラマの部長級が開放的という幸運なケースであってさえ、
総務営業やら会社も巻き込むとやっぱり日本的感覚で
ゲームの内情を客に見せるのは御法度になるね。
プログラマ出身のワンマン社長のところしかありえないでしょう。
0180デフォルトの名無しさん
2009/09/13(日) 09:18:47洋ゲーと言えども、360やPS3でMODを許しているものは少ないだろう。
>>178の(和ゲー、アドベンチャー系メイン)ってPCのエロゲ・ギャルゲのことを
指してるんだろうけど、俺としては違和感があるなぁ。
0181デフォルトの名無しさん
2009/09/15(火) 23:34:31この本持ってる人いる?
luaを始めて見ようと思ってamazonで検索して出てきて最新ぽいから買おうと思ってるんだけど
0182デフォルトの名無しさん
2009/09/16(水) 21:34:58読んでみようと思って大きな本屋まで行ってきたが、
SQLiteの本とDirectXの本読んでたら満足しちゃってそのまま帰ってきてしまった。
0183デフォルトの名無しさん
2009/09/17(木) 05:14:33リファレンスマニュアルの日本語訳も収録してるなら長く使えそうかも。
リファレンス読んでよくわからないところを本文で確認とかできそうだし。
http://sugarpot.sakura.ne.jp/yuno/html/lua51_manual_ja.html
よくここにお世話になるんだけど、内容が古いのか、
本家の英語版にくらべると結構抜けがあるんだよね。
0184デフォルトの名無しさん
2009/09/17(木) 10:12:06おいw
0185デフォルトの名無しさん
2009/09/17(木) 18:27:44このSSで使用してるソフトご存知の方いたら教えていただけませんか
0186デフォルトの名無しさん
2009/09/17(木) 21:15:21ttp://tibid.seesaa.net/
0187186
2009/09/17(木) 21:23:49ttp://www.vector.co.jp/vpack/browse/pickup/pw7/pw007523.html
0188デフォルトの名無しさん
2009/09/17(木) 21:23:50NoEditor
0189デフォルトの名無しさん
2009/09/18(金) 12:39:470190デフォルトの名無しさん
2009/09/25(金) 16:57:06プラグインのようなことをさせたいのですが
何か参考になるサイトやソースコードはないでしょうか?
0191デフォルトの名無しさん
2009/09/26(土) 06:26:45メインと切り離す必要が本当にあるならプロセス間通信。
メインの内部で別スレッドを作って回すだけでいいならマルチスレッド。
0192デフォルトの名無しさん
2009/09/26(土) 09:17:46コルーチンで協調的マルチスレッドにするとかどうですか?
0193デフォルトの名無しさん
2009/09/26(土) 09:51:46貴重な意見ありがとうございます
コルーチンで実装してみて上手く行かないようなら
マルチスレッドを試す方向で行こうと思います
0194デフォルトの名無しさん
2009/09/26(土) 14:57:40マルチスレッドに移行したがな。
ゲームで使用するリソースを開始前に一括してロードするような
FPS的な仕様にしないと単独スレッドの実装は難しい。
0195デフォルトの名無しさん
2009/09/28(月) 13:19:32一つのソフト上で同時に複数の
Luaスクリプトを動かす事って可能なの?
変数やスタックがバッティングしそうな気もするし
実際そういうことをしてるアプリ見たことないな
0196デフォルトの名無しさん
2009/09/28(月) 13:21:090197デフォルトの名無しさん
2009/09/28(月) 13:59:39Luaはインタプリタの状態がグローバルにならない作りになってる。
0198デフォルトの名無しさん
2009/09/28(月) 21:44:360199デフォルトの名無しさん
2009/09/29(火) 09:55:14Lua のコルーチンを改造してマルチスレッドにするという記事があるみたい。
http://www.lua.org/gems/
本は読んでないけど、サンプルコードがダウンロードできる。
Enhanced Coroutines in Lua
Patrick Rapin
0200デフォルトの名無しさん
2009/09/29(火) 14:32:03更にLua内でもコルーチンを使うからか
なんか富豪だな
0201デフォルトの名無しさん
2009/09/29(火) 15:38:360202デフォルトの名無しさん
2009/09/29(火) 15:49:56単純な数値計算ではLuaの方が倍くらい早い。
が、いずれにせよCなどの静的型付言語よりは10分の1以下のスピードなので、
あまりヘビーな処理はさせないようにすること。
とはいえ、80:20の法則で大部分のコードはスクリプト側に移行できるはず。
処理能力が足りなくなったら下回りからC/C++に再度移植していく。
0203デフォルトの名無しさん
2009/09/29(火) 15:55:21そうですか、一見するとSquirrelはLuaの欠点を補い
構文もC/C++に近いなど利点ばかりかと思っていたけど
それなりに欠点があってゲーム用に改良された割には
未だ使用例が少ないのが現状みたいですね
0204デフォルトの名無しさん
2009/09/29(火) 16:14:07いや、C++で書いてたころは普通にSquirrel使ってたよ。
とりあえず基本的なレベルでの不満はない。
オブジェクトの寿命は常に問題になるけどね。
今はもうC++でプログラムは書かないようにしてるから関係なくなった。
0205デフォルトの名無しさん
2009/09/30(水) 18:40:24気になるなw
> 今はもうC++でプログラムは書かないようにしてるから関係なくなった。
今は何で書いてるんですか?
.NET系?
0206デフォルトの名無しさん
2009/10/02(金) 05:46:32C#+IronPythonだ。レポはこのスレに何回も書いてるのでログを見てくれ。
しかし静的型付言語でいいならBooでもいいかも……(はっきり言ってこっちの方が速いし)
まあ今回は途中まで作ったからIronPythonでやってしまう予定だけど。
0207デフォルトの名無しさん
2009/10/02(金) 05:47:140208デフォルトの名無しさん
2009/10/03(土) 12:21:55単純計算でステート数分増えるのかな?
検証してるサイトないか探したけど見当たらない
0209デフォルトの名無しさん
2009/10/03(土) 12:29:140210デフォルトの名無しさん
2009/10/04(日) 13:35:48それを可能にするパッチがある、とあるけど
実際どこで配布されてます?
ここ数日ずっと探してるけど見つからず
0211デフォルトの名無しさん
2009/10/04(日) 16:57:50continueは
http://lua-users.org/wiki/LuaPowerPatches
とか
http://lua-users.org/lists/lua-l/2009-06/msg00331.html
だな。
0212デフォルトの名無しさん
2009/10/04(日) 18:56:28VC++6.0でLua環境を構築しています。
「スクリプト言語による効率的ゲーム開発- C/C++へのLua組込み実践」 の中で
紹介されているtolua++を適応しています。
あるクラスの関数をtolua++を用いてLuaに公開しようと実装したのですが、
extern宣言した関数がリンカエラーでビルドする事が出来ません。
やりたい事は下記の様な感じです。
class CHoge
{
public:
char* GetName( CHage* pHage );
};
このGetName関数をtolua++でグルーコードに出力して、
VCのプロジェクトに登録しています。
出力したグルーコードに記述されている、GetName関数がリンカエラーになってしまいます。
*今はグローバル関数にして、extern宣言で対応しています。
クラスの関数をLuaに公開するには何か特別な方法が必要なのでしょうか?
上記の本にはクラスの関数の場合について記述されていない様なので質問しました。
宜しくお願いします。
0213デフォルトの名無しさん
2009/10/04(日) 20:20:58thx、無事適用完了しました
0214デフォルトの名無しさん
2009/10/06(火) 04:29:51http://www.codenix.com/~tolua/tolua++.html#classes
ここみると、クラスごとバインドするしかなさそう。
あるいは、登録したい関数をクラスメソッド(static 宣言)にするといいのかな。
0215デフォルトの名無しさん
2009/10/06(火) 17:54:33それを可能にするパッチとか出てたりします?
自分で改造しようにも手に負えなくて
0216デフォルトの名無しさん
2009/10/06(火) 18:01:45オレの場合は自力でやったけど複雑過ぎて無理だった orz
Luaってなんで配列が1からなのかね
いまでもムズムズ、どうにかならないものか
0217デフォルトの名無しさん
2009/10/06(火) 18:28:12check(ls, ';');
って書けばいいんじゃないかな
0218デフォルトの名無しさん
2009/10/06(火) 22:06:320219デフォルトの名無しさん
2009/10/06(火) 23:39:100220デフォルトの名無しさん
2009/10/07(水) 01:28:23回答ありがとうございます。
クラスのバインドで試してみます。
0221デフォルトの名無しさん
2009/10/07(水) 12:03:44ニューメリカルレシピ・イン・C っていう本にその逆のことが書いてあったな。
一般的な数学では添え字は 1 からはじまるのに C だと 0 からだから困ると。
で、その本では添え字を 1 から始めるように、配列のポインタを 1 つ前にずらしてた。
つまり、int arr[10] みたいな配列をつくったら、
int *arr1 = arr - 1 と定義しておけば、arr1[1]、arr1[2]、……、arr1[10]
っていうふうにアクセスできる。
0222デフォルトの名無しさん
2009/10/07(水) 12:29:33厳密には、配列の範囲から外れたところを指してるポインタに
まつわる動作は未定義なので、仕様に煩い人には不評。
(C FAQ より ttp://c-faq.com/aryptr/non0based.html )
0223デフォルトの名無しさん
2009/10/07(水) 13:11:48>>219
SquirrelとかAngelScriptじゃダメなの?
0224デフォルトの名無しさん
2009/10/07(水) 13:16:16パッチではなく、リファクタリングするべき。
#define FIRST 1
0225デフォルトの名無しさん
2009/10/07(水) 13:16:360226デフォルトの名無しさん
2009/10/07(水) 13:21:29Lua以外にするとメモリ消費や処理速度が劣ってしまうのが嫌で
やっぱり仕様に従って使うしかないですか
0227デフォルトの名無しさん
2009/10/07(水) 14:04:47;|ノ||` ┬-‖
__,/●●| __ | | ‖ L...Lua..
| ; |`(_●)/ ミ . Y ‖
| .彡|∪||、 , .| | ‖
/:~ ̄ ̄ ̄ ̄:/.| | ‖
,|:::::. .......::/>> / ‖
/.::::: .. ...::::::|'(/\_/ ‖
../:.::: .. :.:::/.:/ /‖\
/.:::. ....:::..:::/.:/
' ̄ ̄ ̄ ̄ ̄ _/
|_| ̄ ̄ ̄ ̄|_|
0228デフォルトの名無しさん
2009/10/07(水) 18:31:000229デフォルトの名無しさん
2009/10/07(水) 18:57:150230デフォルトの名無しさん
2009/10/07(水) 19:28:510231デフォルトの名無しさん
2009/10/07(水) 20:37:210232デフォルトの名無しさん
2009/10/07(水) 23:24:33なつかしすぎてどっかから鼻血でたわw
0233デフォルトの名無しさん
2009/10/07(水) 23:41:070234デフォルトの名無しさん
2009/10/08(木) 13:50:08for文ではそのままイテレータをまわしてしまうし。
0235デフォルトの名無しさん
2009/10/09(金) 19:50:43消費を抑えたくて手動設定する場合
どれくらいの値がベストだろう?
0236デフォルトの名無しさん
2009/10/09(金) 23:42:36数十キロバイトの仮想スタックなんて小さな問題だ。
0237デフォルトの名無しさん
2009/10/11(日) 01:41:47>>236 に捧ぐ
"O"zapper!!
0238デフォルトの名無しさん
2009/10/11(日) 03:42:200239デフォルトの名無しさん
2009/10/11(日) 19:42:49「どっかから」てお前はケツから鼻血がでるのかよw
>>236
RubyでフレームワークとしてRailsを搭載したかのようなメモリ消費量だなおいw
0240デフォルトの名無しさん
2009/10/11(日) 19:52:53IronPythonがもりもりメモリ食うからな。
ほんと環境にやさしくないスクリプトエンジンだぜ。
まあ、C#で組むにはこれが一番「普通」なスクリプティングエンジンなので。
0241デフォルトの名無しさん
2009/10/11(日) 21:24:500242デフォルトの名無しさん
2009/10/14(水) 02:42:38乱数を表示させたあとに、もう一度同じプログラムを実行すると
シード値が変わらずにまったく同じ乱数が表示されてしまう。
どうすればこのシード値を初期化して、実行するたびに違う乱数を
表示させられるの?
0243デフォルトの名無しさん
2009/10/14(水) 02:54:44一般的には、タイマーの値とか、ユーザ入力の時間差を測定したりして、それを srand() につっこんで対応する。
0244デフォルトの名無しさん
2009/10/14(水) 03:04:26レスありがとう
まだはじめたばっかりでホームページさがしながらの手探り状態なんだけど、
math.random()で()の中に1から10までの値をいれるよね?
そしたらそれ以外にmath.randomseedを書けばいいってこと?
0245デフォルトの名無しさん
2009/10/14(水) 03:16:42プログラムの頭で math.randomseed(os.time()) とでもしておきなされ。
0246デフォルトの名無しさん
2009/10/14(水) 03:22:08本当にありがとうございました。
これからもっと勉強してきます
0247デフォルトの名無しさん
2009/10/14(水) 13:48:26lua_errorで強制的に例外を発生させる方法以外に
何かありませんか?
1つのスクリプトを実行する一般的な使い方なら問題ないのですが
スレッド毎で同時に複数のスクリプトを実行させる場合
リソースの保護をしても違うスレッドからスクリプト(ステート)を閉じようとすると
原因不明のエラーで強制終了してしまいます
0248デフォルトの名無しさん
2009/10/14(水) 14:52:00コルーチン化していつでも終了できるように作っておくのがLWL流 :)
0249デフォルトの名無しさん
2009/10/14(水) 14:57:040250デフォルトの名無しさん
2009/10/14(水) 15:03:25肝心な部分を説明し忘れてました
私が今作ってるのは>>190の方が言われたような
luaを同時実行させてプラグイン機能を実現するもので
それをコルーチンでやるとなると実質スレッド1つで
全処理をすることになるのでCPUリソースの消費が激しく
ステートも一つだから変数の重複などが問題になって
それらを回避するためにマルチスレッド上で
それぞれスクリプトを動かす必要があるのです
しかしあるプラグインでエラーが起こり
それに関連するスクリプトを全部停止(解放)したい時
現スレッドから他スレッドのステートを閉じようとすると
強制終了につながるエラーが起きてしまう状況で
0251デフォルトの名無しさん
2009/10/14(水) 15:35:28ちがうよー。
コルーチンというのはプログラマが入力した任意のタイミングで
動作を中断できるようにした仕組み(yield)のことであって、
それを使って複数の仕事を1スレッドで同時に実行というのは二次的なものに過ぎないんだよ。
したがって複数のスレッドで実行しても(エンジンの実装に問題が無いなら)問題ない。
で、中断されて制御が戻ってきたタイミングでそのまま開放してあげればいい。
0252デフォルトの名無しさん
2009/10/14(水) 15:54:24>変数の重複などが問題
↓
>強制終了につながるエラーが起きてしまう状況
戦況が悪化してるが、今さら撤退する気はない
典型的なパターンですね
0253デフォルトの名無しさん
2009/10/14(水) 16:07:52lua はスレッドセーフじゃないから、別スレッドからの制御は根本的にできないよ
コルーチンでうごかせってのは、呼び出しに lua_call を使うんじゃなくて、lua_resume と while
ループでスクリプトを駆動させて、スクリプト側では定期的に yield するようにすれば、
その区切りで安全に実行中断できるよ、ってこと。
それぞれのスクリプトはそれぞれのスレッドで立ち上げて、ほかのスレッドから停止させるときは
フラグをたてておいて、そのフラグがたってたらwhileを抜けて速やかにスレッドを自滅させる
ような書き方にする。
コルーチン駆動&記述が面倒ってことなら、裏技チックだけど、lua_sethook を使って、
関数呼び出し、ないしは行ごとに終了フラグチェックさせて、もしフラグたってたら
lua_error で速やかにスクリプトを abort させるという手もある。
残念ながらhookにユーザパラメータは存在してないので、変数かレジストリに
参照するフラグのCポインタを格納しておく、とかの小ざかしいテクが必要。
0254デフォルトの名無しさん
2009/10/14(水) 16:12:26Luaスクリプトを同時実行する際は
マルチスレッドのみでの制御は無理ということですか
改めてコルーチンについて勉強し直してきます
どうも助かりました
0255デフォルトの名無しさん
2009/10/14(水) 17:04:30関係ないかもしれないが、非推奨な手法を使いにくくするとかいう話を思い出した。
0256デフォルトの名無しさん
2009/10/14(水) 23:15:46AngelScriptだと同じ呼び出し方でOKなんだよなぁ…
0257デフォルトの名無しさん
2009/10/15(木) 05:43:27coroutine.wrap をつかえば、普通の関数呼び出しと同じように resume もできるよ。
0258デフォルトの名無しさん
2009/10/15(木) 11:25:20手間が増えてスクリプトにしてる意味がねえよ
0259デフォルトの名無しさん
2009/10/15(木) 11:27:460260デフォルトの名無しさん
2009/10/15(木) 22:50:580261デフォルトの名無しさん
2009/10/15(木) 23:24:540262デフォルトの名無しさん
2009/10/16(金) 10:56:47http://www.keplerproject.org/luasql/
Lua for Windows についてくるよ。使ったことないけど。
http://luaforwindows.luaforge.net/
0263デフォルトの名無しさん
2009/10/16(金) 11:14:25というかそんな『重い』プロダクトを扱うなら、
素直にPythonやRubyなんかのライブラリの整備されたスクリプト言語使ったほうがよくなくね?
0264デフォルトの名無しさん
2009/10/16(金) 11:16:27ActiveRecord互換のORMライブラリを自作したんだがな。
0265デフォルトの名無しさん
2009/10/16(金) 11:24:25Luaの速度に魅力を感じてる人がなんとなく多い気がするね。
あとは、リスとかに比べるとドキュメントの多さなんかが人気の秘訣?
0266デフォルトの名無しさん
2009/10/16(金) 11:27:280267デフォルトの名無しさん
2009/10/16(金) 12:17:070268デフォルトの名無しさん
2009/10/16(金) 12:25:08多少なりと癖があろうとlua使っちゃうんだよね
他に比べて採用例も多い分、多言語との連携も充実してるし
0269デフォルトの名無しさん
2009/10/16(金) 12:53:36動いてるやつがいるような気がしてきた
0270デフォルトの名無しさん
2009/10/16(金) 13:04:45なんで? 別にそれは前提条件にならないと思うけど。
オレはゲームシステムを組んでいるところだが別にメモリ消費量は大して気にしてないぞ。
速度は大切だが、どうせ1スレッドでは間に合わなくなるのでマルチスレッド化するし、
ボトルネックはスクリプト部分ではないので問題ない。
0271デフォルトの名無しさん
2009/10/16(金) 13:14:26ttp://www.rtpro.yamaha.co.jp/RT/docs/lua/index.html
0272デフォルトの名無しさん
2009/10/16(金) 13:17:060273デフォルトの名無しさん
2009/10/16(金) 13:37:080274デフォルトの名無しさん
2009/10/16(金) 13:58:37俺はそうは思わないけどな……。
触ったことあるけど文法がちょっと癖あるし、整数型がないし。
Pythonの方がよっぽどいい。
0275デフォルトの名無しさん
2009/10/16(金) 14:01:01いやいや、個人的にではなく一般的にね
上でも出てるけど書籍や採用例が多いとかさ
0276デフォルトの名無しさん
2009/10/16(金) 16:06:280277デフォルトの名無しさん
2009/10/16(金) 17:20:01ttp://alpha.mixi.co.jp/blog/?p=236
でもphpに組み込みってなんだ。
ttp://www.mediawiki.org/wiki/Extension:Lua
まあPECL拡張は2年前で止まってるみたいだけど
0278デフォルトの名無しさん
2009/10/17(土) 00:50:19この制限さえなければ今までなかった用途が色々できると思うんだけど。
0279デフォルトの名無しさん
2009/10/17(土) 15:11:07??どういうこと?
0280デフォルトの名無しさん
2009/10/17(土) 15:38:39うう〜ん……。問われたので改めて調べてみたが、どうやら間違った認識が一部あったようだ。
PHPインタプリタ本体はPHP License 3.01で配布されていて、
こいつは
・配布するソースコードまたはドキュメントに著作権表示、ラインセンス本文を記載すること
・PHP Groupから許可を得ずにPHPという名前を使用しないこと
(PHP Fooやphpfooはだめ。Foo for PHPはOK)
・文言の表示強制("This product includes PHP, freely available from <http://www.php.net/>")
だけだな。インタプリタ自体を内蔵することは問題なさそう。
契約なしに内蔵できないのはZendライブラリなんだそうな。
(Zend Frameworkは修正BSDライセンス。Zendライブラリとは何ぞや?)
0281デフォルトの名無しさん
2009/10/17(土) 23:30:490282デフォルトの名無しさん
2009/10/18(日) 01:54:10明確的に破棄する方法はないようなのだけどC側から
//コルーチンを実行するのスレッド(ステート)を作る
lua_State *L = lua_newthread(luaL_newstate());
//C側からコルーチンの操作
//コルーチンのスレッドを閉じる
lua_close(L);
とした場合はコルーチンを実行する為に確保されたメモリは解放されますよね?
0283デフォルトの名無しさん
2009/10/18(日) 03:54:02シンプル、軽量というのが売りらしいが。
0284デフォルトの名無しさん
2009/10/18(日) 09:02:18lua_newthreadで作成したコルーチンはlua_closeしちゃ駄目だよ。
開放はGCにまかせる。>>121あたりから同じ様な質問出てるから見てみ。
0285デフォルトの名無しさん
2009/10/18(日) 09:33:44指摘ありがとうございます
つまりスタックに積まれたコルーチンのスレッドを
lua_popで削除すればいいのですか
でもそれだとGCまかせでスグにコルーチン破棄はされないので
>>282のを
//コルーチンを実行するのスレッド(ステート)を作る
lua_State *L = luaL_newstate();
lua_State *T = lua_newthread(L);
//C側からコルーチンの操作
//ステートを閉じる
lua_close(L);
とすれば閉じるのはコルーチンのステートではないものの
lua_newthread は元のステートのオブジェクトを共有するみたいなので
コルーチンで確保されたメモリも同時に解放されますよね?
0286デフォルトの名無しさん
2009/10/18(日) 10:07:08まぁ、そらそうだが。
任意開放ならlua_gcじゃ駄目な理由でもあるの?
0287デフォルトの名無しさん
2009/10/18(日) 10:29:55GCという目に見えない物に頼るより
自分で明確的に管理したくて
0288デフォルトの名無しさん
2009/10/18(日) 10:37:320289デフォルトの名無しさん
2009/10/18(日) 10:43:500290デフォルトの名無しさん
2009/10/18(日) 11:14:070291デフォルトの名無しさん
2009/10/18(日) 11:22:190292デフォルトの名無しさん
2009/10/18(日) 11:27:18Luaでは文字列もテーブルも関数もuserdataもGCで管理されてる訳だが、そういうのも自分で管理したいの?
0293デフォルトの名無しさん
2009/10/18(日) 11:31:28そこまではこだわってないです
それらはスクリプトに自分で定義しないと生成されないから
ある程度は管理出来るので
0294デフォルトの名無しさん
2009/10/18(日) 11:54:51元のステートごと閉じてたら、そのコストがでかすぎて全然うれしくないと思われ。
GCいやな人は lua 使うな、が精神的には正しい。squirrel にしときなされ。
0295デフォルトの名無しさん
2009/10/18(日) 12:06:48遅い
検索しづらい
0296デフォルトの名無しさん
2009/10/18(日) 12:07:49言語としては面白いよ
組み込みも簡単に出来るし
でもWinの開発環境を整えるの面倒
0297デフォルトの名無しさん
2009/10/18(日) 12:26:45iPhone 3G S もジョブスが発表後に iPhone 3GS に改名させたそうだ
0298デフォルトの名無しさん
2009/10/18(日) 12:28:16「ネットでの検索のしやすさ」の間違いです…
自分でワロタ
0299デフォルトの名無しさん
2009/10/18(日) 12:37:33>元のステートごと閉じてたら、そのコストがでかすぎて
具体的にkwsk
0300デフォルトの名無しさん
2009/10/18(日) 13:09:55や、普通にグローバルな関数や変数も全部毎回順次解放&登録しなおすハメになるじゃん
そういったコストを下げるために共有させる仕組みなのに本末転倒だろう
それぞれのスレッドが完全独立で頻繁に起動するものでもないのなら止めはしない。
0301デフォルトの名無しさん
2009/10/18(日) 13:17:45不要になったのを解放するのだから問題ないでしょ
0302デフォルトの名無しさん
2009/10/18(日) 14:09:07擬似コードにはいちいち書かないだろうけど
擬似コードを書くとどうしても、目に見えない物に頼りがちだよね
0303デフォルトの名無しさん
2009/10/18(日) 16:00:28今度は重複しない乱数を表示させたいと思っている。
でも何度やってもできない。。。
ヒントだけでも教えてください
0304デフォルトの名無しさん
2009/10/18(日) 16:05:01ヒント:シャッフル
0305デフォルトの名無しさん
2009/10/18(日) 16:19:02レスありがとう
ということは、最初に規定量の数値を指定しておいてそれをシャッフルすればいいってことか!
ありがとう。
0306デフォルトの名無しさん
2009/10/18(日) 16:59:56http://tsushima.2ch.net/test/read.cgi/news/1255851428/
0307デフォルトの名無しさん
2009/10/18(日) 23:54:160308デフォルトの名無しさん
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);
}
0309デフォルトの名無しさん
2009/10/24(土) 00:21:400310デフォルトの名無しさん
2009/10/24(土) 00:42:33名前が可愛いからちょっと舐めてたわ
0311デフォルトの名無しさん
2009/10/24(土) 00:51:08できたら、どの辺りが気に入ったか詳しく
0312デフォルトの名無しさん
2009/10/24(土) 06:30:35LuaやSquirrelと比べて優れている点は何がありまんすか?
0313デフォルトの名無しさん
2009/10/24(土) 06:39:49/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ AngelScript!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
0314デフォルトの名無しさん
2009/10/24(土) 07:09:44オブジェクトの参照なのか?
Hoge@ hoge;
みたいなの。
C++みたいに、インスタンス入れる変数と参照がわかれているのか?(C++詳しくないからなんtねいったらいいかわからん)
LLなのに面倒な言語だな…
全部、デフォで参照でいいと思うんだが
0315デフォルトの名無しさん
2009/10/24(土) 12:38:48スクリプト言語の癖に静的型付言語だからなぁ。
それって本当に意味あるのか? って思ってしまう。
Booとかも触ってみてその動作速度は認めるけど、スクリプトの記述が面倒に感じる。
0316デフォルトの名無しさん
2009/10/24(土) 13:28:09まぁ、インタプリタじゃないけどね。
0317デフォルトの名無しさん
2009/10/24(土) 23:43:43・文法がC++まんまなので書きやすい
・C++との連携が簡単
・クラスとかほぼそのまま使える
・const〜やenumなど、定数定義が可能
・#includeも可能
こんなところか?
>>314
その例だと、「Hogeクラスの参照型」って扱いになる。
C++のHoge &という記述に近い。
0318デフォルトの名無しさん
2009/10/25(日) 00:41:08ソースが読みやすく短い組み込みライブラリのお勧めを教えてもらえませんか?
今のところLuaが最有力候補だと思ってます。
0319デフォルトの名無しさん
2009/10/25(日) 01:10:080320デフォルトの名無しさん
2009/10/25(日) 05:11:42実質としてはそんなに悪いコードではないが、しかし決して良いコードではない。
そして、SqPlusは絶対に読むな。頭が痛くなること請け合い。
それはそうと、Xtalのコードは大変いいと思うぞ。
言語自体の仕様は首を傾げたくなるところがあるが。
0321デフォルトの名無しさん
2009/10/25(日) 08:12:58\ ヽ ) ) \\ \\
( \ \∩___∩ \\
\ \ ⌒⌒| ノ ヽ \\
\ \ / ● ● ト、\ \\\
\ Y | ( _●_) ミ\ \\\
\ / 彡、_ |∪| ノ \ \\\
(____)―ヽノ' ヽ  ̄ ̄ ヽ\\
\, j l l .l }
Lua! l (_ノノノノ
0322デフォルトの名無しさん
2009/10/25(日) 17:53:23Xtalのコードは俺の頭じゃ解析不可能だからLua読んでます。
0323デフォルトの名無しさん
2009/10/25(日) 18:55:12いったいどれにすれバインダ
0324デフォルトの名無しさん
2009/10/25(日) 20:22:51始まる前に終わっちゃったよ的な
0325デフォルトの名無しさん
2009/10/25(日) 20:29:350326デフォルトの名無しさん
2009/10/25(日) 22:01:57SqPlusはダメすぎる、忘れましょう、使ってる人はたぶんいません
squirrelのバインダは自分で使い易いように自分で書いた方が1024倍マシよ
0327デフォルトの名無しさん
2009/10/25(日) 22:15:150328デフォルトの名無しさん
2009/10/25(日) 22:36:22ごめん、動いてるものはさわるな原則にのっとって使い続けてる^^;
一部手はいれてあるけど。
時間あったら新しいバインダにしたいんだけどなかなか……
0329デフォルトの名無しさん
2009/10/25(日) 23:08:08cedecのスライドに書いてあったよね。
0330318
2009/10/26(月) 01:03:53ありがとうございました。
0331デフォルトの名無しさん
2009/10/26(月) 02:05:580332デフォルトの名無しさん
2009/10/26(月) 14:10:36スタックゴニョゴニョしなくていいからコード読みやすいし
なによりデフォルトでメモリ上から「のみ」スクリプトコードをロードできるってのがイイ!
ゲーム開発だと裸のままスクリプトファイルが置いてあることなんてないからね。。。
モジュールのロードとかもオブジェクト指向で非常に素直に書けるぽいし
さっそくLuaを破棄して組み込んでみよう
0333デフォルトの名無しさん
2009/10/26(月) 14:25:290334デフォルトの名無しさん
2009/10/26(月) 16:01:050335デフォルトの名無しさん
2009/10/26(月) 20:39:28前使おうとして陥った
ちょっと聞きたいんだが、AngelScriptを使っている人や使わなくなった人(他の言語に移った人)は
なんで使っている、使わなくなった?
C++そのままというか継承に制限があるのが大きくてSquirrelに移ろうと思ってるんだけど、
他の人はどう思ってるのか気になる
アプリ実行時にちょこちょこ書き直したり、コンパイル/リンク時間の省略とかスクリプト自体の
メリットは分かるんだが…
0336デフォルトの名無しさん
2009/10/26(月) 21:10:200337デフォルトの名無しさん
2009/10/26(月) 23:17:060338デフォルトの名無しさん
2009/10/26(月) 23:21:460339デフォルトの名無しさん
2009/10/27(火) 08:20:18〈〈〈 ヽ
〈⊃ }
∩___∩ | |
| ノ ヽ ! !
/ ● ● | /
| ( _●_) ミ/ Lua!!
彡、 |∪| /
/ __ ヽノ /
(___)
0340デフォルトの名無しさん
2009/10/27(火) 09:35:24C++との連携が簡単、C++クラスをほぼそのままで使える、複数のコンテキスト(LuaStateに相当?)を同時に処理させるのも簡単、
定数定義や列挙型も使える、といった点が便利なんで使ってる。
特にC++との連携はLuaやSquirrelより簡単だし、マニュアルもサンプルも英語だけどわかりやすい。
0341デフォルトの名無しさん
2009/10/27(火) 18:19:470342デフォルトの名無しさん
2009/10/28(水) 00:13:00細かいとこがc++と違和感無くて簡単だわ
0343デフォルトの名無しさん
2009/10/28(水) 04:00:430344デフォルトの名無しさん
2009/10/28(水) 04:39:160345デフォルトの名無しさん
2009/10/28(水) 13:47:14メモリ消費や処理速度はどれほど違う?
0346デフォルトの名無しさん
2009/10/28(水) 14:09:25':' ゙''" `':,
ミ ・ω・ ;,
:; . っ ,つLua!
`:; ,;'
`( /'"`∪
0347デフォルトの名無しさん
2009/10/28(水) 14:17:51ttp://codeplea.com/game-scripting-languages
0348デフォルトの名無しさん
2009/10/28(水) 14:48:510349デフォルトの名無しさん
2009/10/28(水) 15:50:27・静的型付
・スレッドセーフ
・スタック操作なし(またはLuaより容易)
で選ぶとしたら
やっぱりAngelScriptがいいのかな〜
0350デフォルトの名無しさん
2009/10/28(水) 15:51:52まあ、リスはわかりやすいからいいんだよ!とか言ってみる。
でも Pawn の性能は魅力だな。とりあえず組み込みテストして
みてよさそうなら、静的スクリプト言語としての併用もかんがえてみよう
0351デフォルトの名無しさん
2009/10/28(水) 15:53:370352デフォルトの名無しさん
2009/10/28(水) 18:03:220353デフォルトの名無しさん
2009/10/28(水) 18:17:32setdebughookを仕掛けた状態で_callメタメソッドをコールすると死ぬ。(SQVMでぬるぽ発生)
ちなみにdebughook関数の中身を空にしても同様です。
公式フォーラムの垢を紛失してしまったので誰か報告たのむ
http://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)
0354デフォルトの名無しさん
2009/10/28(水) 18:39:16すんまそ、環境を書いてなかった。
Squirrel 2.2.3 stable
VisualC++, cygwin, Linux, 何れでも発生。
Squirrel 3はまだ試していません。
0355デフォルトの名無しさん
2009/10/29(木) 12:22:06だとするとクロージャが作れないから、ちょっと不便かな。
状態遷移とかの記述に特化しているようだし、UnrealScript に似ているかも。
0356デフォルトの名無しさん
2009/10/29(木) 17:27:530357デフォルトの名無しさん
2009/10/29(木) 20:25:50拙い英語ですが報告しておきました。
temp_regがメタメソッドコール前にhookで使われるのが一因っぽいです。
0358デフォルトの名無しさん
2009/10/30(金) 04:54:40メモリ確保失敗についてまったく考慮してないのを修正してくれ、と頼んでみて
もらえまいか?
組み込み言語としてリソースの乏しい環境で使うことを考えれば、メモリ確保が
失敗しないなどという前提で組まれるとツライものがある。
0359デフォルトの名無しさん
2009/10/30(金) 04:56:120360デフォルトの名無しさん
2009/10/30(金) 04:57:500361デフォルトの名無しさん
2009/10/30(金) 05:00:20リファレンスマニュアルを読む程度ならなんとかなるんだけど。
0362デフォルトの名無しさん
2009/10/30(金) 05:20:40here is a patch for memory allocation error
とか一文だけ書いとけば通じると思う。
0363デフォルトの名無しさん
2009/10/30(金) 05:42:29決めてからじゃないとマズイ感じ。
sq_malloc や sq_realloc がいくつかのマクロを通して間接的に使われてるんだけど、
どれも呼び出し元で NULL が返ってくることが考慮されてない。
典型的なのは配列伸ばすのに p = SQ_REALLOC(p,oldsize,newsize) してるところ。
NULL 返したら元の領域がリークするうえに後続のコードでは確保成功したものとして
余裕でアクセスしてくる。
最初は、C++だからsqmem.cppの関数から例外投げろってことかと思ったんだけど、
呼び出し側で例外の発生も考慮されてないからまた別の理由でリークするし。
0364デフォルトの名無しさん
2009/10/30(金) 10:21:320366デフォルトの名無しさん
2009/10/30(金) 17:39:48なんか不具合あるの?
AngelScript試してみようと思ってるんで気になる
UTF8扱いたいんだ
0367デフォルトの名無しさん
2009/10/30(金) 17:48:06ライブラリをビルドする際にプリプロセッサでAS_DOUBLEBYTE_CHARSETを定義するんだけど、
それやるとビルドでエラーが出ちゃう。
しかもマルチバイト文字かシングルバイト文字かを判定するやり方もマズい。
最新版出るたびに毎回そこ修正してるよ。
0368デフォルトの名無しさん
2009/10/30(金) 19:04:190369デフォルトの名無しさん
2009/10/30(金) 23:19:35ソース弄ってみるよ
0370デフォルトの名無しさん
2009/10/31(土) 00:09:14それ新しい版では修正されてたと思った。
0371デフォルトの名無しさん
2009/10/31(土) 10:39:11asIScriptEngine *lpEngine=asCreateScriptEngine(ANGELSCRIPT_VERSION);
lpEngine->SetEngineProperty(asEP_SCRIPT_SCANNER, 1);
みたいな感じでエンジンの設定すれば大丈夫だったと思う。
0372デフォルトの名無しさん
2009/11/01(日) 23:04:230373デフォルトの名無しさん
2009/11/02(月) 06:54:37UTF8はデフォルトでサポートしてるっぽく読めたんでDLしたまんまビルド
static const char* scriptString =
"void hellow()"
"{"
" Print( \"hellow world\" );"
" Print( \"UTF8テスト\" );"
"}";
とりあえずこれOKだった
ホストへstd::stringで渡せたり楽だわあ
0374デフォルトの名無しさん
2009/11/02(月) 13:25:040375デフォルトの名無しさん
2009/11/03(火) 16:16:50それできたらShitJIS対応の改造しなくて済むな。
0376デフォルトの名無しさん
2009/11/04(水) 10:58:55パーツを電源も含めて色々入れ換えてみたところ、
SATAケーブルをノイズに強いタイプに変更したら改善した。
残念ながら完全には直ってないようだけど、十分実用レベルには戻った。
資金に余裕ができたらHDD買い足してパーティションを作り直そう……。
0377デフォルトの名無しさん
2009/11/04(水) 10:59:540378デフォルトの名無しさん
2009/11/07(土) 09:41:07プロジェクト開いても、なんかファイル構成がよくわからないです。
もしかしてこれ、コンパイラとVMが別のプロジェクトファイルになっているんでしょうか?
luaみたいに、単純にヘッダファイルとlibファイルだけが欲しいんですが…
もしかしてDLLしかない??
0379デフォルトの名無しさん
2009/11/07(土) 16:02:52pawnについていいなと思い試してみたはいいものの
詳しく使おうとするにつれてファイル構成が?で
投げ出した俺と同じ状態だね
確かにあれはわかりにくい
0380デフォルトの名無しさん
2009/11/08(日) 02:12:15asEP_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 っぽい。
0381デフォルトの名無しさん
2009/11/09(月) 16:15:582箇所いじれば大丈夫っぽいし。
0382デフォルトの名無しさん
2009/11/10(火) 04:57:26Xtalはそんな感じのことをやってますね。
初期化関数に渡す Setting クラスインスタンスの ch_code_lib メンバに
文字コードクラス(例:SJISChCodeLib)のインスタンスを渡すことで好きな
文字コードを選択できるようになってます。
SJIS, EUC, UTF8, UTF16, UTF32 の文字コードクラスは標準で用意してある模様。
0383382
2009/11/10(火) 05:09:58…とはいっても別に内部で文字コード変換をしてくれるわけじゃないから、
Windowsのマルチバイト文字セットで使うなら基本的にSJISを選ぶことになるだろうけど。
Unicode文字セットで使うなら、XtalライブラリをUnicode文字セットでビルドして、
文字コードクラスは指定しない(=デフォのまま)ことで正しい挙動になりそう。
もちろんその場合のスクリプトはUnicodeで書く&渡す。
連投&AngelScriptと直接は関係ない話でゴメン。
0384デフォルトの名無しさん
2009/11/10(火) 09:30:35文字列長取得時にサロゲートペアのことも考慮してるようだ
他の文字コード用のも、一文字進めるとか比較とかも変えられるようにはしているようではあるが、
今のところ文字単位での文字列長取得しか違いはないようだ
0385デフォルトの名無しさん
2009/11/11(水) 11:02:15かなりの大部分を修正しないとダメだなぁ…
Squirrelは最初から対応してるみたいだけど。
0386デフォルトの名無しさん
2009/11/11(水) 22:18:49// ダウンロードしてきた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;
}
0387デフォルトの名無しさん
2009/11/11(水) 22:20:25--
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ができている。それがコンパイラ。
0388デフォルトの名無しさん
2009/11/11(水) 23:56:320389デフォルトの名無しさん
2009/11/12(木) 00:07:430390デフォルトの名無しさん
2009/11/12(木) 13:31:440391デフォルトの名無しさん
2009/11/12(木) 17:18:470392デフォルトの名無しさん
2009/11/12(木) 23:59:48There 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のような気がする
0393デフォルトの名無しさん
2009/11/13(金) 00:23:260394デフォルトの名無しさん
2009/11/13(金) 11:03:02GC無しでc++的にガチガチに使えるなら使いたい
c++は0xも控えてるしGoは微妙な位置に落ち着きそう
0395デフォルトの名無しさん
2009/11/13(金) 11:47:270396デフォルトの名無しさん
2009/11/13(金) 12:51:11最近はC++1xと呼ばれている・・・
0397デフォルトの名無しさん
2009/11/13(金) 12:52:170398397
2009/11/13(金) 13:00:170399デフォルトの名無しさん
2009/11/13(金) 18:49:470400デフォルトの名無しさん
2009/11/13(金) 19:04:49びょーん?さんのお知らせ
0401デフォルトの名無しさん
2009/11/14(土) 02:54:010402デフォルトの名無しさん
2009/11/14(土) 21:13:23GoはLinuxとMacにしか対応していません。
0403デフォルトの名無しさん
2009/11/15(日) 21:54:06Unicode対応させる場合はWindowsだけじゃダメだよね?
0404デフォルトの名無しさん
2009/11/15(日) 23:22:05#ifで切り分けるくらいはしておけばいいんじゃないか
#if (defined WIN32)
実装
#else
naiyo!!
#endif
これならWindows以外で使いたい人が中を見て、流用できそうならそうすることも出来るだろう
0405デフォルトの名無しさん
2009/11/15(日) 23:56:520406デフォルトの名無しさん
2009/11/16(月) 00:09:23上手くいけば公開しようかなと思ってる。
ただ、Windowsでしかプログラム組んでないんで、Linuxでもちゃんと動くようにするための技法とかさっぱりわからないんだ。
ちなみにShiftJIS対応は簡単だけど、Unicode対応はソースあちこちいじらないとダメなんで無理かも…
0407デフォルトの名無しさん
2009/11/16(月) 07:08:38何にも分かってないのが丸わかりだからやめておけ。
0408デフォルトの名無しさん
2009/11/16(月) 08:00:11':' ゙''" `':,
ミ ・ω・ ;,
:; . っ ,つLua!
`:; ,;'
`( /'"`∪
0409デフォルトの名無しさん
2009/11/16(月) 08:10:510410デフォルトの名無しさん
2009/11/16(月) 10:48:180411デフォルトの名無しさん
2009/11/16(月) 11:48:040412デフォルトの名無しさん
2009/11/16(月) 13:12:230413デフォルトの名無しさん
2009/11/16(月) 13:25:400414デフォルトの名無しさん
2009/11/16(月) 14:27:33そういう話じゃないんだろうけど、Windows依存の話はもう勘弁しておくれなんし
0415デフォルトの名無しさん
2009/11/16(月) 14:56:21mbcsにUTF-8そのまま突っ込んでもファイルは出来るが
望みのものにはならない訳で
0416デフォルトの名無しさん
2009/11/16(月) 15:05:360417デフォルトの名無しさん
2009/11/16(月) 17:13:46Windowsは内部的には全部 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 対応が行われる。
0418デフォルトの名無しさん
2009/11/16(月) 17:18:130419デフォルトの名無しさん
2009/11/16(月) 17:23:01OSX はさっさと直せよと思う。まじで
0420デフォルトの名無しさん
2009/11/16(月) 18:20:29サロゲートペアに対応させようとかおもった場合は手動で処理してやらんとダメです。
少なくともVS2008時点では、_tcsincやCharNextといった ポインタを進める関数がサロゲートペアをちゃんと処理してくれない
(おそらくOSがサロゲートペアに対応する前のコードとの互換性を気にしてるのだろう)
もっとも、クロスプラットフォーム名コード書くなら、CharNextとか使わずに自前で処理してるだろうけど・・・
0421デフォルトの名無しさん
2009/11/16(月) 19:20:13ここが組み込み系言語のスレな事も考えず読んでる人も多すぎ
0422デフォルトの名無しさん
2009/11/16(月) 22:46:16落ち着いて考えるんだ。
組み込みスクリプトごときでサロゲートペアが関係してくるようなややこしい話がどれくらいある?
まあ、議論自体は有意義だとは思うが。
0423デフォルトの名無しさん
2009/11/16(月) 22:52:230424デフォルトの名無しさん
2009/11/16(月) 23:33:37Squirrelはデフォでいけたが。
0425デフォルトの名無しさん
2009/11/17(火) 10:17:44UTF8はBOM有り前提とか諸々腐ってるし(VS2005までしか知らんけど)
Windows環境で作業しなきゃならんなら
gcc、devc++、エディタ、こんだけでいいよ
0426デフォルトの名無しさん
2009/11/17(火) 10:23:35お前……VisualStudioまともに使いこなせてないだけだろ?
UTF-8 BOM付きなんて使う機会ほとんどないぞ。
0427デフォルトの名無しさん
2009/11/17(火) 10:28:50つまりどっちも扱える。
0428デフォルトの名無しさん
2009/11/17(火) 10:47:43文字コードの認識に失敗する。
0429デフォルトの名無しさん
2009/11/17(火) 11:18:43BOM無しUTF-8の時 文字コードの認識に失敗するんじゃなくて、そもそも対応していないだけ
IDEでBOM無しUTF-8で保存可能なのは、ドキュメントとか編集するときのためだろうか?
0430デフォルトの名無しさん
2009/11/17(火) 23:42:083.0もbeta1になった
0431デフォルトの名無しさん
2009/11/18(水) 09:19:38色々バグ修正されてるのかな
BuildとShift-JISパッチ入れるのめんどくさいけど、今夜試してみるわ
0432デフォルトの名無しさん
2009/11/19(木) 04:33:19WEBの世界だとそれが標準だからだと思うよ>BOM無しUTF-8で保存可能
Visual Web Developper あわせの対応であって、VC はスルーされてるってことかと。
コンシューマ機が UTF-8 ベースに移ってるのでそれあわせでコード共有しようとするときに地味に困る > VC がUTF-8をまともに扱えない
BOM つけると今度は gcc がこけるんだぜ……
0433デフォルトの名無しさん
2009/11/19(木) 10:47:44サンプルはどこかにないでしょうか?
0434デフォルトの名無しさん
2009/11/19(木) 11:56:04普通にできんかったっけ?
0435デフォルトの名無しさん
2009/11/19(木) 12:37:17Lua_State *L;
〜 一回load、callして使用 〜
lua_newtable(L);
lua_setfenv(L, LUA_GLOBALSINDEX); //グローバル変数だけ初期化される?
lua_gc(L, LUA_GCCOLLECT, 0); //念のためにGCも走らせるべき?
〜 Lにまたloadして再利用 〜
0436デフォルトの名無しさん
2009/11/19(木) 18:16:260437デフォルトの名無しさん
2009/11/20(金) 08:36:36UTF-8てそもそも既存のシステムに手をなるべく加えないで動かすための文字コードじゃないのか?
よくわからんな
0438デフォルトの名無しさん
2009/11/20(金) 08:45:59外部リソースとして、入出力時にコードを調整すればいいだけのこと。
0439デフォルトの名無しさん
2009/11/20(金) 08:49:56こんなプログラミングが歓迎されるんですね
0440デフォルトの名無しさん
2009/11/20(金) 09:00:17グローバル環境テーブル全体に対する操作関数って無いのでは?
0441デフォルトの名無しさん
2009/11/20(金) 09:34:40スクリプトを読み込んだ際に特定の文字コードに変換して、内部の処理はその文字コードで統一って感じかな?
だとすると、何に変換するのがいいんだろう。UTF16?
0442デフォルトの名無しさん
2009/11/20(金) 09:47:54ネイティブに引き渡すときはUTF-16、面倒ならUCS2にするのが一番問題が少ない。
0443デフォルトの名無しさん
2009/11/20(金) 11:51:20その恩恵にあやかれるのはASCIIコードしか使ってない欧米人だけだけどな。
非ASCIIコード圏は、既存のエンコード方式と区別ができないので余計に混乱する。
全てのプレーンテキストがUTF-8に置き換わるまでの過渡期は、BOM付きUTF-8が
一番無難な選択だと思うけどね。
俺はWindows上でgccとか使わないので、FTPクライアントにBOMの有無を変換する
機能さえついてくれればあまり問題ない。
もっとも、MSは独自にBOM付きUTF-8を強行するのではなく、非ASCIIコード圏で
過渡期にはBOMが必要であることを訴えて、規格に盛り込ませるべきだと思うが。
0444デフォルトの名無しさん
2009/11/20(金) 12:26:22「ファイルの中身」自体が最大のレガシーシステム。だから UTF-8 が使われるようになってる。
日本人は一度 SJIS やら EUC やらで通った道をもっかい世界規模で通り直してるだけではある
>>438
なにが一番困るって、ファイル名中の「コメント」
コメントに日本語つかうな?ごもっとも(苦笑)
0445デフォルトの名無しさん
2009/11/20(金) 12:27:060446デフォルトの名無しさん
2009/11/20(金) 12:31:33> 全てのプレーンテキストがUTF-8に置き換わるまでの過渡期は、BOM付きUTF-8が
> 一番無難な選択だと思うけどね。
この上の記述はわかるし、それはよくわかるんだが、
実際はBOM付きでトラブることが多くて、俺は折れたわw
BOMなしで上手く行くようにすべき
0447デフォルトの名無しさん
2009/11/20(金) 12:44:29動作上は問題ないに決まってるんだから、ツールで対応できない意味がわからんってことだな。
既存エンコードと混在したのを自動判定する必然性は別にないんだから、
ツール側に「MBCSではなくUTF-8として扱う」スイッチだけつければすむことだ。
MS1社が対応するだけで世界は平和になるんだからさっさとそうしてくれってことだな
0448デフォルトの名無しさん
2009/11/20(金) 12:56:28もう手遅れ
MSがいまだにSJISを強行している時点で終わってる
0449デフォルトの名無しさん
2009/11/20(金) 13:38:56なんでそんなに視野が狭いんだろう?
ちなみにOSのロケールを英語にすると、UTF-8も無しでコンパイルが通るぞ。
0450デフォルトの名無しさん
2009/11/20(金) 13:40:420451デフォルトの名無しさん
2009/11/20(金) 13:58:43おまいあたまいいな
0452デフォルトの名無しさん
2009/11/20(金) 14:03:05L"日本語" って正しく通る?
0453デフォルトの名無しさん
2009/11/20(金) 14:12:51こりゃええわw
まともなアプリと糞アプリの違いが一目瞭然になったw
0454デフォルトの名無しさん
2009/11/20(金) 14:16:500455デフォルトの名無しさん
2009/11/20(金) 14:23:06このサイトが初めてエンコード選ばなくても
日本語で文字化けせずに表示されましたw
ほんとうにありがとうございましたw
0456デフォルトの名無しさん
2009/11/20(金) 14:24:230457デフォルトの名無しさん
2009/11/20(金) 14:41:12ブラウザの文字エンコードが正しく認識できないって、どこの田舎ものやねん……。
0458デフォルトの名無しさん
2009/11/20(金) 14:42:25cmd.exeはフォントを日本語にすれば治る
cygwinのbashはスクロールがおかしくなるが英語ロケールでインストールし直すと治るのかもしれないがやっていない
しかしいかに日本のWindowsアプリケーションが日本語=SJISで決め打ち(mbcs)しているかが良くわかるね
本来はhogehogeW()を呼ばないといけないところをhogehogeA()で済ませちゃってるんだろうな
mbcsでもSJISだとそれで動いちゃうから日本語ロケールだと気付かないし気にならないんだね
正しいプログラムの作り方についてもう一度勉強しなおす(日本のMSががんばってアナウンスする)必要があるんじゃないかな
0459デフォルトの名無しさん
2009/11/20(金) 14:47:32ああごめん
ここのことね
http://boost.cppll.jp/HEAD/libs/date_time/doc/BuildInfo.html
0460デフォルトの名無しさん
2009/11/20(金) 14:50:070461デフォルトの名無しさん
2009/11/20(金) 17:39:180462デフォルトの名無しさん
2009/11/20(金) 20:08:17lua_replace(L, LUA_GLOBALSINDEX)
ならどう?
0463デフォルトの名無しさん
2009/11/21(土) 08:14:53できました!
ありがとうございます
0464デフォルトの名無しさん
2009/11/21(土) 09:04:14キーが分からない場合に全ての項目を調べたい時のサンプルってありますか?
0465デフォルトの名無しさん
2009/11/21(土) 09:14:260466463
2009/11/21(土) 09:49:37これだけだと再使用ができないような?
このあとlua_openlibsを使っても標準ライブラリが使用できません。
Lua_Stateをcloseせずに再使用するのは大変みたいですね。
0467デフォルトの名無しさん
2009/11/21(土) 10:09:26thx
pairsやnextでなめれるんですね
0468デフォルトの名無しさん
2009/11/21(土) 10:14:16走らせたいチャンクを一旦スタックに積んで
そいつの環境を置き換えるのはどう?
0469デフォルトの名無しさん
2009/11/21(土) 10:56:34具体的なやり方が今一思いつきません。
load〜で積んだあとに空の環境に置き換えるって意味じゃないですよね?
0470469
2009/11/21(土) 11:03:04ライブラリ等のテーブルは使いまわせたらlua_Stateの再構築の
コストを減らせて、細かいスクリプトの連続呼び出しに良いのではと
考えていたんですが、Luaは変数も関数もその他色々もテーブル分けて
ないので、選択的に変数だけで消すのに無理がある気が・・・
0471デフォルトの名無しさん
2009/11/21(土) 11:04:510472デフォルトの名無しさん
2009/11/21(土) 11:52:21いや、そういう意味。走らせるチャンク毎に独自の環境を差し込む。
luaL_openlibsに関しちゃ対象がグローバル環境決め打ちのサポート関数でしかないんで
どのみち使えないんだけど、そこはチャンクの環境に差し替えるテーブルの__indexにフックかけて
グローバル環境に委譲してしまうって感じでどうか。
これならlocalをつけない変数宣言はチャンク毎の独自の環境に登録されるだけなので
グローバル環境の汚染も防げる。やってることはmodule関数と大体いっしょ。
コード書いて検証したわけじゃないのでうまくいくかは知らんw
0473デフォルトの名無しさん
2009/11/21(土) 13:01:22local metatable = { __index = _G }
local chunk = loadfile(filename)
local environment = {}
setmetatable(environment, metatable)
setfenv(chunk, environment)
--Cを使えばなんでもできるので、ダイナミックリンク禁止
environment.require = function() end
environment.package = {}
return chunk()
0475デフォルトの名無しさん
2009/11/22(日) 10:32:35それぞれのオブジェクト固有の状態を保存するために、Cプログラム側でN個のテーブルを用意する。
オブジェクトの行動を定義したluaファイルをロードしてlua_Stateインスタンスを作る。
オブジェクトはN個だが、このインスタンスは1つしか作らない(みんな行動パターンは共通なので)
で、個々のオブジェクトの状態を更新するときに、そのオブジェクトに対応するテーブルを引数にして
lua関数を呼び出し、テーブルを更新させる。
というのをやりたいのですが、N個のテーブルを作るのが「?」です。
テーブル作ってスタックに積むのはいいんですが、なんせスタックに積むわけですから、
どこかの操作で勝手にPOPされたり、消えたりしませんかね??
0476デフォルトの名無しさん
2009/11/22(日) 12:35:08そういう用途のためにレジストリとリファレンスの機構が存在する。
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 としてスタックから取得して
保持できる。概念としてはこっちのがシンプル。
0477デフォルトの名無しさん
2009/11/23(月) 03:18:07luaは組み込みに最適だと思うんですが、
lua単独でGUIを表示してゲームを作り、実行ファイル(exe)に変換はできるのでしょうか?
もしできるなら、教えてください。
ぐぐっても探すことができなかったので・・・
0478デフォルトの名無しさん
2009/11/23(月) 04:22:360479デフォルトの名無しさん
2009/11/23(月) 05:02:50そもそもこのスレで紹介されてる言語は、用途を特定しないスクリプトであって組み込んでどのように動かすかはその人次第
そういう用途なら○○ツクールやHSPにしておきなさいな
0480デフォルトの名無しさん
2009/11/23(月) 08:23:050481デフォルトの名無しさん
2009/11/23(月) 09:34:33単独exeに出来るだろ。
0482デフォルトの名無しさん
2009/11/23(月) 10:12:43その用途なら、Pythonじゃね?
0483デフォルトの名無しさん
2009/11/23(月) 12:08:150484477
2009/11/23(月) 16:28:01どうしてもluaでゲームを開発しなくてはいけない状況なのです。
ウィンドウの表示がわからないため、苦戦しています。
どの参考書を読んでも書いてなくて。
別の言語にウィンドウを作らせて、動作はLUAだけで、などでできますでしょうか?
0485デフォルトの名無しさん
2009/11/23(月) 16:30:06なんでできないと思うの?
0486デフォルトの名無しさん
2009/11/23(月) 16:38:15レスありがとう
みんなやってないし、コマンドプロンプト上か
ほかの言語に組み込むだけのものかと思いまして・・・
0487デフォルトの名無しさん
2009/11/23(月) 16:46:43こことか見てみ
Luaを主体にしたゲームエンジン作って、このサークルのソフトは殆どLuaで作られてる
それにしても、その知識量からどうしてもLuaで作らなきゃいけない状況が発生するなんて
いったいどんな大見得切ったんだよ
0488デフォルトの名無しさん
2009/11/23(月) 16:53:23あくまで組み込みスクリプトなんだよ?
ウィンドウズを表示するという関数を組み込んでもらって、
Luaにインターフェース提供してもらわないとprintやscanすらままならないよ
ゲーム開発でスクリプタとして働くのならLuaの言語仕様を覚えるのと、PGからバインドした関数一覧もらってこれば良いよ
0489デフォルトの名無しさん
2009/11/23(月) 17:00:01正直、大学のゼミでこの言語を使うということに決めたんです
いくつもある言語から選んで、luaを選んだのは自分だけ。
頼る人もいないので、本とネットで勉強してるかんじです。
>>487
サンプルをdlして参考にしていますが、難しい。
もっとじっくり読んでみます。
>>488
用途は理解しているつもりですが、これをメインにしてプログラムを組んでいかなくてはいけなくて・・・
やはり、ウィンドウを表示する関数をCなどで書いて、luaからその関数を持ってくることが一番楽なんですかね。
0490デフォルトの名無しさん
2009/11/23(月) 17:11:31もっと詳しくて質問できる奴のいる言語で
最初からやり直す方がましのような気がする。
0491デフォルトの名無しさん
2009/11/23(月) 17:13:36それはしたくないというか、結構この言語は気に入っているので辞めたくないんですよ
0492デフォルトの名無しさん
2009/11/23(月) 17:17:170493デフォルトの名無しさん
2009/11/23(月) 17:18:290494デフォルトの名無しさん
2009/11/23(月) 17:26:23> やはり、ウィンドウを表示する関数をCなどで書いて、luaからその関数を持ってくることが一番楽なんですかね。
Lua を使うと言って、こういったバインド系の作業はしたくないとか、意味がわからん。
もともとそうやって使う言語だろうに。
「みんなやってない」とか言ってるが、何個のプロジェクトを見て言ってるのか怪しいもんだ。
0495デフォルトの名無しさん
2009/11/23(月) 17:26:36ゲーム用のC/C++ライブラリを組むのが最低10倍〜ぐらい手間も時間かかるよ
Win32APIからDirectXかOpenGLまで使えるようにならないと話にならない
ゲームライブラリは既存のものでいいならC素人ならDXライブラリを組み込むのが多分もっとも最短だと思う
ゼミテーマが「組み込みスクリプト研究」で実例として「ゲーム」を選んだのなら、外部ライブラリにどっぷり頼っていったほうが幸せだとは思う
0496デフォルトの名無しさん
2009/11/23(月) 17:27:39無理せず諦めておけよ
0497デフォルトの名無しさん
2009/11/23(月) 17:33:10つまりAngelScriptがいいって事ですね。
わかります。
0498デフォルトの名無しさん
2009/11/23(月) 17:42:29ちょっと上ならともかく分不相応すぎ。諦めろ
0499デフォルトの名無しさん
2009/11/23(月) 17:48:07(答える奴はどうせこのスレも見てる)
0500デフォルトの名無しさん
2009/11/23(月) 18:23:450501デフォルトの名無しさん
2009/11/23(月) 21:35:31スクリプト言語による効率的ゲーム開発 C/C++へのLua組込み実践
http://www.amazon.co.jp/dp/4797348550
サポートページ
http://lua.mine.nu/w/LuaBookSupport
どうなんだろうなあ。
0502デフォルトの名無しさん
2009/11/23(月) 21:46:36Luaでルーチンいじれるゲームとかゲームエンジンとかあるけど
日本語の資料があんまりないと思う
0503デフォルトの名無しさん
2009/11/24(火) 10:46:49http://luaforwindows.luaforge.net/
これいっこダウンロードしてインストールすれば、
GUI から OpenGL から DB 接続までなんでもはじめから入ってるよ。
ウィンドウ作る程度なら、サンプルそのまま使える。
0504デフォルトの名無しさん
2009/11/25(水) 07:48:34// .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;
}
0505デフォルトの名無しさん
2009/11/25(水) 07:49:39// 必要ファイル: 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);
}
0506デフォルトの名無しさん
2009/11/25(水) 14:11:52//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)を経由させる方法しか思いつかなかったのですが、ダイレクトに
渡す方法は無いものでしょうか?
0507506
2009/11/25(水) 14:14:17A a;
ptr = &a;
luabind::module(L) [
luabind::def("ref", &ref),
luabind::class_<A>("A")
.def_readwrite("x", &A::x)
];
0508デフォルトの名無しさん
2009/11/25(水) 17:56:070509デフォルトの名無しさん
2009/11/26(木) 09:43:190510デフォルトの名無しさん
2009/11/26(木) 10:10:30Lua側でioで記録、読み込みするコード書くしかないかも
0511デフォルトの名無しさん
2009/11/26(木) 10:18:510512デフォルトの名無しさん
2009/11/26(木) 11:32:21言語機能としてはないので、無理やりやることになる。
一応こういうのはあるけど、安定してるかどうかは不明。
http://lua-users.org/wiki/PlutoLibrary
0513デフォルトの名無しさん
2009/11/26(木) 13:19:28試してみましたが、luabindではligthuserdataではなくuserdataを使用して
独自の型ID等を付加してチェックしているようで、無理でした。
luabindのソースを追ってみたところ、luabind::detail::convert_to_luaで
C++側の変数の参照をluaのスタックに積めることが分かったので、
これでどこかのテーブルに置くとか引数で渡すとかの方法が使えそうです。
luabindのドキュメントにもサンプルにも、こういったスタックを使う方法が
記載されていないので、本来の使い方とは違う気もしますが。
0514デフォルトの名無しさん
2009/11/26(木) 13:24:32通常、スクリプトにはC++クラス型のインスタンスのポインタを渡してポインタで操作させる。
C++の参照はC++固有の機能なので他の言語では使えないと考えたほうがいい。
別の変数に代入した瞬間(参照で無く実体のコピーとして)にコピーコンストラクタが発動したって文句言えないぞ。
まあバインダがエラー吐いてコンパイルの段階で失敗すると思うが。
0515デフォルトの名無しさん
2009/11/26(木) 13:29:570516デフォルトの名無しさん
2009/11/26(木) 14:09:30bind側に参照を渡した場合は、ポインタに変換して管理してるみたいですね。
0517デフォルトの名無しさん
2009/11/27(金) 08:47:27ありがとうございます。
Pluto調べてみます。
0518デフォルトの名無しさん
2009/11/28(土) 09:36:22お前ら優しすぎw
0519デフォルトの名無しさん
2009/11/28(土) 10:21:520520デフォルトの名無しさん
2009/11/28(土) 11:31:330521デフォルトの名無しさん
2009/11/28(土) 12:02:53逆にやり難いと感じる俺
0522デフォルトの名無しさん
2009/11/28(土) 12:11:48大半を組み込み言語化した結果、パフォーマンスの壁にぶちあたって
機能分離可能なところはどんどんC++化していく、ってのが定番だとオモ
サンプル:俺
0523デフォルトの名無しさん
2009/11/28(土) 12:45:05オレもスクリプトでゲーム開発環境を一通り書き上げたところだが、
60フレームまわしたらそれだけで意外にCPU食ってしまうので、ちと困ってる。
最低ラインがPentium 4 2.4GHzくらいになった。
0524デフォルトの名無しさん
2009/11/28(土) 14:49:37穴場だから誰か作れば
有名になれるかもよ
0525デフォルトの名無しさん
2009/11/28(土) 15:10:52すでにあるっちゅうねん。
.NET Framework向けだがな。
0526デフォルトの名無しさん
2009/11/28(土) 15:54:13駄目じゃん
0527デフォルトの名無しさん
2009/11/28(土) 16:18:55もし作るならスクリプトで定義したクラスのインスタンスがC++から簡単に作れて、マルチスレッドとか使って同時に複数のインスタンスを参照してもおかしくならない仕様にしたいな
0528デフォルトの名無しさん
2009/11/28(土) 16:46:03ただしやり方は不明。
0529デフォルトの名無しさん
2009/11/28(土) 18:52:020530デフォルトの名無しさん
2009/11/28(土) 19:09:510531デフォルトの名無しさん
2009/11/28(土) 19:18:300532デフォルトの名無しさん
2009/11/29(日) 13:59:21別にソースファイル名、行番号を収集する場合なんですが、
lua_getstackのレベル指定で、1から++しながら順にたどって
最初にcurrentlineの値が-1以外になったレベルがソースファイルの
階層と判断して問題ないでしょうか?
0533デフォルトの名無しさん
2009/11/29(日) 15:45:530534デフォルトの名無しさん
2009/11/29(日) 17:27:09v.(v ,〜 に展開される。
例: v:open(arg) -> v.open(v, arg)
0535デフォルトの名無しさん
2009/11/29(日) 17:53:430536デフォルトの名無しさん
2009/11/29(日) 18:04:12使用言語: R
f <- function (n) {substr("abcdefghijklmnopqrstuvwxyz",1,n)}
> f(6)
[1] "abcdef"
> f(30)
[1] "abcdefghijklmnopqrstuvwxyz"
0537デフォルトの名無しさん
2009/11/29(日) 18:06:04書くところを間違えました。
ごめんなさい。
0538デフォルトの名無しさん
2009/11/29(日) 18:06:48v:member(arg) -> v.member(v, arg) -> v[menbe](v, arg)
0539デフォルトの名無しさん
2009/11/29(日) 18:09:230540デフォルトの名無しさん
2009/11/29(日) 18:17:00じゃあメンバアクセスのたびにマップ検索してんのか
遅くならないのかな
0541デフォルトの名無しさん
2009/11/29(日) 18:28:370542デフォルトの名無しさん
2009/11/29(日) 18:31:42そりゃ勿論遅いだろうさ
0543デフォルトの名無しさん
2009/11/29(日) 18:41:44変数名からなにから全ての識別子の判定で毎回どこかのテーブル見てるはず。
0544デフォルトの名無しさん
2009/11/29(日) 18:59:47カスペルスキー系の誤検出のはず。
bin2cとか別に普段使うものでもないから削除しておいても良いかと。
0545デフォルトの名無しさん
2009/11/29(日) 19:20:09ローカル変数は実行時はテーブル見ない。例えば、
local a = b * c + d
を
local a = b * c
a = a + d
に変えても速さは変わらない。
0546デフォルトの名無しさん
2009/11/29(日) 19:37:56ありがとうございます安心しました
0547デフォルトの名無しさん
2009/11/29(日) 23:33:250548デフォルトの名無しさん
2009/11/30(月) 22:05:16lua_registerで登録した関数を呼び出すときには新しいスタックが毎回生成される、したがって
Glue関数内部ではlua_gettopでスタックの数を確認する必要なしにスタックの1番目が最初の引数、2番目が・・・としてよい
同様に、返り値もスタックの1番目が最初の返り値、二番目が・・・としてよい(何も考えずにスタッククリアして返り値を積めばいい)
これは正しいですか?
0549デフォルトの名無しさん
2009/12/01(火) 00:52:460550デフォルトの名無しさん
2009/12/01(火) 06:17:28ActionScript 3.0 がそっちのほうを目指しているんじゃないかな。
いちおう Flex SDK はオープンソースらしいから、
自分のプログラムに組み込むこともできるかも。
>>540
Lua Performance Tips
http://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
0551デフォルトの名無しさん
2009/12/01(火) 21:46:3410進数で書かれた文字列、たとえば「\130\160\130\162\130\164」は
Lua上で「あいう」となりますが、外部ファイルに記述したものを
io.linesで取り出したものだと、コード列が返ってきてしまいます。
これを通常の文字列に変換したものとして使いたいのですが、どうしたらいいのでしょうか。
0552デフォルトの名無しさん
2009/12/01(火) 21:50:08ありがとうございます
0553デフォルトの名無しさん
2009/12/01(火) 22:20:40多分C側でバイナリに変換しないとダメじゃないだろうか。
Luaの標準ライブラリでももしかしたら出来るかもしれないが、
Cの方がてっとり早いだろう。
0554デフォルトの名無しさん
2009/12/01(火) 23:27:17どっちも知識なしだったらSqから勉強でいいのだろうか
0555デフォルトの名無しさん
2009/12/01(火) 23:54:06どちらも汎用スクリプトだから処理系単体ではどちらがよりゲーム向けということはない。
周辺ライブラリやバインダの入手性や使い勝手の差はあると思うけど。
0556デフォルトの名無しさん
2009/12/02(水) 01:51:00速度がLua>Sqで結構大差あったりするんで
ttp://ja.wikipedia.org/wiki/Squirrel
のLuaとの違いに強い魅力を感じるんでなければLuaがオススメ。
特に知識なしなら、Luaのほうが日本語資料が充実してるんで勉強しやすいかと思う。
0557デフォルトの名無しさん
2009/12/02(水) 02:00:160558デフォルトの名無しさん
2009/12/02(水) 08:15:390559デフォルトの名無しさん
2009/12/02(水) 09:41:130560デフォルトの名無しさん
2009/12/02(水) 11:48:28loadstring をつかえばできるよ。
local str = "\130\160\130\162\130\164" -- io.lines で取り出した文字列
local decode = loadstring("return \"" .. str .. "\"")
print(decode())
0561デフォルトの名無しさん
2009/12/02(水) 15:29:08コンパイラがOSロケールに依存してるから英語にしましょうなんて愉快すぎるわ
他のロケール依存アプリ全部道連れにする方法なんぞ万人に薦められんだろ
0562デフォルトの名無しさん
2009/12/02(水) 16:39:37なぜ全部とか間抜けな話になるのか、頭の悪い奴の考えはさっぱり分からん。
0563デフォルトの名無しさん
2009/12/02(水) 16:40:530564デフォルトの名無しさん
2009/12/02(水) 18:39:010565デフォルトの名無しさん
2009/12/02(水) 18:47:34自分はマルチスレッドにしてるんだけど、WM_CLOSE受けたときに
スクリプトが走ってたら、スレッド他殺していいものなのかどうか。
0566デフォルトの名無しさん
2009/12/02(水) 18:57:220567デフォルトの名無しさん
2009/12/02(水) 19:00:150568デフォルトの名無しさん
2009/12/02(水) 19:16:24Luaだと、Lua_yieldでスクリプトの処理を一時停止させて次のスクリプト、という感じではダメなの?
0569デフォルトの名無しさん
2009/12/02(水) 19:43:490570デフォルトの名無しさん
2009/12/02(水) 22:23:100571デフォルトの名無しさん
2009/12/03(木) 00:38:27スクリプトは入力待ち(マウス等)で関数無いで停止することがあって、
その間にメッセージループ側にWM_CLOSEとか来た場合にどうやって
終了させるかで色々迷っている、と。
スクリプトで割り込みを意識するような書き方は手間なので、
スレッドごと落とせると楽なんだけど、lua_Stateってスレッドごと
落とした後にlua_closeに渡して大丈夫なのか?ってのが疑問な
わけですよ。
lua_call系にステップ実行があると良かったんですがね。
ステップ数も指定できたりするのが。
0572デフォルトの名無しさん
2009/12/03(木) 09:26:27スレッドを強制終了したら、基本的に何が起こってるか不明というか
たとえばガベコレの途中だったりしたら(その他でもあらゆる不明な原因で)
異常な状態になるからやめたほうが良い。
手段としては、別スレッドのほうの処理をコルーチンで構成しておいて、
コルーチンがyieldしたタイミングでコルーチン呼び出し側のコードで
終了チェックするようにする。
あとウエイトが絡む関数については、待ちループで終了チェックをするようにして、
終了フラグが立っていたらyieldを起こすようにする。
とかそんな感じじゃないの。
0573デフォルトの名無しさん
2009/12/03(木) 09:30:46無限ループ防止という観点では、デバッグフックで1行実行ごとに関数呼ばせて、
その中でカウンターアップしていって、カウンターが一定の数になったらyieldとかいう手もある。はず。
0574デフォルトの名無しさん
2009/12/03(木) 11:24:54メッセージ処理の待ちの間、具体的には
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でスクリプトを呼び出せばいいような気がする。
0575デフォルトの名無しさん
2009/12/03(木) 11:28:06他のスレッドはいきなり殺したらあかんでしょ。
メインスレッドからフラグたてて、よしなに自殺
0576デフォルトの名無しさん
2009/12/03(木) 11:29:490577デフォルトの名無しさん
2009/12/03(木) 11:44:10(before)
入力待ち(マウス等)で関数内で停止する
(after)
yieldを使い、外で停止する
入力が来たらresumeで関数内に戻る
WM_CLOSEが来たらresumeしないまま終了
0578デフォルトの名無しさん
2009/12/03(木) 12:59:28まあ、lua (ないしは squirrel) なら、yield のタイミングで同期を
とるようなコードにしておくのが無難ってのはその通りだと思われ
0579デフォルトの名無しさん
2009/12/03(木) 20:42:03なるほど、それならステップ実行できますね。
>>他のレスくれた方々
具体的に書いた例だとマルチスレッドになってるけど、根本は
WindowsでLua使うときにメッセージ処理をどうしてるかって話ですから。
避けて通れないだろうから、実際に組み込んでる方々はどう対処してるかが
気になったもので。
0580デフォルトの名無しさん
2009/12/03(木) 22:32:02シングルスレッドモデルで組んであれば処理の流れ的に問題になるようなことは別にない
あとはオブジェクトをどう管理してるかの問題。
ウインドウのインスタンスを lua 配下にしてある(生成もlua側から)なら、それぞれのウインドウの
メッセージ処理部から、lua でのインスタンスの適当なメソッド (onCloseとか) をイベント的に callback
させて閉じるかどうかをスクリプト側に判定させればいいだろう
ウインドウのインスタンスがグローバルなら、lua 側も同様に
グローバルメソッドをイベントとして呼び出して判定させるように組めばいい
0581デフォルトの名無しさん
2009/12/04(金) 18:14:290582デフォルトの名無しさん
2009/12/04(金) 18:28:07なんか可愛いな
0583デフォルトの名無しさん
2009/12/04(金) 18:39:34結構読みやすいよ。
あと、WIPのtest_featureに入ってるサンプルもわかりやすい。
0584デフォルトの名無しさん
2009/12/04(金) 20:37:590585デフォルトの名無しさん
2009/12/04(金) 21:19:06>>347
0586デフォルトの名無しさん
2009/12/04(金) 21:19:32>>347
0587デフォルトの名無しさん
2009/12/04(金) 21:20:210588デフォルトの名無しさん
2009/12/04(金) 21:46:450589デフォルトの名無しさん
2009/12/04(金) 21:49:360590551
2009/12/04(金) 21:52:36回答が遅くなってすみません。
>>560さんの方法で望みの動作になりました。
お二方とも、本当にありがとうございました。
0591デフォルトの名無しさん
2009/12/04(金) 23:34:54tolua++を使えばいいと思います。
ttp://lua.mine.nu/w/LuaBookSupport
0592デフォルトの名無しさん
2009/12/04(金) 23:36:010593デフォルトの名無しさん
2009/12/04(金) 23:46:070594デフォルトの名無しさん
2009/12/04(金) 23:49:03ポインタ渡せないとオブジェクトの操作ができないジャマイカ
0595デフォルトの名無しさん
2009/12/04(金) 23:49:500596デフォルトの名無しさん
2009/12/05(土) 00:06:500597デフォルトの名無しさん
2009/12/05(土) 00:21:15--a.lua
local v = 1
local function f()
print(v)
end
fv = f
--b.lua
fv()
結果
1
感じになるんだが、関数の実体もガベコレされてるのかな?
関数内で使ってるlocal変数もコピーかリファレンスを持つことになると?
0598デフォルトの名無しさん
2009/12/05(土) 00:32:19Luaはよく知らないが、単にグローバル変数を
2つのスクリプトで共有してるだけなんじゃね?
0599デフォルトの名無しさん
2009/12/05(土) 05:19:56fv が f をつかんでいる間はつねに f のなかから v が参照可能だよ。
Lua の関数も参照されなくなればもちろんガベコレされる。
> 関数内で使ってるlocal変数もコピーかリファレンスを持つことになると?
Lua ではこういう変数のことを upvalue と呼んでますが、
必要に応じてスタックからヒープへコピーされるみたい。
http://www.lua.org/docs.html
ここにある The implementation of Lua 5.0 っていう論文に、
イラストつきで説明があります。
0600デフォルトの名無しさん
2009/12/05(土) 06:44:46完全な回答をありがとう。凄くすっきりしました。
この辺の仕様はとても良くできてるなと思いますね。
0601デフォルトの名無しさん
2009/12/05(土) 07:34:580602デフォルトの名無しさん
2009/12/05(土) 08:39:50そう。レキシカルクロージャです。
0603デフォルトの名無しさん
2009/12/05(土) 11:28:25Schemeライクというか。
0604デフォルトの名無しさん
2009/12/05(土) 12:22:260605デフォルトの名無しさん
2009/12/05(土) 14:12:22スクリプト言語Luaの高速化と省メモリ化 (2009年度上期未踏ユース)
http://www.ipa.go.jp/jinzai/mitou/2009/2009_1/youth/gaiyou/sk-3.html
hogelog/lua (ソースコード)
http://github.com/hogelog/lua
[lua]記事一覧 - hogeなlog (開発者ブログ)
http://d.hatena.ne.jp/hogelog/archive?word=*%5Blua%5D
0606デフォルトの名無しさん
2009/12/05(土) 15:06:08エエー、あんな古臭い言語を今更高速化するのが予算つくのか。
LuaJITだってあるのに。
0607デフォルトの名無しさん
2009/12/05(土) 15:20:440608デフォルトの名無しさん
2009/12/05(土) 17:15:48ところがLuaJITのGCにはあんま手が入ってはいないんだ。
0609デフォルトの名無しさん
2009/12/05(土) 17:41:58ローカルなスクリプト言語
高速化してたら切りが無いぞ
0610デフォルトの名無しさん
2009/12/05(土) 17:43:190611デフォルトの名無しさん
2009/12/05(土) 17:45:530612デフォルトの名無しさん
2009/12/05(土) 17:56:480613デフォルトの名無しさん
2009/12/05(土) 18:10:43文法のことならSquirrelとかPythonがある程度近いと思うがそのまんまってのはたぶんない
0614デフォルトの名無しさん
2009/12/05(土) 18:14:430615デフォルトの名無しさん
2009/12/05(土) 18:17:18C++だけど、CINT
0616デフォルトの名無しさん
2009/12/05(土) 23:16:350617デフォルトの名無しさん
2009/12/06(日) 08:17:060618デフォルトの名無しさん
2009/12/06(日) 08:25:09それだったらGoのほうがいいんじゃ。
0619デフォルトの名無しさん
2009/12/06(日) 11:33:150620デフォルトの名無しさん
2009/12/07(月) 11:25:540621デフォルトの名無しさん
2009/12/07(月) 11:32:150622デフォルトの名無しさん
2009/12/07(月) 11:34:230623デフォルトの名無しさん
2009/12/07(月) 17:37:44これってたまに見かけるが、Cってそんなに書きにくいか?
0624デフォルトの名無しさん
2009/12/07(月) 17:49:32慣れだよ
0625デフォルトの名無しさん
2009/12/07(月) 17:56:34文字列操作がめんどいことにあって、構文や文法自体はそんなに書きにくくは
ないよね。Cが書きにくいなら、JavaがあそこまでCを引き継いだような仕様には
なってないと思う。
# でもまぁCが書きにくいと主張する人は、JavaはCから書きにくさを継承したと
# 主張するか。
0626デフォルトの名無しさん
2009/12/07(月) 18:04:16・クロージャがない
・ガベージコレクションがない
・メモリアクセス保護がない
・文字列型がない
・というかコレクション型が一切ない
・というかforeachがない
・せめてイテレータくらい付けて
・関数オブジェクトの定義が面倒(定義と関数ポインタの扱いが別)
・というかファーストオブジェクトになってない
とまあ、仮にオブジェクト指向でなかったとしてもこれくらいあるわけだ。
0627デフォルトの名無しさん
2009/12/07(月) 18:06:450628デフォルトの名無しさん
2009/12/07(月) 18:10:140629デフォルトの名無しさん
2009/12/07(月) 20:04:32当時のスペックのコンピュータで動かすためにキモイ仕様にしてるから書きづらくて当然。
0630デフォルトの名無しさん
2009/12/07(月) 21:35:500631デフォルトの名無しさん
2009/12/07(月) 21:57:19ふーん……。
D言語とかOCamlとかHaskellは触ってみたことあるの?
0632デフォルトの名無しさん
2009/12/07(月) 22:09:32蓋をしないネイティブ系・組み込み系は邪道だな
0633デフォルトの名無しさん
2009/12/07(月) 23:16:450634デフォルトの名無しさん
2009/12/07(月) 23:20:52怖いものみたさor言われるままに蓋を開けて
自分の足を撃つのがITの正道
0635デフォルトの名無しさん
2009/12/08(火) 12:43:40テンプレートでほら、関数型言語っぽいプログラミングも可能になる!!!
とか言われてもぶっちゃけあれキモいんだけど実際のところどうなの?
0636デフォルトの名無しさん
2009/12/08(火) 12:51:44キモいと思わない人はいないんじゃないかと。
0637デフォルトの名無しさん
2009/12/08(火) 13:51:30いいネイティブの別言語ができたらそっちに乗り換える。
0638デフォルトの名無しさん
2009/12/08(火) 13:57:23そういうのは、ラッパーライブラリひとつで解決できる話なのさー。(他言語対応)
ただし動作検証用のコードは一部C++で用意しとかないといけないと思うが。
0639デフォルトの名無しさん
2009/12/08(火) 14:01:280640デフォルトの名無しさん
2009/12/08(火) 15:47:16boost::lambdaを使いこなしてない奴はC++を理解していない(キリッ
0641デフォルトの名無しさん
2009/12/08(火) 20:17:26あれはその、なんていうかキモかわいい。
0642デフォルトの名無しさん
2009/12/08(火) 21:15:090643デフォルトの名無しさん
2009/12/08(火) 21:42:400644デフォルトの名無しさん
2009/12/08(火) 21:54:010645デフォルトの名無しさん
2009/12/09(水) 05:14:240646デフォルトの名無しさん
2009/12/09(水) 08:05:54\ ヽ ) ) \\ \\
( \ \∩___∩ \\
\ \ ⌒⌒| ノ ヽ \\
\ \ / ● ● ト、\ \\\
\ Y | ( _●_) ミ\ \\\
\ / 彡、_ |∪| ノ \ \\\
(____)―ヽノ' ヽ  ̄ ̄ ヽ\\
\, j l l .l }
Lua! l (_ノノノノ
0647デフォルトの名無しさん
2009/12/09(水) 11:00:26お前、なにかよさげなライブラリある度にラッパー作ってたDelphi使いの俺をなめるなよ。
さすがにもう嫌になってDelphi使ってないわ(´・ω・`) 昔は良い言語だったんだが
0648デフォルトの名無しさん
2009/12/11(金) 09:36:150649デフォルトの名無しさん
2009/12/12(土) 02:30:59luaでテキストから文字を読み込んで使いたいのですが、
そのあとに文字入力のために同じ関数(io.read)を使うと文字入力できなくなってしまいます。
文字読み込みのio.readと、キーボード入力のio.readの区別をつけるにはどうすればいいのでしょうか?
よろしくお願いします。
0650デフォルトの名無しさん
2009/12/12(土) 02:34:200651デフォルトの名無しさん
2009/12/12(土) 05:21:19それとも標準入力?
0653デフォルトの名無しさん
2009/12/14(月) 14:27:50これってコンパイル済み(.amx)ではなくて
普通のPawnファイル(.p)も実行出来ます?
0654デフォルトの名無しさん
2009/12/14(月) 15:13:42スレ汚しすみません
0655デフォルトの名無しさん
2009/12/14(月) 19:25:170656デフォルトの名無しさん
2009/12/14(月) 19:26:52Cの組み込みで使おうと思っているのだけれど、Cはコンパイルすれば自動的にソースは見えなくなってくれるからおk。
けど、Luaファイルで記述した部分がもろばれになってしまうので、どうにかならないかなぁということです。
0657デフォルトの名無しさん
2009/12/14(月) 19:43:000658656
2009/12/14(月) 20:47:13http://blog.dlixia.com/index.php?UID=1243877250
こんな感じなのか。
なんとなくだけど、Luaは簡単にリバースエンジニアリングできそうな予感がするな。。。
まぁ及第点はあるよね、きっと。
ありがとう!
0659デフォルトの名無しさん
2009/12/14(月) 23:07:40ユーザー多いし、資料多いし。
って思ったら、処理系実装が軒並みLGPLとかMPLとか・・・・
0660デフォルトの名無しさん
2009/12/15(火) 00:00:39そのメモリの内容をコンパイル、もしくはバイナリ読み込みするようにすればいいと思う。
0661デフォルトの名無しさん
2009/12/15(火) 00:34:42CRIScriptとかはどうなんだ?
BSD風ライセンスらしいが
0662デフォルトの名無しさん
2009/12/15(火) 00:35:060663デフォルトの名無しさん
2009/12/15(火) 02:36:52どうなんだろ、使用感を聞いたことがない。
あれ、主開発者がApple行っちゃったけど大丈夫かな、CRIなのにww
いや、すごく期待はしてるんだよ
0664デフォルトの名無しさん
2009/12/15(火) 03:14:130665デフォルトの名無しさん
2009/12/15(火) 05:28:35はじめ言っていることが良くわからなかったんだけど、いまわかった。
http://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() を使えば良いんじゃないかな?
0666デフォルトの名無しさん
2009/12/15(火) 10:54:38ソース汚くて処理系によってはエラー続出で修正必須、もうやだ
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意味が分からない、資料少なすぎ助けて・・・・
0667デフォルトの名無しさん
2009/12/15(火) 10:57:56Pawn ファイルで include <###> をしていない物は正常に実行出来た
0668デフォルトの名無しさん
2009/12/15(火) 12:14:25変なところで敷居上げてる気はするな
敷居を下げる配慮をした結果なのだろうとは思うが
0669デフォルトの名無しさん
2009/12/15(火) 12:47:310670デフォルトの名無しさん
2009/12/15(火) 14:54:37イギリス英語だと「スクウィール」のようです。
0671デフォルトの名無しさん
2009/12/15(火) 15:21:23削っても動作に影響ないファイルとかあります?
0672デフォルトの名無しさん
2009/12/15(火) 16:48:46パーサー部分は削った?
参考→Lua書庫内etc/noparser.c
0673デフォルトの名無しさん
2009/12/15(火) 17:42:19今、C++のクラスをバインドしているんですが、分からないことになりました。
あるクラスAがあってそのクラスのインスタンスからgetB()でクラスBのインスタンスを取得できるとします。
で、そこまでは
a<-A();
b<-a.getB();
とすることでbには[instance]が入っているのを確認できました。クラスBもバインド済みです。
しかし、そこからbにたいしてBのメンバを呼ぼうと思っても呼び出せません。以下がエラーです。
AN ERROR HAS OCCURED [the index 'draw' does not exist]
バインドするときに戻り値が何型であるかを設定する方法があるんでしょうか?
0674デフォルトの名無しさん
2009/12/15(火) 20:37:30して squirrel のインスタンスとしての構造を作ったものに sq_setinstanceup したものを返す必要があるんだがそうしてるかい?
0675デフォルトの名無しさん
2009/12/15(火) 21:07:46してませんでした。> createinstance
使い方が分からん・・・
0676デフォルトの名無しさん
2009/12/15(火) 22:40:50static 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;
}
0677デフォルトの名無しさん
2009/12/15(火) 23:30:53ゲーム作ってるんだけど、1fps≒16msの間にpcall呼びまくったりしても大丈夫かな。
ざっと3000回ぐらい。
0678デフォルトの名無しさん
2009/12/15(火) 23:43:58sq_getclassでクラスをスタックに
sq_createinstanceでそのクラスのインスタンスを作成し、スタックへ
sq_setinstanceupでユーザーポインタをインスタンスにセット
と思ったんだが、最初のsq_getclassでどうやれば返り値のクラスを取得できるんだ・・・
0679デフォルトの名無しさん
2009/12/15(火) 23:56:210680デフォルトの名無しさん
2009/12/15(火) 23:57:020681デフォルトの名無しさん
2009/12/16(水) 01:05:04主要なバインダには該当コードあるんだからそれを探して読もうよ。
sq_getclass はインスタンスのクラスを取得するもの。sq_createinstance をする場合に
参照するクラスはあらかじめわかってるんだから、C側で参照を保持しておくか、
あるいは global から名前指定しで取り出して使う
0682デフォルトの名無しさん
2009/12/16(水) 10:10:40それはどうやれば良いですか?
noparser.c でググったのだけど
ファイルサイズが削れるだけの説明ばかりで
0683デフォルトの名無しさん
2009/12/16(水) 14:42:20PCのスペックも環境も書いてないのにそんな話しても無駄だが、
最近のPCで本当にただpcall呼ぶだけなら3000回くらい平気じゃないかね。
0684デフォルトの名無しさん
2009/12/16(水) 14:43:41コンパイル済みのスクリプトしか読ませないの前提でパーサ削除しろって話じゃないかね。
0685デフォルトの名無しさん
2009/12/16(水) 17:03:32(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
0686デフォルトの名無しさん
2009/12/16(水) 17:10:520687デフォルトの名無しさん
2009/12/16(水) 17:18:42最適化でごっそり無かったことにされるから気をつけろ。
0688デフォルトの名無しさん
2009/12/16(水) 17:33:310689デフォルトの名無しさん
2009/12/16(水) 17:44:46あるあるww
最初測ったら0秒だったよ
今回はLuaの1/15くらいだからこんなもんでしょ
あと、rubyをコケにしてるような書き方になってしまった
あれは便利さ重視だからスピードは二の次
rubyユーザーごめん
引き合いに出したのは、自分がよく使ってて、一応組み込めるから。
0690デフォルトの名無しさん
2009/12/16(水) 17:48:38とにかく意味が無い例であるのはたしか。
0691デフォルトの名無しさん
2009/12/16(水) 20:15:55たぶんこんな感じかな。テストしてないので動作するか分からないけど
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);
0692デフォルトの名無しさん
2009/12/16(水) 20:57:00作りにもよるけどたいていは sq_setreleasehok 処理も必要
0693デフォルトの名無しさん
2009/12/16(水) 21:08:29ん?sq_setreleasehookってコンストラクタの中じゃないの?
0694デフォルトの名無しさん
2009/12/16(水) 21:46:22sq_createinstance はまさに構築済みの C++オブジェクトをラップして返すために
あるもので、squirrel のコンストラクタをよばない。
普通のコンストラクタは中で C++のインスタンスを new してるから、
呼んでしまうと余分なC++インスタンスがつくられる上に、さらに
別のインスタンスを sq_setinstanceup した時点でリークしちゃうからね。
で、よばれないから、たいていコンストラクタでやってるはずの
sq_setreleasehook は別途必要になる
0695デフォルトの名無しさん
2009/12/16(水) 22:27:12おおっ、なるほどな。
良く見たら自分のメモリ開放できてなかったわ^^;)
0696デフォルトの名無しさん
2009/12/17(木) 00:22:06勉強になりました。が、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*をセットする
なんか、他の部分も怖くなってきました。リファレンスだけじゃわかりませんね。
0697デフォルトの名無しさん
2009/12/17(木) 00:34:19Rubyて感覚的には30分走らせる代わりに10分でコード書く。C言語は1時間でコードかくかわりに1分で走らせるとか、比喩があったなw
0698デフォルトの名無しさん
2009/12/17(木) 09:54:340699デフォルトの名無しさん
2009/12/17(木) 10:16:120700デフォルトの名無しさん
2009/12/17(木) 11:05:57記述自体はそれであってるけど、sq_setreleasehook するのは sq_setinstanceup が成功したのを確認した後でしょう。
終了時あぼんは、そりゃどっかプログラムが悪いんだろうとしか言えない。
その b->getGraphics() でとった Graphics が勝手に独自に解放されて大丈夫な構造で作られて
ないのなら setreleasehook してはダメ、って、&つけてるってことはメンバ変数か。それはダメかも
C++で管理を単純化するために、親が責任もって解放してるので、子オブジェクトは
ポインタ参照したあともそのまま放置したのでOK、という書き方は実際よくあって、
そういったものをsquirrel に移すときは、子オブジェクトにポインタ渡してオブジェクトとして
作るけど sq_setreleasehook はしないという書き方にする必要がもちろんある。
親が先に死んだ状態で子をさわるとポインタ腐ってるのでクラッシュするけど
それはそういうもの。squirrel は機構は提供してくれるけど、自動で判断してくれるわけでは
ないから、あくまで C++ 的に破綻しないように注意して書く必要がある。
そういうのいやならオブジェクトを全体的にリファレンスカウント
方式とかで管理するようにするしかない。
そして循環参照トラップにはまるw
0701デフォルトの名無しさん
2009/12/17(木) 11:44:13もっとも、squirrel 自体がリファレンスカウントもGCも弱参照ももってるから、
既存ライブラリを持ってくるのではなく最初から書くのなら、C++ 側を
squirrelの機構にべったりのっかるように書くという考え方もある。
個別のオブジェクトはごく単純にバインドするようにして、C++ 側でオブジェクトの親子構造を持つ場合は、
C++そのもののポインタではなく、squirrel のオブジェクトを一旦作ってそれを HSQOBJECT で持つようにする。
さらには、配列や辞書が必要なら、STL とかを使うのではなく、squirrel の array / dictionary を使う。
C++ 側で元のオブジェクトを参照する場合にも squirrel の機構を経由する必要があるので一手間増えるけど、
squirrel に値を返す時は持ってる HSQOBJECT を sq_pushobject するだけになるからとても簡単になるし、
オブジェクトの寿命管理も squirrel 側になるから、いつ誰が破棄しても安心
0702デフォルトの名無しさん
2009/12/17(木) 14:23:49あー、やっぱり、新しくインスタンス作ってるんじゃないんならsetreleasehookはいらないんですね。
なんか中で気持ち悪いことやっててGraphicsインスタンス作ったつもりはないのに解放関数与えないとダメなのかと思いました。
(ソース読んだ限りではそういう記述が無かったので、疑問には思ってましたが・・・)
あとは、終了時あぼんの原因を探れば動きそうです。ありがとうございました。
ていうかBCC5.5ってテンプレートが弱いからSqPlusとか使えないんですね・・・。メチ不便
0703デフォルトの名無しさん
2009/12/18(金) 15:54:55デバッガー早くできるといいな。
0704デフォルトの名無しさん
2009/12/18(金) 16:06:30え!? と思ったら単なるtypoだった・・・
0705デフォルトの名無しさん
2009/12/18(金) 16:07:520706デフォルトの名無しさん
2009/12/18(金) 19:09:29{};hoge
をコンパイラが受け付けないのには何か理由があるの?
疑似BNF見る限り許容されそうなものだけど
ワンライナーだとついテーブルコンストラクタに ; 付けてしまう
0707デフォルトの名無しさん
2009/12/19(土) 13:49:00luaとかは無駄な部分が多すぎて
0708デフォルトの名無しさん
2009/12/19(土) 14:00:18その要望の解決にはいちばんいいと思う。
0709デフォルトの名無しさん
2009/12/19(土) 14:17:21出来るならそうしたいけど
nScript作者はここ最近活動休止中みたいで
そのスクリプトも含め更新と言う物が一切されてないから期待出来ない
だから自分で実装しようとしてるけど
元々Cのみで書かれてないから移植作業がまず大変
0710デフォルトの名無しさん
2009/12/19(土) 14:40:00そのへん追いついてなかった。
0711デフォルトの名無しさん
2009/12/19(土) 14:46:52Nスクのライセンスは全く見ずに言いますが。
0712デフォルトの名無しさん
2009/12/19(土) 14:47:50個人利用のみだから問題ないはず、と思う
0713デフォルトの名無しさん
2009/12/19(土) 14:48:14NScripterと話がごっちゃになってね?
0714デフォルトの名無しさん
2009/12/19(土) 14:51:05確かに混同してるな
0715デフォルトの名無しさん
2009/12/19(土) 14:53:30このことです
ttp://www.nakka.com/soft/ns/
0716デフォルトの名無しさん
2009/12/19(土) 14:55:29windows.hに依存してるのはあるかもしれんが
0717デフォルトの名無しさん
2009/12/19(土) 15:02:330718デフォルトの名無しさん
2009/12/19(土) 15:07:10フルCに見えるけど一部Winの機能使ってて
手直し必須だと思う
0719デフォルトの名無しさん
2009/12/19(土) 15:37:08一部と言うより根本的な修正が必要だなこれ
0720デフォルトの名無しさん
2009/12/19(土) 17:09:35基本命令や文法とかまで変えたりする?
0721デフォルトの名無しさん
2009/12/19(土) 17:10:05ノシ IronPython使用中。
1週間ほどあればスクリプト部分はcPythonにも移植出来るかな。
特に問題ないよ。
スクリプト内でマルチスレッド化が普通にできるのが強みだな。
0722デフォルトの名無しさん
2009/12/19(土) 17:58:46本家バージョンアップの度にパッチ当てるの面倒だから基本的にそのまま
作業を楽にする目的で文法いじるとしたらプリプロセッサとかトランスレータを間にいれるかな
文法変えずに必要な機能が実現できないなら言語の選択に問題があるかと
ライブラリレベルならアーカイブが透過的に扱えるようIOを自作のに差し替えてる
0723デフォルトの名無しさん
2009/12/20(日) 02:05:39手直ししてくれる人いません?
メモリ管理や足りない型の再定義とかはなんとかなるけど
マルチスレッド処理には詳しくないから
同期処理とある部分の代用関数が分からない
0724デフォルトの名無しさん
2009/12/20(日) 02:28:470725デフォルトの名無しさん
2009/12/20(日) 04:55:190726デフォルトの名無しさん
2009/12/20(日) 14:10:06if ~ then ~ endとか。
「関数先頭でリソース割り当て。割り当て成功してたら
終わりで開放。」見たいなコード書くとフラグ使って
最後でif文みたいな感じになるけど、
C#のIDisposable見たいな機能があると便利かと。
割り当て・開放のコードが集約できるから見やすそう。
0727デフォルトの名無しさん
2009/12/20(日) 16:26:270728デフォルトの名無しさん
2009/12/20(日) 17:54:01・テーブルが空になるまで関数をpopして呼び出す
の2つを簡単に出来るようなライブラリを作ればいいと思う
0729デフォルトの名無しさん
2009/12/20(日) 17:55:48で、それが種々のbinderになるわけですが何か。
0730726
2009/12/20(日) 18:18:19do
local resource=...
finaly
finnalize(resource)
end
:
:
end -- ここでfinalyの内容が自動で呼ばれる。
自動で呼ばれるとなると言語サポートは必須かと。
metaluaあたりで作れるかな?
0731デフォルトの名無しさん
2009/12/20(日) 18:25:560732726
2009/12/20(日) 18:28:56C#はIDisposable入れたんじゃないの?
0733デフォルトの名無しさん
2009/12/20(日) 18:33:54違うよ。
本来的にアンマネージドなリソースの管理はGCじゃなくてプログラマの責任だから、
プログラマが明示的にDispose()かける仕組みになってるんだよ。
0734726
2009/12/20(日) 18:44:32C#はかじった程度しかしらんのでうそ言ってるかもしれんが、
usingとIDisposabeなクラス組み合わせると
リソース開放漏れが(ファイルのクローズとか)が防げますよー
って使い方するんじゃないの?(C++のRAIIみたいな)
0735デフォルトの名無しさん
2009/12/20(日) 18:46:57call_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)
0736726
2009/12/20(日) 18:57:38よく思いつきますな。理解するのに
上下のブロックを10回ぐらい往復しましたよ・・・。
ただ、複雑になったらそのコードを一年後理解しなす
自身がないかも。
ついでにmetaluaでよろしく ノシ (冗
0737デフォルトの名無しさん
2009/12/20(日) 19:04:56IDisposableを継承したクラスはusing構文で使うことが推奨されているわけだが、
当然この構文が使えない使い方があるわけで。
(using構文を使うと実用上スタックに載せているのと同じなわけで、ヒープに置きたい場合だってあるだろう、という話)
で、ユーザーが手で作ってホールドしているIDisposableなインスタンスは当然自分で明示的に破棄しないといけない。
0738デフォルトの名無しさん
2009/12/21(月) 03:50:01/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ AngelScript 2.18.0!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
0739デフォルトの名無しさん
2009/12/21(月) 15:13:060740デフォルトの名無しさん
2009/12/21(月) 15:16:210741デフォルトの名無しさん
2009/12/21(月) 15:39:120742デフォルトの名無しさん
2009/12/21(月) 16:54:210743デフォルトの名無しさん
2009/12/21(月) 17:13:430744デフォルトの名無しさん
2009/12/21(月) 19:21:290745デフォルトの名無しさん
2009/12/21(月) 21:23:01まずは2.18.0のShiftJIS対応版だ…
0746デフォルトの名無しさん
2009/12/22(火) 00:10:030747デフォルトの名無しさん
2009/12/22(火) 00:38:060748デフォルトの名無しさん
2009/12/22(火) 07:10:33一度書いたら別に毎度手間がかかる訳じゃないだろ。
0749デフォルトの名無しさん
2009/12/22(火) 07:53:25/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ Lua!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
0750デフォルトの名無しさん
2009/12/22(火) 09:25:42AS_DOUBLEBYTE_CHARSETで有効になる部分に、そのままだとビルドエラーになる部分があって、
そこを毎回毎回直さなきゃならないんだ。
公式に知らせたほうがいいとは思うが英語が苦手でね…
0751デフォルトの名無しさん
2009/12/22(火) 10:12:370752デフォルトの名無しさん
2009/12/22(火) 10:37:03こういうの、JavaScriptとかRubyとかやってると思いつくよなw
0753デフォルトの名無しさん
2009/12/22(火) 10:38:18バージョン管理してパッチ吐いたりして、どうしてもパッチあたらないときは手で直すとかしたらどうかと
0754デフォルトの名無しさん
2009/12/22(火) 11:34:26自分がいじったファイルをリポジトリにコミットって事?
>>753
まさかの毎回手直し。
あと、
>バージョン管理してパッチ吐いたりして、どうしてもパッチあたらないときは手で直すとかしたらどうかと
ってのは、TortoiseSVNの「パッチを作成」「パッチを適用」を使えって事?
質問ばかりですまん。
0755デフォルトの名無しさん
2009/12/22(火) 12:01:22公式は svn かな。それなら
1. 公式から任意のバージョンをエクスポートしてきて、それで自分の手元で自前の svnレポジトリを作る
2. 自分の更新はそこに任意にコミットする
3. 公式の svn から適当なタイミング(リリースがあった時とか)で更新を「マージ」する
これでおおむね安全に手元作業できるはず
svn は以前は外部レポジトリからのマージができなかったので、
手元のレポジトリに「ベンダーブランチ」として公式の内容をまるごとコピーして、さらにそこからマージする
必要があったんだけど、今のは普通に外のレポジトリからマージできるのでこの手の作業は楽になった
あるいは最先端技術でいくなら、bazaar のような、svn プロトコルに対応した分散構成管理ツールをつかうという手もある。
svn のマージはわりとややこしいし、ログの類もマージ作業に依存してしまうので、こっちのが構造的にははるかにスマート。
この場合、自分の変更分はローカルコミットとして維持する形になる
0756デフォルトの名無しさん
2009/12/22(火) 12:26:40詳しい説明d。
ただ、AngelScriptはWIPのみsvnを公開してるみたいなので、
>手元のレポジトリに「ベンダーブランチ」として公式の内容をまるごとコピーして、さらにそこからマージする
というやり方になりそう。
ちょっと試してくる。
0757デフォルトの名無しさん
2009/12/22(火) 12:38:19WIPってなにかと思ったら work in progress か。
まあ、そりゃ svn ってのはそういうものだから^^;
えーと、任意のリリースバージョンならタグうたれてるみたいだから
ttps://angelscript.svn.sourceforge.net/svnroot/angelscript/tags/
からとれるかと。
バージョン間でのマージ処理したければ、ここのツリーの差分をひろってくればいい
0758デフォルトの名無しさん
2009/12/22(火) 16:40:58英語が苦手とか駄々こねてんじゃねえよクソが
死ねばいいのに
0759デフォルトの名無しさん
2009/12/22(火) 17:24:490760デフォルトの名無しさん
2009/12/22(火) 17:30:59ということにしたいんですね
0761デフォルトの名無しさん
2009/12/22(火) 17:34:46英語が出来ないからというそれだけの理由で一生無駄な作業をしつづけるんだろうな
英語が出来ずともパッチ送るだけで十分なのに
0762デフォルトの名無しさん
2009/12/22(火) 17:39:170763762
2009/12/22(火) 17:39:530765762
2009/12/22(火) 19:38:590766762
2009/12/22(火) 20:51:420768デフォルトの名無しさん
2009/12/22(火) 23:16:080769デフォルトの名無しさん
2009/12/22(火) 23:33:420770デフォルトの名無しさん
2009/12/23(水) 02:41:150771デフォルトの名無しさん
2009/12/23(水) 02:58:590772デフォルトの名無しさん
2009/12/23(水) 07:42:110773デフォルトの名無しさん
2009/12/23(水) 07:56:220774デフォルトの名無しさん
2009/12/23(水) 13:52:13いい子以外にもパッチを送りつけるような真似はいかがなものかと。
0775デフォルトの名無しさん
2009/12/23(水) 15:55:190776デフォルトの名無しさん
2009/12/25(金) 21:46:07gitなんかdiff形式のメール生成して送る機能なかったけ?w
0777デフォルトの名無しさん
2009/12/25(金) 21:48:17forkして変更して、変更を相手に送る(pullリクエストする)というのがシステムに組み込まれているから、
パッチ送るのも気軽なんだよね。
0778デフォルトの名無しさん
2010/01/04(月) 14:49:54http://namidame.2ch.net/test/read.cgi/venture/1260791115/l50
http://set.bbspink.com/test/read.cgi/sm/1246009466/l50
http://set.bbspink.com/test/read.cgi/sm/1249183350/l50
0779デフォルトの名無しさん
2010/01/04(月) 15:51:390780デフォルトの名無しさん
2010/01/06(水) 09:15:42メタテーブルの __newindex を使えば、
テーブルに新しい key を追加するときにフックをかけることができるけど、
同じような感じで、テーブルの既存の key の値を変更するときに、
フックをかけることってできないかな?
0781デフォルトの名無しさん
2010/01/06(水) 10:36:170782デフォルトの名無しさん
2010/01/06(水) 11:26:52キーがすでにテーブルにある場合は __index はなにもしないですよね。
Metatable の index の擬似コードから抜粋:
local v = rawget(table, key)
if v ~= nil then return v end ← キーが存在するならその値を返す。
http://www.lua.org/manual/5.1/manual.html#2.8
0783デフォルトの名無しさん
2010/01/06(水) 11:52:07と考えれば簡単なことなんだけどな。
空のテーブルにメタテーブルを持たせて key が何も無い状態を維持すれば良い。
いったんメタテーブルに丸投げするが、データを保持する仕事はテーブル本体でやる
と考えるとややこしくなるよな。
0784デフォルトの名無しさん
2010/01/06(水) 12:20:51ありがとうございました。
0785デフォルトの名無しさん
2010/01/11(月) 00:41:10ファイナルもうすぐかも
0786デフォルトの名無しさん
2010/01/11(月) 18:50:02それはない
0787デフォルトの名無しさん
2010/01/12(火) 01:12:00- lexical environmentsの導入(in EXP do BLOCK end)
- setfenv/getfenvがなくなった(debugのはある?)
- 全thread(コルーチン)で環境はひとつのみ?
自作ライブラリは結構見直さないとなー
0788デフォルトの名無しさん
2010/01/12(火) 03:37:11local x = 1 do
local y = 2 do
・・・
end
end
in {x = 1} do
in {x = x, y = 2} do
・・・
end
end
0789デフォルトの名無しさん
2010/01/12(火) 10:13:28set/getfenv は関数に対して破壊的な操作をしてしまうので、新しいやり方のほうがきれいに書けるかも。
0790デフォルトの名無しさん
2010/01/12(火) 11:19:29もともと空っぽの環境を破壊されてもほとんど困らないけどね
0791デフォルトの名無しさん
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
とできるからそのほうが安全・・・ってのが
使いどころなのかな?
0792791
2010/01/13(水) 00:53:12791の例でprintはglobal_fが作られた時点で固定化されているので
一番最後の方法では挿げ替えはできないね(orz
0793デフォルトの名無しさん
2010/01/13(水) 01:02:20なんかzlib圧縮(?)されてるから.luaファイルみてもわからんけど
0794デフォルトの名無しさん
2010/01/13(水) 09:45:12それであってるんじゃないかな?
print が global_f の外側で local で宣言されていれば global_f が作られた時点で固定化される(レキシカル変数として)けど、
そうでなければグローバル変数として参照されるので、
環境を変えればその影響を受ける。
0795791
2010/01/13(水) 19:13:03本質的にはスレッドに対するsetfenvと同じで
>94の勘違いと同質な問題。
子供の関数の呼び出しまで影響を受けるとなると
危険極まりないのも事実だし。(トレードオフではあるが)
それよりもpcalやCスタック先からyield可能になったのは大きい。
0796デフォルトの名無しさん
2010/01/14(木) 07:28:39関数が定義された場所の環境をそのまま引き継ぐってことですよね。
だから、スクリプトファイルを読み込むとき(dofile とかで)に in ... do を使うと、
以後、そのファイル内で定義された関数はサンドボックス環境で実行されるわけか。
0797デフォルトの名無しさん
2010/01/14(木) 18:43:54table =
{
element1 = 3
element3 = "str"
func element2() ...... end
}
みたいなことできませんか?
0798デフォルトの名無しさん
2010/01/14(木) 18:52:440799デフォルトの名無しさん
2010/01/15(金) 06:58:28ファイナルもうすぐかも
0800デフォルトの名無しさん
2010/01/15(金) 08:28:470801デフォルトの名無しさん
2010/01/24(日) 11:27:150802デフォルトの名無しさん
2010/01/24(日) 11:46:330803デフォルトの名無しさん
2010/01/24(日) 18:24:53誤検出なのかな?
0804デフォルトの名無しさん
2010/02/03(水) 00:46:56リファレンスマニュアル探したけど、それらしい物が無かったんだが…
0805デフォルトの名無しさん
2010/02/03(水) 00:53:240806デフォルトの名無しさん
2010/02/03(水) 01:12:180807デフォルトの名無しさん
2010/02/03(水) 08:55:04って手順ではダメ?
0808デフォルトの名無しさん
2010/02/03(水) 10:27:020809デフォルトの名無しさん
2010/02/03(水) 12:43:27>>4
0810デフォルトの名無しさん
2010/02/03(水) 12:46:040811デフォルトの名無しさん
2010/02/03(水) 12:49:100812デフォルトの名無しさん
2010/02/03(水) 13:02:55Cライクな文法が使える超軽量な組み込みないかな
LuaとかPawnも、小さい部類だろうけど不要な物が多すぎる
0813デフォルトの名無しさん
2010/02/03(水) 18:35:510814デフォルトの名無しさん
2010/02/03(水) 21:16:11たとえばSDLとか
ところで、Windows x64向けにビルドしてみたけど
> print(2^63 - (2^63+1))
でなぜか0が返ってくる
> print(2^31 - (2^31+1))
なら1になるけど
ちなみにlua_Integerの実体ptrdiff_tは8バイトになってる
どこがおかしいのかわからん
0815デフォルトの名無しさん
2010/02/03(水) 21:57:1164bit integerに対して64bit doubleじゃ精度足りないっての
パッチがあったからつっこんでみるが、ちゃんと動くか心配だ
0816804
2010/02/03(水) 21:57:40アドバイスありがとう。
luaL_loadbufferやluaL_loadstringを使うという発想は思いつきませんでした。
0817デフォルトの名無しさん
2010/02/04(木) 15:53:15Euphoria, t3x, moto, JavaなどCトランスレータを実装している言語は探すと色々あるものの、
トランスレート後に吐いたCソースとハンドコードしたCソースとのリンク方法が
文章化されてなかったりするするんだよな。
>>812
小さくはないが...elastiCは?
ttp://www.elasticworld.org/
0818デフォルトの名無しさん
2010/02/04(木) 19:12:280819デフォルトの名無しさん
2010/02/04(木) 19:41:200820デフォルトの名無しさん
2010/02/04(木) 21:35:40lua手を出しにくいのです。。。
0821デフォルトの名無しさん
2010/02/04(木) 21:52:420822デフォルトの名無しさん
2010/02/04(木) 21:53:060823デフォルトの名無しさん
2010/02/04(木) 21:57:42遭遇しまうまう・・・orz
0824デフォルトの名無しさん
2010/02/04(木) 22:02:220825デフォルトの名無しさん
2010/02/04(木) 22:04:46nmake -f makefile でビルドできるもんなんだろうか・・・
0826デフォルトの名無しさん
2010/02/05(金) 00:11:510827デフォルトの名無しさん
2010/02/05(金) 00:39:23必要なobjぐらいなら写せるだろ
0828デフォルトの名無しさん
2010/02/05(金) 00:52:13必要なc/cppファイルひろって Makefile 書き直すなり
Visual Studio でプロジェクトファイルつくるなりぐらいやりなされ。
そんな難しいもんじゃない。
0829デフォルトの名無しさん
2010/02/05(金) 11:59:44こういう問題を回避するためにSquirrelのソースパッケージをCMake対応にして
フォーラムに投げてみたら、いらないって言われた……。
0830デフォルトの名無しさん
2010/02/05(金) 18:05:550831デフォルトの名無しさん
2010/02/06(土) 12:14:44userdata
・lua側でアロケート
・lua側でデアロケート(GC)
・Cには参照のみが渡される
・Cからは寿命が分からない
lightuaserdata
・C側でアロケート
・C側でデアロケート
・luaには参照のみが渡される
・luaからは寿命が分からない
これ以外になんか有りますか?
それとluaとCでuserdata、lightuserdataの寿命を同期させる方法は有りますか?
0832デフォルトの名無しさん
2010/02/06(土) 12:41:410833デフォルトの名無しさん
2010/02/06(土) 14:15:34これは心の贅肉をそのまま箇条書きにしたみたいで面白いな
考え方としてはとりあえず
lightuserdataは無くても整数値で代用できる、と割り切ってしまうほうが簡単
そうすると、整数とuserdataを比較するのは無意味だとわかる
0834デフォルトの名無しさん
2010/02/06(土) 21:32:49|Д゚)つ[AngelScript]
|ミ サッ [AngelScript]
0835デフォルトの名無しさん
2010/02/06(土) 21:47:45/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ AngelScript!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
0836デフォルトの名無しさん
2010/02/06(土) 23:25:21レスどうもです
メタテーブルの有無は重要ですね
いろいろいじってようやくユーザークラスをLuaに公開できるところまでこぎつけました
しかしlightuserdataは使い道がわからず・・・
0837デフォルトの名無しさん
2010/02/07(日) 10:50:270838デフォルトの名無しさん
2010/02/07(日) 14:36:10ゲームとかだとひとつのスクリプトで複数のオブジェクトを制御する必要があるし。
0839デフォルトの名無しさん
2010/02/07(日) 15:41:29C++/CLIならもっとすごいことになるな
0840デフォルトの名無しさん
2010/02/07(日) 17:14:33例えばスクリプトで
SetSpeed(1,20)
とかいうような関数があった場合、C++側でlightuserdataを取り出し、
//lightuserdataからObjectのポインタを取り出す
Object *lpObject=(Object*)GetLightUserData(L);
//Objectを操作する
lpObject->SetSpeed(x,y);
って感じの処理をするグルー関数を用意する。
0841デフォルトの名無しさん
2010/02/07(日) 18:22:00userdataでやれば上手くいくんだけどlightuserdataのほうが軽いらしいし・・・
C++側で
tableを作る
tableにインスタンスへのポインタをlightuserdataで格納
tableに各種メソッドを格納(メソッドはself(第一引数)tableからインスタンスへのポインタを取り出してクラスのメソッドをコールする)
さらにtableを積んで__gcフィールドにデリータを格納
最初のテーブルにメタテーブルとして設定
最初のテーブルを返す
という感じでやってるんだけどLua側で__gcが呼ばれてくれない
mt = getmetatable、mt.__gc(hoge)とすればちゃんとデリータを呼んでくれるのに・・・
こっちがDLL
http://codepad.org/5CuryxGE
こっちがLua
http://codepad.org/BON62sBh
0842デフォルトの名無しさん
2010/02/07(日) 18:44:41パソコンでできることがケータイではできないと嘆いているようなもんだぞ?
0843デフォルトの名無しさん
2010/02/07(日) 19:23:56そういうことができなくなってる分軽いわけなんだが……
0844デフォルトの名無しさん
2010/02/07(日) 19:31:07コールバック的な使い方でしょうか
0845デフォルトの名無しさん
2010/02/07(日) 19:44:120846デフォルトの名無しさん
2010/02/07(日) 19:51:50てか、マニュアルにもCのポインタそのものだって書いてあるだろう。
Cでよくあるハンドルスタイルやコールバックスタイルの構造を直接扱うためにある。
例えば fopenの帰り値の FILE* を void* にキャストして lightuserdata として持ってそのまま使う。
処理する時には、必ずCの関数をいちいち呼び出すのを前提として、
「LUA側は持ってるだけで何もさわらないデータ構造」として準備されてる。
これの使い方が直感的にわからない人がいるってのが驚きだった^^;
0847デフォルトの名無しさん
2010/02/07(日) 20:54:46ひどくなると「それはただの××だよ」と言われると反論してくる。
「お前はそうやって分かったつもりになってるだけだ」とか。
0848デフォルトの名無しさん
2010/02/07(日) 21:05:07自前のオブジェクトのアドレスや、OSから渡されるハンドルをキーにしてテーブルを参照すれば、同じアドレスやハンドルに同じuserdataを対応させることができる。
ちなみに、この時のテーブルはweak tableにしておくといい。
ということを初めて知った時は目から鱗だった。
0849デフォルトの名無しさん
2010/02/07(日) 22:40:470850デフォルトの名無しさん
2010/02/07(日) 23:14:160851デフォルトの名無しさん
2010/02/07(日) 23:22:510852デフォルトの名無しさん
2010/02/07(日) 23:50:34Luaから呼ばれるC++側の関数で取り出して使ってるんだけど、>>831
みるとuserdataはLua側でGCかかるの?
0853デフォルトの名無しさん
2010/02/08(月) 00:40:38うーんこんな感じですかね?
ポインタをキーにという発想はすごい便利そうな予感がしますね
しかしグルーコード内のエラー処理とかってどうすればいいんだろう
C++例外を投げるべきなのか、関数内でもみ消してlua_errorするべきなのか
0854デフォルトの名無しさん
2010/02/08(月) 07:40:28「C++側」と「Lua側」をきっちりと分離したいんだな。
組み込み言語は、そういう幻想にうんざりしてる人のためにあるんだと思うけどな。
0855デフォルトの名無しさん
2010/02/08(月) 10:48:050856デフォルトの名無しさん
2010/02/08(月) 11:02:47作られてないから駆逐されてない訳で
0857デフォルトの名無しさん
2010/02/08(月) 11:04:23実際のところLuaのバランスが優れているってことでしょ
0858デフォルトの名無しさん
2010/02/08(月) 12:13:32静的型 クラス メタプログラミング 並列処理 遅延評価 参照透明性 ・・・
0859デフォルトの名無しさん
2010/02/08(月) 12:58:590860デフォルトの名無しさん
2010/02/08(月) 13:04:33次点の理由はスタティックリンクできたから。
0861デフォルトの名無しさん
2010/02/08(月) 19:55:29自分の英語ができないのは分法を教えるからって口だろ
0862デフォルトの名無しさん
2010/02/08(月) 20:54:280863デフォルトの名無しさん
2010/02/08(月) 20:56:42逆だよ。
文法ができないから英語できないんだよ。
0864デフォルトの名無しさん
2010/02/08(月) 21:00:44>861が何を言ってるのか分かってるの?w
0865デフォルトの名無しさん
2010/02/08(月) 21:12:140866デフォルトの名無しさん
2010/02/08(月) 21:19:010867デフォルトの名無しさん
2010/02/08(月) 23:28:24>>347みる限り速度はでLua>>>>Sq
0868デフォルトの名無しさん
2010/02/08(月) 23:34:53C拡張に馴染む日はくるんだろうか俺・・・
0869デフォルトの名無しさん
2010/02/08(月) 23:37:30俺は2日で拡張できるようになったぞ
0870デフォルトの名無しさん
2010/02/09(火) 09:34:09ざっと見た感じは文法も特に変な感じじゃないから、使いやすそうな感じはするんだけどね。
日 本 語 資 料 皆 無 だ け ど な
0871デフォルトの名無しさん
2010/02/09(火) 11:26:11月並みなことを言うと
因果関係ではなく相関関係ならあるかもしれない
0872デフォルトの名無しさん
2010/02/09(火) 11:32:070873デフォルトの名無しさん
2010/02/09(火) 14:25:57代えられるほどのものではないということだろう
0874デフォルトの名無しさん
2010/02/09(火) 16:13:120875デフォルトの名無しさん
2010/02/09(火) 16:40:55SciTEとか
0876デフォルトの名無しさん
2010/02/09(火) 17:04:31もともとゲーム向けってわけじゃないしね
0877デフォルトの名無しさん
2010/02/09(火) 17:50:350878デフォルトの名無しさん
2010/02/09(火) 17:56:04TextAdept
http://caladbolg.net/luadoc/textadept2/manual/1_Introduction.html
半分以上 Lua で記述され、また Lua で拡張可能なテキストエディタ
iconv で読み書きし内部は UTF-8 なので、日本語も使用可
0879デフォルトの名無しさん
2010/02/09(火) 21:54:30tokyotyrantでLua知ったよ
0880デフォルトの名無しさん
2010/02/10(水) 14:33:21http://www.frykholm.se/files/markdown.lua
http://coderay.rubychan.de/
プロジェクト管理ツール を作ろう
Redmin, Retrospectiva, Trac
基本組み込み用途だよね、とツールを作る用途で
移行する気が起きない理由はこの辺にありそうだとさっき気がつきました・・・
0881デフォルトの名無しさん
2010/02/10(水) 17:47:01それとも__stdcallにしたほうがいいですか?
0882デフォルトの名無しさん
2010/02/10(水) 20:55:07たぶん__cdeclだけど仮に間違っていたとしても
name manglingの違いで簡単に見分けられるような気がする
0883デフォルトの名無しさん
2010/02/10(水) 20:57:16Cでしか使わないのなら目的にもよるがどっちでもいいと思うがな
0884デフォルトの名無しさん
2010/02/10(水) 22:45:42>>883
thxです
さっきluaのヘッダ見たところ呼び出し規約は書いてなかったので多分C言語デフォルトのcdeclでよさそうですね
0885デフォルトの名無しさん
2010/02/11(木) 14:50:36PDFで売ってくれりゃいいのに
0886デフォルトの名無しさん
2010/02/11(木) 15:59:410887デフォルトの名無しさん
2010/02/11(木) 16:49:250888デフォルトの名無しさん
2010/02/11(木) 18:52:41配列形式だったら #tbl で、出来るみたいだけど・・・。
0889デフォルトの名無しさん
2010/02/11(木) 20:14:39BOOL isHoge(lua_State *, index);
の形で使いたいんですが
luaのほうで予め提供されてる方法はありますか?
それとも、自分で独自にマップするものなんでしょうか?
0890デフォルトの名無しさん
2010/02/11(木) 20:46:48pairsやnextかな
0891デフォルトの名無しさん
2010/02/11(木) 21:04:58pairsを使った方がいいんじゃまいか
0892デフォルトの名無しさん
2010/02/11(木) 23:23:44bashにluaインタプリタ機能追加してbashの拡張ができる&
bashが生きている間luaインタプリタも生きているのでlua変数を
保持し続ける。これ重要。
ファイル操作が多いとやっぱりシェルスクリプトが楽だけど
コマンド間の結果の連携を環境変数orファイル書き出しで
実装するのはかったるい時に大活躍な予感。
0893デフォルトの名無しさん
2010/02/14(日) 01:40:15汎用的に使うには標準ライブラリ貧弱だし
thenとかdoとか書くの面倒だし
0894デフォルトの名無しさん
2010/02/14(日) 02:40:47wxFormBuilderから追加したイベント宣言を定義するのはどうしたらいいのでしょうか?
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
このコメントが鍵のような気もするのですが正直意味が分かりません・・・
0895デフォルトの名無しさん
2010/02/14(日) 03:09:570896デフォルトの名無しさん
2010/02/14(日) 11:30:21':' ゙''" `':,
ミ ・ω・ ;,
:; . っ ,つ Lua!
`:; ,;'
`( /'"`∪
0897デフォルトの名無しさん
2010/02/15(月) 16:13:25__gcをうっかり書き換えてしまわないように
メタテーブルを隠蔽あるいは変更不可にすることはできるだろうか?
0898デフォルトの名無しさん
2010/02/15(月) 19:19:53さらにメタテーブルに__metatableを追加しておけば隠蔽も可能になり、メタメソッドの変更、追加を防止できる。
ただしこれらはC側やdebugライブラリには効果がないし、制限する手段も(多分)無い。
0899デフォルトの名無しさん
2010/02/15(月) 21:52:18初期化以外でsetmetatable()を使うのか?
0900デフォルトの名無しさん
2010/02/15(月) 22:33:58__metatableというのがあったのか
というかユーザデータはもともと変えられないって知らなかったorz
レスthxでした
>>899
metatableをうっかり書き換えるのはクライアントで、クラスじゃない
RAIIをうっかり忘れるのとmetatableをうっかり書き換えるのは別次元の問題
そのクライアントのついうっかりを封印して出来なくしてしまえれば安心して寝れる
0901デフォルトの名無しさん
2010/02/15(月) 23:37:24なにが別次元だ
ファイルを読んだり書いたりdllをロードしたりする、普通の言語じゃないか
0902デフォルトの名無しさん
2010/02/19(金) 02:15:030903デフォルトの名無しさん
2010/02/19(金) 20:31:33〈〈〈 ヽ
〈⊃ }
∩___∩ | |
| ノ ヽ ! !
/ ● ● | /
| ( _●_) ミ/ Lua!!
彡、 |∪| /
/ __ ヽノ /
(___)
0904デフォルトの名無しさん
2010/02/21(日) 15:46:380905デフォルトの名無しさん
2010/02/22(月) 16:32:070906デフォルトの名無しさん
2010/02/22(月) 16:55:480907デフォルトの名無しさん
2010/02/22(月) 17:51:500908デフォルトの名無しさん
2010/02/22(月) 20:06:580909デフォルトの名無しさん
2010/02/25(木) 02:06:10local c = 0
return function ()
c = c + 1
return c
end
end
f1 = foo()
f2 = foo()
この場合f1とf2に渡される情報はcと関数の参照だけ?
それともcを含めて関数まるごとコピーされちゃったりする?
0910デフォルトの名無しさん
2010/02/25(木) 08:44:160911デフォルトの名無しさん
2010/02/25(木) 08:54:10それとenvの参照
0912デフォルトの名無しさん
2010/02/26(金) 02:47:270913デフォルトの名無しさん
2010/02/26(金) 14:12:12でも5.2はまだリリースされてないから止めようと思えば止められるけど
0914デフォルトの名無しさん
2010/03/03(水) 04:05:04ud = create_ud()
getmetatable(ud).__gc = nil
のようにごくごく普通にアクセスできるように思えるんですが・・・これは本の間違いじゃないですかね?
0915デフォルトの名無しさん
2010/03/03(水) 08:33:03保守的GCって知ってるか
解放すべきかどうか疑わしいときは、解放しないほうが安全
0916デフォルトの名無しさん
2010/03/03(水) 11:12:19今ググって知りました
しかし、保守的GCの話は>>914の話とは関係ないように思えるのですが、実は何か関係があるんでしょうか?
0917デフォルトの名無しさん
2010/03/03(水) 11:20:30よく考えられてるサンプルだと思う。
http://ruriko.denpa.org/201002c.html#23
0918デフォルトの名無しさん
2010/03/03(水) 18:44:23userdataはsetmetatableはできないがgetmetatableはできる。
よってその例のようなアクセスはできる。
禁止したいなら__metatableを適切な値に設定するといい。
0919デフォルトの名無しさん
2010/03/03(水) 19:47:360920デフォルトの名無しさん
2010/03/07(日) 11:27:59state:update()の戦略の方がコスト低いしわかりやすいと思うんだが
0921デフォルトの名無しさん
2010/03/07(日) 12:48:09君には不要って事なんだよ
無理して使う必要ない
0922デフォルトの名無しさん
2010/03/07(日) 15:01:140923デフォルトの名無しさん
2010/03/07(日) 15:08:48結果として同期処理の不要な軽量スレッド的な実装ができるようになる。
0924デフォルトの名無しさん
2010/03/07(日) 15:46:160925デフォルトの名無しさん
2010/03/07(日) 16:04:54むちゃくちゃな論理展開わろた^^
>>922
ですよね
>>923
複数回に渡って処理を分割するのってstateパターンでも普通にできることだと思う
コルーチンじゃないとどうしてもできない、あるいは明らかに優れてるっていう要素が自分には見えないんすよね
0926デフォルトの名無しさん
2010/03/07(日) 16:07:46Stateパターンのような回りくどいことをしないといけないのがおかしいとは思わない?
0927デフォルトの名無しさん
2010/03/07(日) 16:23:51どうしてもできないから、で使ってる人はいないよ。
機能的にすぐれてる部分は全く無い。ぶっちゃけコルーチンも、
全状態保持を言語側が担ってくれてるだけのおおがかりな state だから。
State パターンで何個もあったり、さらには個数が変動したりするオブジェクトの複雑な
挙動のからみあいとか、考えたくもないけど、コルーチンだとわりとすっきり書ける。
最初に仕様にあわせて組んでいくだけなら State でもいいんだけど、
後から見直す時とか、細かい修正に対応する時とか、コルーチンのが圧倒的に読みやすいし記述も楽。
遷移図をそのまま if や while やら使って書き起こすだけだけになるからね
コルーチン切り替えのコストは、固定で組まれた State 切り替えよりかなり大きくなってしまうけど、
表記の楽さがそれを上回る、と判断した人が使うもの。あらゆる状態遷移を頭の中だけでさくさくくめてしまえるので、
State のが簡単だよって言う人は知り合いにもいるけど、それ、凡人には無理ですからー
0928デフォルトの名無しさん
2010/03/07(日) 16:36:19言語側でサポートしきれていないニーズを無理やり克服するためのバッドノウハウのようなものだ。
0929デフォルトの名無しさん
2010/03/07(日) 18:44:20例えばFizzBuzzの通常版が既に完成していて
function fizzbuzz(n, print) for i = 1, n do ... print("FizzBuzz") ... end
後になってState版が必要になったときに使う。
co = coroutine.create(function() fizzbuzz(100, coroutine.yield) end)
0930デフォルトの名無しさん
2010/03/07(日) 22:20:250931デフォルトの名無しさん
2010/03/07(日) 22:34:16http://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. とか
おつかい行って来てよ、と丸投げしまう簡便さ
でもちゃんと帰ってこれるのかな・・・的不安
0932デフォルトの名無しさん
2010/03/08(月) 08:18:34コルーチンは記述が簡単なだけに非同期対応が面倒に感じるんだよな
>>924みたいな単純な処理ですら、アイテムを連続で取るとキャラが白くならなかったり、
直後にゲームクリアしてもキャラが白いままだったり、直後にキャラが変身するとハングしたりとか
Stateパターンならちゃんと回避できる人がコルーチンだと回避し忘れるのはありがちなこと
0933デフォルトの名無しさん
2010/03/08(月) 14:56:360934デフォルトの名無しさん
2010/03/08(月) 23:06:08他の人はコードで例を示しているんだから、君もコルーチンよりStateパターンが明らからに優れているという例をコードで示したら?
そうでないと、ただの知ったか君と区別つかないよ
0935デフォルトの名無しさん
2010/03/08(月) 23:32:200936デフォルトの名無しさん
2010/03/09(火) 00:01:370937デフォルトの名無しさん
2010/03/09(火) 00:07:39をちょっと格好付けただけ
コルーチンと比較されるような使い方の場合は特にメリットもない
0938デフォルトの名無しさん
2010/03/09(火) 00:47:56ハイハイ、逃げないでコードで示してね
それともやっぱり、知ったか君だったのw
0939デフォルトの名無しさん
2010/03/09(火) 01:02:110940デフォルトの名無しさん
2010/03/09(火) 01:15:03他何が搭載してたっけ
0941デフォルトの名無しさん
2010/03/09(火) 01:20:31切り替わるタイミングが明確になって後片付けとかが確実になるとかそういうことなんじゃないの
0942デフォルトの名無しさん
2010/03/09(火) 02:34:51どのみちオブジェクト指向が好きならJavaとかC#とかで正解なんだよ
0943デフォルトの名無しさん
2010/03/09(火) 02:43:450944デフォルトの名無しさん
2010/03/09(火) 03:03:140945デフォルトの名無しさん
2010/03/09(火) 09:40:22みたいな感じで理解してるな。
Luaの場合、coroutine.resumeで呼び出すと、次のcoroutine.yieldの部分まで実行してくれる。
0946デフォルトの名無しさん
2010/03/09(火) 12:51:46for (i = 0; i < 10; ++i) ですらっと書けるのがコルーチン。
0947デフォルトの名無しさん
2010/03/09(火) 15:59:050948デフォルトの名無しさん
2010/03/09(火) 16:26:47sjljでコンテキストを書き換えるかの二択だな
0949デフォルトの名無しさん
2010/03/09(火) 17:11:310950デフォルトの名無しさん
2010/03/09(火) 20:01:130951デフォルトの名無しさん
2010/03/10(水) 13:54:540952デフォルトの名無しさん
2010/03/10(水) 14:17:35このテーブルひとつで普通の配列も連想配列も
オブジェクトまでも扱えるから...
でも無理やりオブジェクト指向マネるくらいなら
ほかのスクリプト言語を検討するよ
0953デフォルトの名無しさん
2010/03/10(水) 15:10:04実は玄人向け
0954デフォルトの名無しさん
2010/03/10(水) 17:48:04M向け
マニアとマゾ
0955デフォルトの名無しさん
2010/03/10(水) 18:37:58GameMonkey|Д`)<俺もー
CRIScript|Д`)<俺もー
0956デフォルトの名無しさん
2010/03/10(水) 18:51:20\ ヽ ) ) \\ \\
( \ \∩___∩ \\
\ \ ⌒⌒| ノ ヽ \\
\ \ / ● ● ト、\ \\\
\ Y | ( _●_) ミ\ \\\
\ / 彡、_ |∪| ノ \ \\\
(____)―ヽノ' ヽ  ̄ ̄ ヽ\\
\, j l l .l }
Lua! l (_ノノノノ
0957デフォルトの名無しさん
2010/03/14(日) 18:29:440958デフォルトの名無しさん
2010/03/14(日) 18:55:010959デフォルトの名無しさん
2010/03/14(日) 19:23:00(__人__)./ ̄ ̄ ̄\:::::::::::::::::::::: / ̄ ̄ ̄\ コルーチン
::` ⌒´./ ⌒ ⌒ ヽ::::::::::::::: / ⌒ ⌒ ヽ
::::: ./ (●)(●) |:::::::::::: / ( ●)(●) |
\ | (__ / ̄ ̄ ̄\ | (__人__) } コルーチン
\/、. / ⌒ ⌒ ヽ/、.. ` ⌒´ .ヽ
\ / (●)(●) | |
\ \ | (__ / ̄ ̄ ̄\. | /
|\ \/、. / ⌒ ⌒ ヽ──┐ |丿 コルーチン
| .\ \ / (●)(●) |──┤ |
| |\ \ | (__人__) }──┤ |
| | \ \/、. ` ⌒´ ヽ\
0960デフォルトの名無しさん
2010/03/14(日) 20:37:44':' ゙''" `':,
ミ ・ω・ ;,
:; . っ ,つLua
`:; ,;'
`( /'"`∪
0961デフォルトの名無しさん
2010/03/14(日) 20:50:30JavaやPythonとかだと余裕でありそうだけど、SquirrelとかAngelScriptとかにはなさそうだ…
0962デフォルトの名無しさん
2010/03/14(日) 22:45:16SquirrelはVisual Studioのデバッガが普通に使えますが何か?
0963デフォルトの名無しさん
2010/03/14(日) 23:35:29マジで!?
VS上でスクリプトにブレークポイント付けたり、スクリプト内の変数見たりできるの?
やり方教えて。
0964デフォルトの名無しさん
2010/03/15(月) 15:21:36Squirrel Visual Studio 2008 Integration
ttp://squirrel-lang.org/forums/post/3072.aspx
これのこと?
0965デフォルトの名無しさん
2010/03/20(土) 00:16:05http://mynickname.web.fc2.com/lua-patch.html
0966デフォルトの名無しさん
2010/03/21(日) 12:46:57入力補間とキーワードの強調が出来ると嬉しい。
とりあえすSciTE使ってみたけど引数のヒントくれなかったり色々と書きにくい。。
0967デフォルトの名無しさん
2010/03/21(日) 12:50:31まあそんなマイナー言語、カスタマイズの利くエディタ側の機能で何とかするしかないだろ。
0968デフォルトの名無しさん
2010/03/21(日) 13:16:12c++と構文同じだから単純にc++の編集機能使ってるだけなんだ。
無いよりはましくらい。
0969デフォルトの名無しさん
2010/03/22(月) 00:19:45遅レスだが、すごいのがあるんだな。
AngelScript用のもあったりするんだろうか。
0970デフォルトの名無しさん
2010/03/22(月) 14:55:580971デフォルトの名無しさん
2010/03/22(月) 15:37:49文法がC/C++やC#そっくり、C++とのバインドが簡単、OOPも一応できる。
こんな感じか?
ただ、スクリプトでメイン部分を記述する用途には向いてないと思う。
0972デフォルトの名無しさん
2010/03/22(月) 19:35:20( ・∀・) < Lua!!
⊂/ 9) \____
q( /
> >
0973デフォルトの名無しさん
2010/03/23(火) 07:09:000974デフォルトの名無しさん
2010/03/25(木) 03:26:03V V
(´・ω・`) うさちゃんピース
0975デフォルトの名無しさん
2010/04/09(金) 09:33:120976デフォルトの名無しさん
2010/04/10(土) 02:20:44中の人がAppleに転職したから、メンテ出来ないんで閉じたんじゃない?
0977デフォルトの名無しさん
2010/04/10(土) 09:35:10d
ちょっと残念。
0978デフォルトの名無しさん
2010/04/17(土) 22:31:230979デフォルトの名無しさん
2010/04/18(日) 02:28:10組み込んでjavascriptから呼べるようにした組み込み関数なりクラスを
javascript上の名前空間に押し込める方法ってない?
もちろんjavascriptに名前空間そのものは無いので、オブジェクトのプロパティとして表現するんだけど
var x = hoge_ns.apple
みたいに呼び出したい。
javascript上で事前にラップする方法は考えたけど
元の名前が無効になるわけじゃないので、なんだかな。
0980デフォルトの名無しさん
2010/04/18(日) 02:30:09日本語でのフォーラム的なものはちょっと欲しいかなーと思うことはあるな。誰か設置してくれたら使うよ。
0981デフォルトの名無しさん
2010/04/18(日) 02:34:23var x = hoge_ns.apple
じゃなくて
var x = new hoge_ns.apple
ですね。訂正します。
javascriptは楽でいいよ。
遅いからゲームのAIとか記述するのには全く向いてないが。
0982デフォルトの名無しさん
2010/04/18(日) 08:41:07\ ヽ ) ) \\ \\
( \ \∩___∩ \\
\ \ ⌒⌒| ノ ヽ \\
\ \ / ● ● ト、\ \\\
\ Y | ( _●_) ミ\ \\\
\ / 彡、_ |∪| ノ \ \\\
(____)―ヽノ' ヽ  ̄ ̄ ヽ\\
\, j l l .l }
Lua! l (_ノノノノ
0983デフォルトの名無しさん
2010/04/18(日) 09:37:11最もパフォーマンスの最適化が研究されてる言語じゃね
0984デフォルトの名無しさん
2010/04/18(日) 09:56:550985デフォルトの名無しさん
2010/04/18(日) 18:30:26言語仕様上は高速化が難しいけど頑張って最適化してるってのが現状じゃなかったっけ?
0986デフォルトの名無しさん
2010/04/19(月) 00:54:38Luaはキビキビ動くゴキブリ。
話がズレたけど、C基準で
Lua = 10C
javascript = 100C
くらいの違いはある気がする。
アレだ、誰か測ってくれ。
0987デフォルトの名無しさん
2010/04/19(月) 08:37:100988デフォルトの名無しさん
2010/04/19(月) 09:32:19Lua と v8 だったら、どっちかっつうと v8 の勝利
ttp://shootout.alioth.debian.org/u32/benchmark.php?test=all&lang=luajit&lang2=v8
LuaJIT と v8 だと LuaJIT の圧勝
0989デフォルトの名無しさん
2010/04/19(月) 09:35:05言いたいことは分からなくもないが例えが嫌すぎるw
0990デフォルトの名無しさん
2010/04/19(月) 22:33:10へー
じゃばすくりぷと思ったより速いな
LuaJITすげえ
0991デフォルトの名無しさん
2010/04/19(月) 22:37:59レス数が950を超えています。1000を超えると書き込みができなくなります。