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


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

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



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

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

■前スレ
【Lua】組み込み系言語総合【Squirrel】
pc12.2ch.net/test/read.cgi/tech/1205208141/

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

613 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 18:10:43 ]
>>612
文法のことならSquirrelとかPythonがある程度近いと思うがそのまんまってのはたぶんない

614 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 18:14:43 ]
>>612 csl.sourceforge.net/csl.html

615 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 18:17:18 ]
>>612
C++だけど、CINT

616 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 23:16:35 ]
クロージャとコルーチンさえあればもうCでいい気がしてきた俺には十分魅力的だなぁCINTわ

617 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 08:17:06 ]
CINTにクロージャとかコルーチンとかあったか?

618 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 08:25:09 ]
>>616
それだったらGoのほうがいいんじゃ。

619 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 11:33:15 ]
Cっぽい文法ならAngelScriptでいいじゃない

620 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 11:25:54 ]
pawnとgoとgamemonkeyのスルーっぷりw

621 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 11:32:15 ]
C言語みたいなプログラム書きにくい言語でスクリプト記述したいとか、どんなマゾよ?



622 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 11:34:23 ]
世の中、なにか一つ習得するとそれにしがみつくのが習性という猫もいるんだ。

623 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 17:37:44 ]
>>621
これってたまに見かけるが、Cってそんなに書きにくいか?

624 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 17:49:32 ]
>>623
慣れだよ

625 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 17:56:34 ]
Cの書きにくさは、資源管理(malloc/free)がプログラマ任せであることや、
文字列操作がめんどいことにあって、構文や文法自体はそんなに書きにくくは
ないよね。Cが書きにくいなら、JavaがあそこまでCを引き継いだような仕様には
なってないと思う。

# でもまぁCが書きにくいと主張する人は、JavaはCから書きにくさを継承したと
# 主張するか。

626 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 18:04:16 ]
Cの書きにくさ
・クロージャがない
・ガベージコレクションがない
・メモリアクセス保護がない
・文字列型がない
・というかコレクション型が一切ない
・というかforeachがない
・せめてイテレータくらい付けて
・関数オブジェクトの定義が面倒(定義と関数ポインタの扱いが別)
・というかファーストオブジェクトになってない

とまあ、仮にオブジェクト指向でなかったとしてもこれくらいあるわけだ。

627 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 18:06:45 ]
アセンブラに比べたら格段に書きやすい

628 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 18:10:14 ]
あー複雑な型の宣言や定義の構文は魔境入ってるかw

629 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 20:04:32 ]
Cは40年近く前に出来た化石言語だからな。
当時のスペックのコンピュータで動かすためにキモイ仕様にしてるから書きづらくて当然。

630 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 21:35:50 ]
ネイティブ系ではテンプレートの便利さに触れると、C++以外の言語を受け付けなくなるよ。

631 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 21:57:19 ]
>>630
ふーん……。
D言語とかOCamlとかHaskellは触ってみたことあるの?



632 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 22:09:32 ]
臭いものに蓋をするのがITの正道
蓋をしないネイティブ系・組み込み系は邪道だな

633 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 23:16:45 ]
なでしこやろうぜ!

634 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 23:20:52 ]
>>632
怖いものみたさor言われるままに蓋を開けて
自分の足を撃つのがITの正道

635 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 12:43:40 ]
>>630
テンプレートでほら、関数型言語っぽいプログラミングも可能になる!!!

とか言われてもぶっちゃけあれキモいんだけど実際のところどうなの?

636 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 12:51:44 ]
boost spiritとかboost lambdaは、使う使わないは別として、
キモいと思わない人はいないんじゃないかと。

637 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 13:51:30 ]
C++をメインで使ってるけど、ぶっちゃけDirectXやライブラリの対応が
いいネイティブの別言語ができたらそっちに乗り換える。


638 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 13:57:23 ]
>>637
そういうのは、ラッパーライブラリひとつで解決できる話なのさー。(他言語対応)
ただし動作検証用のコードは一部C++で用意しとかないといけないと思うが。

639 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 14:01:28 ]
その使い勝手のいいラッパーが無いという話をしているんだろう。

640 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 15:47:16 ]

boost::lambdaを使いこなしてない奴はC++を理解していない(キリッ

641 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 20:17:26 ]
>>636
あれはその、なんていうかキモかわいい。



642 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 21:15:09 ]
Brainf**kやろうぜ!

643 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 21:42:40 ]
コンパイルにかかる時間が可愛くなさすぎる。

644 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 21:54:01 ]
その視点で見るとGoは実に可愛らしい

645 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 05:14:24 ]
Goって組み込めるの?

646 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 08:05:54 ]
         \   l´⌒\⌒\ \\ \
           \ ヽ   )  )   \\ \\   
              (   \ \∩___∩ \\ 
           \   \  ⌒⌒| ノ      ヽ  \\      
              \ \   /  ●   ● ト、\ \\\ 
               \  Y |    ( _●_)  ミ\  \\\  
               \ / 彡、_  |∪| ノ   \  \\\
                 (____)―ヽノ' ヽ      ̄ ̄ ヽ\\
                                \,  j  l l .l }
                         Lua!   l (_ノノノノ



647 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 11:00:26 ]
>>637-638
お前、なにかよさげなライブラリある度にラッパー作ってたDelphi使いの俺をなめるなよ。
さすがにもう嫌になってDelphi使ってないわ(´・ω・`) 昔は良い言語だったんだが

648 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 09:36:15 ]
ああ、次はDelphi用Lua、Delphi用Squirrel、Delphi用AngelScriptだ…

649 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 02:30:59 ]
ぶった斬りすいません

luaでテキストから文字を読み込んで使いたいのですが、
そのあとに文字入力のために同じ関数(io.read)を使うと文字入力できなくなってしまいます。
文字読み込みのio.readと、キーボード入力のio.readの区別をつけるにはどうすればいいのでしょうか?

よろしくお願いします。

650 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 02:34:20 ]
>>649

651 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 05:21:19 ]
テキストってテキストファイルのこと?
それとも標準入力?



652 名前:>>649 mailto:sage [2009/12/12(土) 21:22:55 ]
>>651
レスありがとうございます。

テキストファイルから文字を取り出してluaの配列に入れています。

653 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 14:27:50 ]
>>504-505
これってコンパイル済み(.amx)ではなくて
普通のPawnファイル(.p)も実行出来ます?

654 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 15:13:42 ]
と思ったらPawnはコンパイル済みのしか実行出来ないみたいですね
スレ汚しすみません

655 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 19:25:17 ]
 

656 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 19:26:52 ]
Luaファイルって、配布するときに隠すことできる?
Cの組み込みで使おうと思っているのだけれど、Cはコンパイルすれば自動的にソースは見えなくなってくれるからおk。
けど、Luaファイルで記述した部分がもろばれになってしまうので、どうにかならないかなぁということです。

657 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 19:43:00 ]
隠すというのがコンパイル後のバイナリでOKというなら、Luaもバイナリ出力することができるよ。

658 名前:656 mailto:sage [2009/12/14(月) 20:47:13 ]
まじか。
blog.dlixia.com/index.php?UID=1243877250
こんな感じなのか。

なんとなくだけど、Luaは簡単にリバースエンジニアリングできそうな予感がするな。。。
まぁ及第点はあるよね、きっと。
ありがとう!

659 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 23:07:40 ]
javascriptを組み込んだらいいんじゃね?
ユーザー多いし、資料多いし。

って思ったら、処理系実装が軒並みLGPLとかMPLとか・・・・


660 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 00:00:39 ]
スクリプト言語から離れるが、自作のファイルアーカイブクラスでメモリにスクリプトやコンパイル後のバイナリを読み込み、
そのメモリの内容をコンパイル、もしくはバイナリ読み込みするようにすればいいと思う。

661 名前:デフォルトの名無しさん [2009/12/15(火) 00:34:42 ]
>>659
CRIScriptとかはどうなんだ?
BSD風ライセンスらしいが



662 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 00:35:06 ]
さげわすれた・・・・

663 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 02:36:52 ]
CRIScriptね。
どうなんだろ、使用感を聞いたことがない。
あれ、主開発者がApple行っちゃったけど大丈夫かな、CRIなのにww

いや、すごく期待はしてるんだよ

664 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 03:14:13 ]
SpiderMonkeyかな

665 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 05:28:35 ]
>>652
はじめ言っていることが良くわからなかったんだけど、いまわかった。
www.lua.org/manual/5.1/manual.html#pdf-io.input
When called with a file name, (略), and sets its handle as the default input file.

つまりいちど io.read でファイルを読み込むとデフォルト入力ファイルが変更されるので、
それ以降は io.read では同じファイルをさらに読み込もうとするみたい。

標準入力(キーボード)から読み込みたいときは、
io.stdin:read() を使えば良いんじゃないかな?


666 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 10:54:38 ]
あー、もう!Pawn性能いいから組み込もうとしたけど
ソース汚くて処理系によってはエラー続出で修正必須、もうやだ

int main(int argc, char *argv[])
{
        extern AMX_NATIVE_INFO console_Natives[];
        extern AMX_NATIVE_INFO core_Natives[];
        extern AMX_NATIVE_INFO string_Natives[];

        AMX amx;
        cell ret = 0;

        if (aux_LoadProgram(&amx, "test.amx", NULL) != AMX_ERR_NONE) exit(1);

        if (amx_Register(&amx, console_Natives, -1)) exit(1);
        if (amx_Register(&amx, core_Natives, -1)) exit(1);
        if (amx_Register(&amx, string_Natives, -1)) exit(1);

        if (amx_Exec(&amx, &ret, AMX_EXEC_MAIN)) exit(1);

        printf("%ld\n", (long)ret);
        aux_FreeProgram(&amx);
        return 0;
}

悪銭苦闘しながらもコンパイラ、amx 実行側のビルド完了まで行ったから試しに
サンプルコード(examples/cards.p) をコンパイルして実行してみたけど
aux_LoadProgram のところでメモリエラー起きて落ちる
もうPawn意味が分からない、資料少なすぎ助けて・・・・


667 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 10:57:56 ]
追記

Pawn ファイルで include <###> をしていない物は正常に実行出来た

668 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 12:14:25 ]
ドキュメントが全てpdfだったり、インストールが実行形式だったり
変なところで敷居上げてる気はするな
敷居を下げる配慮をした結果なのだろうとは思うが

669 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 12:47:31 ]
PawnはFloat使おうとして挫折した。なんで組み込み型じゃないんだよ。。。。


670 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 14:54:37 ]
スレタイにある「Squirrel」の読みはアメリカ英語で「スクワール」で、
イギリス英語だと「スクウィール」のようです。

671 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 15:21:23 ]
Luaのライブラリを最小限のサイズにしたいのだけど
削っても動作に影響ないファイルとかあります?



672 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 16:48:46 ]
>>671
パーサー部分は削った?
参考→Lua書庫内etc/noparser.c

673 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 17:42:19 ]
最近Squirrelを始めた者です。
今、C++のクラスをバインドしているんですが、分からないことになりました。
あるクラスAがあってそのクラスのインスタンスからgetB()でクラスBのインスタンスを取得できるとします。
で、そこまでは
a<-A();
b<-a.getB();
とすることでbには[instance]が入っているのを確認できました。クラスBもバインド済みです。

しかし、そこからbにたいしてBのメンバを呼ぼうと思っても呼び出せません。以下がエラーです。
AN ERROR HAS OCCURED [the index 'draw' does not exist]
バインドするときに戻り値が何型であるかを設定する方法があるんでしょうか?

674 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 20:37:30 ]
バインドの方法がおかしいんだろう。クラスインスタンスを返す場合は、その返したいクラスに対して sq_createinstance
して squirrel のインスタンスとしての構造を作ったものに sq_setinstanceup したものを返す必要があるんだがそうしてるかい?

675 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 21:07:46 ]
>>674
してませんでした。> createinstance
使い方が分からん・・・

676 名前:デフォルトの名無しさん [2009/12/15(火) 22:40:50 ]
こんなコードにしてみましたが、違うんでしょうね・・・。だって、動かなかったですしね・・・。

static SQInteger bitmap_getgraphics(HSQUIRRELVM v){
  Bitmap *b;
  sq_getinstanceup(v,1,(SQUserPointer*)&b,0);
  sq_setinstanceup(v,1,&b->getGraphics() );
  sq_createinstance(v,1);
  return 1;
}


677 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 23:30:53 ]
Cの組み込みでLuaって速度的にどれぐらい出る?
ゲーム作ってるんだけど、1fps≒16msの間にpcall呼びまくったりしても大丈夫かな。
ざっと3000回ぐらい。

678 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 23:43:58 ]
ソース読んでたけど、よくわからん?

sq_getclassでクラスをスタックに
sq_createinstanceでそのクラスのインスタンスを作成し、スタックへ
sq_setinstanceupでユーザーポインタをインスタンスにセット

と思ったんだが、最初のsq_getclassでどうやれば返り値のクラスを取得できるんだ・・・

679 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 23:56:21 ]
bzr

680 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 23:57:02 ]
間違えたぜ

681 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 01:05:04 ]
>>678
主要なバインダには該当コードあるんだからそれを探して読もうよ。

sq_getclass はインスタンスのクラスを取得するもの。sq_createinstance をする場合に
参照するクラスはあらかじめわかってるんだから、C側で参照を保持しておくか、
あるいは global から名前指定しで取り出して使う




682 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 10:10:40 ]
>>672
それはどうやれば良いですか?

noparser.c でググったのだけど
ファイルサイズが削れるだけの説明ばかりで

683 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 14:42:20 ]
>>670
PCのスペックも環境も書いてないのにそんな話しても無駄だが、
最近のPCで本当にただpcall呼ぶだけなら3000回くらい平気じゃないかね。

684 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 14:43:41 ]
>>682
コンパイル済みのスクリプトしか読ませないの前提でパーサ削除しろって話じゃないかね。

685 名前:デフォルトの名無しさん [2009/12/16(水) 17:03:32 ]
今更だと思うけど、luaとsquirrelのスピード測ってみたんで貼っておく
(CentOS 5.3 64bit)

処理内容の擬似コードは

ans=0
for(i = 0..10000) { ans+=i;}
for(i = 0..10000) { ans-=i;}

これを更に10000回


lua 5.1.4   10000 times ( 3.176293)
squirrel 3.0 10000 times ( 8.569499)
ruby 1.9.1 10000 times ( 20.318498)
cpp     10000 times ( 0.197799)

squirrelも十分速いと思うけど、lua速え、ルbywww

ちなみに組み込んだ際の処理系サイズ
lua 188k
squirrel 371k
ruby 5.2M

686 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 17:10:52 ]
意味無いことを

687 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 17:18:42 ]
下手をすると、Cでは変数が後で利用されていないと、
最適化でごっそり無かったことにされるから気をつけろ。

688 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 17:33:31 ]
コンパイル時に計算済ませていきなり即値代入して終了とかな。

689 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 17:44:46 ]
>>687
あるあるww
最初測ったら0秒だったよ
今回はLuaの1/15くらいだからこんなもんでしょ


あと、rubyをコケにしてるような書き方になってしまった
あれは便利さ重視だからスピードは二の次
rubyユーザーごめん
引き合いに出したのは、自分がよく使ってて、一応組み込めるから。

690 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 17:48:38 ]
オブジェクト生成するからな。
とにかく意味が無い例であるのはたしか。

691 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 20:15:55 ]
>>676
たぶんこんな感じかな。テストしてないので動作するか分からないけど
static SQInteger bitmap_getgraphics(HSQUIRRELVM v){
  Bitmap *b;
  //Bitmapのポインタを得る
  //Bitmap_tagはBitmapクラスを登録したときのタイプタグ
  if(SQ_FAILED(sq_getinstanceup(v,1,(SQUserPointer*)&b,(SQUserPointer)Bitmap_typetag))) return 0;
  //Bクラスのインスタンスの作成
  //B_handleはBクラスを登録したときのハンドル
  sq_pushobject(v,B_handle);
  sq_createinstance(v,sq_gettop(v));
  sq_remove(v,-2);
  sq_setinstanceup(v,-1,&b->getGraphics());
  
  return 1;
}

BitmapとBのクラスはすでに登録されているものとしします。
ちなみにクラス登録時はこんな感じ
//クラス登録
//class_nameにクラス名
sq_pushstring(v, class_name, -1);
sq_newclass(v, SQFalse);
//クラスハンドルの獲得
//class_handleに用意したクラスハンドルへのポインタ
sq_getstackobj(v,-1,class_handle);
//クラスハンドルタグの設定
//class_tagにクラスのタイプタグ
sq_settypetag(v,-1,class_tag);




692 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 20:57:00 ]
>>691
作りにもよるけどたいていは sq_setreleasehok 処理も必要

693 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 21:08:29 ]
>>692
ん?sq_setreleasehookってコンストラクタの中じゃないの?


694 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 21:46:22 ]
>>693
sq_createinstance はまさに構築済みの C++オブジェクトをラップして返すために
あるもので、squirrel のコンストラクタをよばない。

普通のコンストラクタは中で C++のインスタンスを new してるから、
呼んでしまうと余分なC++インスタンスがつくられる上に、さらに
別のインスタンスを sq_setinstanceup した時点でリークしちゃうからね。

で、よばれないから、たいていコンストラクタでやってるはずの
sq_setreleasehook は別途必要になる






695 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 22:27:12 ]
>>694
おおっ、なるほどな。
良く見たら自分のメモリ開放できてなかったわ^^;)


696 名前:デフォルトの名無しさん [2009/12/17(木) 00:22:06 ]
>>691うおぉぉぉ 本当にありがとうございます!しかし、こんな風に書くとは全く思ってませんでした・・・
勉強になりました。が、Squirrelは使いづらいなと思いました・・・。

>>694
ちなみにですが、691にはどんな追記をすればいいんでしょうか?
自分は下のようにやったんですが、プログラム終了時にあぼんいたしました。
Bitmap *b;
if(SQ_FAILED(sq_getinstanceup(v,1,(SQUserPointer*)&b,(SQUserPointer)&SQBitmap)))return 0;//環境オブジェクトからBitmap*を取得
sq_pushobject(v,SQGraphics.getSQClass());//Graphicsクラスのクラスハンドルをスタックに乗せる
sq_createinstance(v,sq_gettop(v));//そのクラスのインスタンスを作成(Graphics自体のインスタンスは作られない)
sq_setreleasehook(v,-1,graphics_releasehook);//一番上のインスタンスに解放関数を持たせる?わからない
sq_remove(v,-2);//クラスハンドルを削除している?
sq_setinstanceup(v,-1,&b->getGraphics() );//実際にインスタンスにGraphics*をセットする

なんか、他の部分も怖くなってきました。リファレンスだけじゃわかりませんね。


697 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 00:34:19 ]
>>685-689
Rubyて感覚的には30分走らせる代わりに10分でコード書く。C言語は1時間でコードかくかわりに1分で走らせるとか、比喩があったなw

698 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 09:54:34 ]
C言語と30年戦う代わりに1年で味方につけるべきだったな。

699 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 10:16:12 ]
AngelScript|Д゚)ジー

700 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 11:05:57 ]
>>696
記述自体はそれであってるけど、sq_setreleasehook するのは sq_setinstanceup が成功したのを確認した後でしょう。

終了時あぼんは、そりゃどっかプログラムが悪いんだろうとしか言えない。
その b->getGraphics() でとった Graphics が勝手に独自に解放されて大丈夫な構造で作られて
ないのなら setreleasehook してはダメ、って、&つけてるってことはメンバ変数か。それはダメかも

C++で管理を単純化するために、親が責任もって解放してるので、子オブジェクトは
ポインタ参照したあともそのまま放置したのでOK、という書き方は実際よくあって、
そういったものをsquirrel に移すときは、子オブジェクトにポインタ渡してオブジェクトとして
作るけど sq_setreleasehook はしないという書き方にする必要がもちろんある。

親が先に死んだ状態で子をさわるとポインタ腐ってるのでクラッシュするけど
それはそういうもの。squirrel は機構は提供してくれるけど、自動で判断してくれるわけでは
ないから、あくまで C++ 的に破綻しないように注意して書く必要がある。

そういうのいやならオブジェクトを全体的にリファレンスカウント
方式とかで管理するようにするしかない。
そして循環参照トラップにはまるw

701 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 11:44:13 ]
循環参照嫌うなら弱参照系ないしはGCの実装が必要

もっとも、squirrel 自体がリファレンスカウントもGCも弱参照ももってるから、
既存ライブラリを持ってくるのではなく最初から書くのなら、C++ 側を
squirrelの機構にべったりのっかるように書くという考え方もある。

個別のオブジェクトはごく単純にバインドするようにして、C++ 側でオブジェクトの親子構造を持つ場合は、
C++そのもののポインタではなく、squirrel のオブジェクトを一旦作ってそれを HSQOBJECT で持つようにする。
さらには、配列や辞書が必要なら、STL とかを使うのではなく、squirrel の array / dictionary を使う。

C++ 側で元のオブジェクトを参照する場合にも squirrel の機構を経由する必要があるので一手間増えるけど、
squirrel に値を返す時は持ってる HSQOBJECT を sq_pushobject するだけになるからとても簡単になるし、
オブジェクトの寿命管理も squirrel 側になるから、いつ誰が破棄しても安心



702 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 14:23:49 ]
>>700
あー、やっぱり、新しくインスタンス作ってるんじゃないんならsetreleasehookはいらないんですね。
なんか中で気持ち悪いことやっててGraphicsインスタンス作ったつもりはないのに解放関数与えないとダメなのかと思いました。
(ソース読んだ限りではそういう記述が無かったので、疑問には思ってましたが・・・)

あとは、終了時あぼんの原因を探れば動きそうです。ありがとうございました。

ていうかBCC5.5ってテンプレートが弱いからSqPlusとか使えないんですね・・・。メチ不便

703 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 15:54:55 ]
xtalの新verが出てる。
デバッガー早くできるといいな。

704 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 16:06:30 ]
Squirrelの演算子一覧に => ってあって
え!? と思ったら単なるtypoだった・・・

705 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 16:07:52 ]
ぅあ

706 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 19:09:29 ]
squirrelで
{};hoge
をコンパイラが受け付けないのには何か理由があるの?
疑似BNF見る限り許容されそうなものだけど
ワンライナーだとついテーブルコンストラクタに ; 付けてしまう

707 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 13:49:00 ]
nscryptみたいな軽量な物で小数点も扱えるのあればなぁ
luaとかは無駄な部分が多すぎて

708 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:00:18 ]
他の部分がNスクで十分なら、多分Nスク作者に要望を投げてみるのが、
その要望の解決にはいちばんいいと思う。

709 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:17:21 ]
>>708
出来るならそうしたいけど
nScript作者はここ最近活動休止中みたいで
そのスクリプトも含め更新と言う物が一切されてないから期待出来ない

だから自分で実装しようとしてるけど
元々Cのみで書かれてないから移植作業がまず大変

710 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:40:00 ]
はてな日記見てみたけど、なんか次世代エンジンに注力してるみたいね。
そのへん追いついてなかった。

711 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:46:52 ]
あ、あと、どう使うつもりか知りませんがライセンス大丈夫ですよね?
Nスクのライセンスは全く見ずに言いますが。



712 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:47:50 ]
>>711
個人利用のみだから問題ないはず、と思う

713 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:48:14 ]
nScriptってWWWCの作者のだよな?
NScripterと話がごっちゃになってね?






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

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

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