[表示 : 全て 最新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

429 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:18:43 ]
ttp://msdn.microsoft.com/ja-jp/library/xwy0e8f2%28VS.100%29.aspx
BOM無しUTF-8の時 文字コードの認識に失敗するんじゃなくて、そもそも対応していないだけ
IDEでBOM無しUTF-8で保存可能なのは、ドキュメントとか編集するときのためだろうか?

430 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:42:08 ]
Squirrel 2.2.4 stable来てるね
3.0もbeta1になった

431 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:19:38 ]
おー、Squirrelのバージョンアップまじか
色々バグ修正されてるのかな
BuildとShift-JISパッチ入れるのめんどくさいけど、今夜試してみるわ

432 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 04:33:19 ]
>>429
WEBの世界だとそれが標準だからだと思うよ>BOM無しUTF-8で保存可能
Visual Web Developper あわせの対応であって、VC はスルーされてるってことかと。

コンシューマ機が UTF-8 ベースに移ってるのでそれあわせでコード共有しようとするときに地味に困る > VC がUTF-8をまともに扱えない
BOM つけると今度は gcc がこけるんだぜ……

433 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 10:47:44 ]
LuaでLua_Stateの解放をせずに、グローバル変数等の環境を個別に初期化する
サンプルはどこかにないでしょうか?

434 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 11:56:04 ]
グローバル環境を空のテーブルに置き換えるのって
普通にできんかったっけ?

435 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 12:37:17 ]
じゃあこんな感じで良いのかな?

Lua_State *L;

〜 一回load、callして使用 〜

lua_newtable(L);
lua_setfenv(L, LUA_GLOBALSINDEX); //グローバル変数だけ初期化される?

lua_gc(L, LUA_GCCOLLECT, 0); //念のためにGCも走らせるべき?

〜 Lにまたloadして再利用 〜

436 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 18:16:26 ]
426の読解力に溜息が出るよ

437 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 08:36:36 ]
>>429
UTF-8てそもそも既存のシステムに手をなるべく加えないで動かすための文字コードじゃないのか?
よくわからんな



438 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 08:45:59 ]
そもそも文字列はハードコーディングするべきじゃない。
外部リソースとして、入出力時にコードを調整すればいいだけのこと。

439 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 08:49:56 ]
print loadstring(0x34d3a6b8);

こんなプログラミングが歓迎されるんですね

440 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 09:00:17 ]
>435 を試してみたのですが、lua_setfenvだとグローバル環境の操作は無理なようです。
グローバル環境テーブル全体に対する操作関数って無いのでは?

441 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 09:34:40 ]
>>438
スクリプトを読み込んだ際に特定の文字コードに変換して、内部の処理はその文字コードで統一って感じかな?
だとすると、何に変換するのがいいんだろう。UTF16?

442 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 09:47:54 ]
スクリプトファイルは基本UTF-8、
ネイティブに引き渡すときはUTF-16、面倒ならUCS2にするのが一番問題が少ない。

443 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 11:51:20 ]
>>437
その恩恵にあやかれるのはASCIIコードしか使ってない欧米人だけだけどな。
非ASCIIコード圏は、既存のエンコード方式と区別ができないので余計に混乱する。

全てのプレーンテキストがUTF-8に置き換わるまでの過渡期は、BOM付きUTF-8が
一番無難な選択だと思うけどね。

俺はWindows上でgccとか使わないので、FTPクライアントにBOMの有無を変換する
機能さえついてくれればあまり問題ない。

もっとも、MSは独自にBOM付きUTF-8を強行するのではなく、非ASCIIコード圏で
過渡期にはBOMが必要であることを訴えて、規格に盛り込ませるべきだと思うが。

444 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:26:22 ]
>>437
「ファイルの中身」自体が最大のレガシーシステム。だから UTF-8 が使われるようになってる。
日本人は一度 SJIS やら EUC やらで通った道をもっかい世界規模で通り直してるだけではある

>>438
なにが一番困るって、ファイル名中の「コメント」

コメントに日本語つかうな?ごもっとも(苦笑)



445 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:27:06 ]
ファイル名中じゃねえ、ファイル中

446 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:31:33 ]
>>443
> 全てのプレーンテキストがUTF-8に置き換わるまでの過渡期は、BOM付きUTF-8が
> 一番無難な選択だと思うけどね。

この上の記述はわかるし、それはよくわかるんだが、
実際はBOM付きでトラブることが多くて、俺は折れたわw
BOMなしで上手く行くようにすべき

447 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:44:29 ]
あ、437 のいってること完全によみちがえてたや。すまん。

動作上は問題ないに決まってるんだから、ツールで対応できない意味がわからんってことだな。

既存エンコードと混在したのを自動判定する必然性は別にないんだから、
ツール側に「MBCSではなくUTF-8として扱う」スイッチだけつければすむことだ。
MS1社が対応するだけで世界は平和になるんだからさっさとそうしてくれってことだな



448 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:56:28 ]
>>443
もう手遅れ
MSがいまだにSJISを強行している時点で終わってる

449 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 13:38:56 ]
SJISを強行しているように見えるのはロケールを日本語にして使っているからなんだが、
なんでそんなに視野が狭いんだろう?

ちなみにOSのロケールを英語にすると、UTF-8も無しでコンパイルが通るぞ。

450 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 13:40:42 ]
BOM無しで

451 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 13:58:43 ]
thx!
おまいあたまいいな

452 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:03:05 ]
>>449
L"日本語" って正しく通る?

453 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:12:51 ]
ロケール変えて見た
こりゃええわw
まともなアプリと糞アプリの違いが一目瞭然になったw

454 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:16:50 ]
やっぱりコマンドプロンプトは糞のままだったw

455 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:23:06 ]
boost.cppll.jp/HEAD/
このサイトが初めてエンコード選ばなくても
日本語で文字化けせずに表示されましたw
ほんとうにありがとうございましたw

456 名前:デフォルトの名無しさん [2009/11/20(金) 14:24:23 ]
日記はチラ裏で

457 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:41:12 ]
>>455
ブラウザの文字エンコードが正しく認識できないって、どこの田舎ものやねん……。



458 名前:デフォルトの名無しさん [2009/11/20(金) 14:42:25 ]
>>454
cmd.exeはフォントを日本語にすれば治る
cygwinのbashはスクロールがおかしくなるが英語ロケールでインストールし直すと治るのかもしれないがやっていない

しかしいかに日本のWindowsアプリケーションが日本語=SJISで決め打ち(mbcs)しているかが良くわかるね
本来はhogehogeW()を呼ばないといけないところをhogehogeA()で済ませちゃってるんだろうな
mbcsでもSJISだとそれで動いちゃうから日本語ロケールだと気付かないし気にならないんだね
正しいプログラムの作り方についてもう一度勉強しなおす(日本のMSががんばってアナウンスする)必要があるんじゃないかな

459 名前:デフォルトの名無しさん [2009/11/20(金) 14:47:32 ]
>>457
ああごめん
ここのことね
boost.cppll.jp/HEAD/libs/date_time/doc/BuildInfo.html


460 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:50:07 ]
スレ違い

461 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 17:39:18 ]
質問どうぞ

462 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 20:08:17 ]
>>440
lua_replace(L, LUA_GLOBALSINDEX)
ならどう?

463 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 08:14:53 ]
>>462
できました!
ありがとうございます

464 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 09:04:14 ]
Luaのテーブルってキーを使ってアクセスするようになってますが、
キーが分からない場合に全ての項目を調べたい時のサンプルってありますか?

465 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 09:14:26 ]
for k,v in pairs(t) do hoge(k,v) end

466 名前:463 mailto:sage [2009/11/21(土) 09:49:37 ]
>462 でグローバル環境を空にはできましたが、
これだけだと再使用ができないような?
このあとlua_openlibsを使っても標準ライブラリが使用できません。
Lua_Stateをcloseせずに再使用するのは大変みたいですね。

467 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 10:09:26 ]
>>465
thx
pairsやnextでなめれるんですね



468 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 10:14:16 ]
lua_openlibは副作用でレジストリにも変更加えるからじゃね?
走らせたいチャンクを一旦スタックに積んで
そいつの環境を置き換えるのはどう?

469 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 10:56:34 ]
>>468
具体的なやり方が今一思いつきません。
load〜で積んだあとに空の環境に置き換えるって意味じゃないですよね?

470 名前:469 mailto:sage [2009/11/21(土) 11:03:04 ]
そもそもスクリプト側で使ったグローバル"変数"だけ初期化して
ライブラリ等のテーブルは使いまわせたらlua_Stateの再構築の
コストを減らせて、細かいスクリプトの連続呼び出しに良いのではと
考えていたんですが、Luaは変数も関数もその他色々もテーブル分けて
ないので、選択的に変数だけで消すのに無理がある気が・・・


471 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 11:04:51 ]
何でデフォの宣言がglobalなんだろうかね・・・

472 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 11:52:21 ]
>>469
いや、そういう意味。走らせるチャンク毎に独自の環境を差し込む。

luaL_openlibsに関しちゃ対象がグローバル環境決め打ちのサポート関数でしかないんで
どのみち使えないんだけど、そこはチャンクの環境に差し替えるテーブルの__indexにフックかけて
グローバル環境に委譲してしまうって感じでどうか。

これならlocalをつけない変数宣言はチャンク毎の独自の環境に登録されるだけなので
グローバル環境の汚染も防げる。やってることはmodule関数と大体いっしょ。

コード書いて検証したわけじゃないのでうまくいくかは知らんw

473 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 13:01:22 ]
--ライブラリ等のテーブル_Gと、スクリプト側のenvironmentを分ける
local metatable = { __index = _G }
local chunk = loadfile(filename)
local environment = {}
setmetatable(environment, metatable)
setfenv(chunk, environment)
--Cを使えばなんでもできるので、ダイナミックリンク禁止
environment.require = function() end
environment.package = {}
return chunk()

474 名前:469 mailto:sage [2009/11/21(土) 13:11:20 ]
>>473
なるほど、こうやるのですか。
ありがとう!

475 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 10:32:35 ]
ゲーム内にN個のオブジェクトが存在する。
それぞれのオブジェクト固有の状態を保存するために、Cプログラム側でN個のテーブルを用意する。
オブジェクトの行動を定義したluaファイルをロードしてlua_Stateインスタンスを作る。
オブジェクトはN個だが、このインスタンスは1つしか作らない(みんな行動パターンは共通なので)
で、個々のオブジェクトの状態を更新するときに、そのオブジェクトに対応するテーブルを引数にして
lua関数を呼び出し、テーブルを更新させる。

というのをやりたいのですが、N個のテーブルを作るのが「?」です。
テーブル作ってスタックに積むのはいいんですが、なんせスタックに積むわけですから、
どこかの操作で勝手にPOPされたり、消えたりしませんかね??


476 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 12:35:08 ]
>>475
そういう用途のためにレジストリとリファレンスの機構が存在する。

1. 任意のオブジェクト(この場合はテーブル)を作る
2. int table = luaL_ref(state, LUA_REGISTRYINDEX); でレジストリに該当テーブルを格納してリファレンスを取得。
  オブジェクトはスタックからは解放されて、レジストリテーブルでのみ保持された状態になる。
リファレンス値は全体でユニークで、C 側でそのままオブジェクトを区別しつつ単純保持するのに使える
3. 使いたい場面(この場合は引数として渡す時)では、
lua_rawgeti(state, LUA_REGISTRYINDEX, table) としてレジストリからスタックに取り出してきて使う
4. 最後破棄する場合は luaL_unref(state, LUA_REGISRYINDEX, table) として解放させる

N個つくるならこんなかんじで
// テーブル確保
int table[N];
for (int i=0;i<N;i++) {
lua_newtable(state);
table[i] = luaL_ref(state, LUA_REGISTRYINDEX);
}
// 例えば table[0] をわたして関数を呼ぶ
lua_getfield(state, LUA_GLOBALSINDEX, "func"); // 関数取得
lua_rawgeti(state, LUA_REGISTRYINDEX, table[0]); // 引数としてつむ
lua_call(state, 1, 0); // 引数1戻り値無し
// テーブル解放
for (int i=0;i<N;i++) {
luaL_unref(state, LUA_REGISTRYINDEX, table[i]);
}

ちなみに squirrel だとオブジェクトのリファレンスを、直接C側から HSQOBJECT としてスタックから取得して
保持できる。概念としてはこっちのがシンプル。


477 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 03:18:07 ]
ぶった切りすいません

luaは組み込みに最適だと思うんですが、
lua単独でGUIを表示してゲームを作り、実行ファイル(exe)に変換はできるのでしょうか?

もしできるなら、教えてください。
ぐぐっても探すことができなかったので・・・



478 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 04:22:36 ]
自前で組み込むの前提の言語でそういうもの作ってもあまり嬉しくないのでだれも作ってないと思います

479 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 05:02:50 ]
言ってることが良く分からないが、Lua単独ではGUIは無理だと言っておく
そもそもこのスレで紹介されてる言語は、用途を特定しないスクリプトであって組み込んでどのように動かすかはその人次第
そういう用途なら○○ツクールやHSPにしておきなさいな

480 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 08:23:05 ]
厳密には単独ではないけど、Luaのモジュールか何かでSDL使うのとか無かったっけ?

481 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 09:34:33 ]
自分でGUI処理の組み込み部分を作り、スクリプトリソースをリンクすれば、
単独exeに出来るだろ。

482 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 10:12:43 ]
>>477
その用途なら、Pythonじゃね?

483 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 12:08:15 ]
I think so.

484 名前:477 mailto:sage [2009/11/23(月) 16:28:01 ]
みなさん、レスありがとうございます。

どうしてもluaでゲームを開発しなくてはいけない状況なのです。
ウィンドウの表示がわからないため、苦戦しています。
どの参考書を読んでも書いてなくて。

別の言語にウィンドウを作らせて、動作はLUAだけで、などでできますでしょうか?

485 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:30:06 ]
>>484
なんでできないと思うの?

486 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:38:15 ]
>>485
レスありがとう

みんなやってないし、コマンドプロンプト上か
ほかの言語に組み込むだけのものかと思いまして・・・

487 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:46:43 ]
aims.dna-softwares.com/
こことか見てみ
Luaを主体にしたゲームエンジン作って、このサークルのソフトは殆どLuaで作られてる

それにしても、その知識量からどうしてもLuaで作らなきゃいけない状況が発生するなんて
いったいどんな大見得切ったんだよ



488 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:53:23 ]
参考書読んだのなら、Luaを使っている人がどのような目的と仕組みで走らせるのかは理解した?
あくまで組み込みスクリプトなんだよ?
ウィンドウズを表示するという関数を組み込んでもらって、
Luaにインターフェース提供してもらわないとprintやscanすらままならないよ
ゲーム開発でスクリプタとして働くのならLuaの言語仕様を覚えるのと、PGからバインドした関数一覧もらってこれば良いよ

489 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:00:01 ]
レスありがとう

正直、大学のゼミでこの言語を使うということに決めたんです
いくつもある言語から選んで、luaを選んだのは自分だけ。
頼る人もいないので、本とネットで勉強してるかんじです。

>>487
サンプルをdlして参考にしていますが、難しい。
もっとじっくり読んでみます。

>>488
用途は理解しているつもりですが、これをメインにしてプログラムを組んでいかなくてはいけなくて・・・
やはり、ウィンドウを表示する関数をCなどで書いて、luaからその関数を持ってくることが一番楽なんですかね。

490 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:11:31 ]
明日、学校でごめんなさいして
もっと詳しくて質問できる奴のいる言語で
最初からやり直す方がましのような気がする。

491 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:13:36 ]
>>490
それはしたくないというか、結構この言語は気に入っているので辞めたくないんですよ

492 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:17:17 ]
それでここきてなんとかしようなんてあますぎる

493 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:18:29 ]
C側とのデータのやり取りがめんどいから余り良い言語とは・・・

494 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:26:23 ]
>>489
> やはり、ウィンドウを表示する関数をCなどで書いて、luaからその関数を持ってくることが一番楽なんですかね。

Lua を使うと言って、こういったバインド系の作業はしたくないとか、意味がわからん。
もともとそうやって使う言語だろうに。

「みんなやってない」とか言ってるが、何個のプロジェクトを見て言ってるのか怪しいもんだ。

495 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:26:36 ]
Luaの言語を理解して使えるようになる手間を1とすると、
ゲーム用のC/C++ライブラリを組むのが最低10倍〜ぐらい手間も時間かかるよ
Win32APIからDirectXかOpenGLまで使えるようにならないと話にならない
ゲームライブラリは既存のものでいいならC素人ならDXライブラリを組み込むのが多分もっとも最短だと思う
ゼミテーマが「組み込みスクリプト研究」で実例として「ゲーム」を選んだのなら、外部ライブラリにどっぷり頼っていったほうが幸せだとは思う

496 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:27:39 ]
怒られたくなくて嘘を付いている幼児じゃあるまいし
無理せず諦めておけよ

497 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:33:10 ]
>>493
つまりAngelScriptがいいって事ですね。
わかります。



498 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:42:29 ]
自分の実力より遙かに上の事をやろうとしても無駄になるだけだぞ
ちょっと上ならともかく分不相応すぎ。諦めろ

499 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:48:07 ]
Luaじゃ宿題スレも使えないしねえ。
(答える奴はどうせこのスレも見てる)

500 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 18:23:45 ]
HSPスレに逝けよ

501 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 21:35:31 ]
とりあえず、この本みてみて、何とかなるか考えてみたら。

スクリプト言語による効率的ゲーム開発 C/C++へのLua組込み実践
www.amazon.co.jp/dp/4797348550
サポートページ
lua.mine.nu/w/LuaBookSupport

どうなんだろうなあ。

502 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 21:46:36 ]
ttp://en.wikipedia.org/wiki/Category:Lua-scriptable_game_engines
Luaでルーチンいじれるゲームとかゲームエンジンとかあるけど
日本語の資料があんまりないと思う

503 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 10:46:49 ]
Lua for Windows: A batteries included Lua installation on Windows.
luaforwindows.luaforge.net/
これいっこダウンロードしてインストールすれば、
GUI から OpenGL から DB 接続までなんでもはじめから入ってるよ。
ウィンドウ作る程度なら、サンプルそのまま使える。

504 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 07:48:34 ]
Pawn始める人への組み込みメモ(修正版)
// .amxファイル(コンパイル済みPawnバイナリ)を実行するための最小コード。
// 必要ファイル: amx.c/h amxaux.c/h amxcons.c/h amxcore.c osdefs.h
#include "amx.h"
#include "amxaux.h"
#include <stdio.h>
AMX_NATIVE_INFO console_Natives[];
AMX_NATIVE_INFO core_Natives[];
int main(int argc, char *argv[]) {
 AMX amx;
 cell ret = 0;
 if (aux_LoadProgram(&amx, "test.amx", NULL) != AMX_ERR_NONE) exit(1);
 if (amx_Register(&amx, console_Natives, -1)) exit(1);
 if (amx_Register(&amx, core_Natives, -1)) exit(1);
 if (amx_Exec(&amx, &ret, AMX_EXEC_MAIN)) exit(1);
 printf("%ld\n", (long)ret);
 aux_FreeProgram(&amx);
 return 0;
}





505 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 07:49:39 ]
// Pawnコンパイラの最小プロジェクト
// 必要ファイル: libpawnc.c lstring.c/h memfile.c/h sc1.c〜sc7.c sc.h sc5.scp sc7.scp scexpand.c sci18n.c sclist.c scmemfil.c scstate.c scvars.c svnrev.h
// それに加えて ../amx でアクセスできる場所に osdefs.h amxdbg.h が必要
// 実行時にsc1.cのsetconfig()あたりでNULLエラーが発生するなら[プロジェクトの設定->構成プロパティ->全般->文字セット]でUnicodeを無効にしておく
#include "sc.h"
int main(int argc, char *argv[])
{
return pc_compile(argc, argv);
}


506 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 14:11:52 ]
luabindを使っていて気になったのですが、

//cpp
struct A {
 int x;
};
A *ptr;
A& ref() { return *ptr; };
A a;
luabind::module(L) [
 luabind::def("ref", &ref),
 luabind::class_<A>("A")
  .def_readwrite("x", &A::x)
];
];
--lua
v = ref()
v.x = 1 --参照なのでC側のaにアクセスできる

クラスのインスタンスの参照を渡すときに、上の様に一度staticかglobalな変数
(上の場合ptr)を経由させる方法しか思いつかなかったのですが、ダイレクトに
渡す方法は無いものでしょうか?

507 名前:506 mailto:sage [2009/11/25(水) 14:14:17 ]
訂正

A a;
ptr = &a;
luabind::module(L) [
 luabind::def("ref", &ref),
 luabind::class_<A>("A")
  .def_readwrite("x", &A::x)
];



508 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 17:56:07 ]
Lua詳しくないんでアレだが、lua_pushlightuserdataではダメなの?


509 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 09:43:19 ]
Luaで実行状態を全部ファイルに保存して、また復帰するようなことは可能ですか?

510 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 10:10:30 ]
>>509
Lua側でioで記録、読み込みするコード書くしかないかも

511 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 10:18:51 ]
Smalltalkなら可能です

512 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 11:32:21 ]
>>509
言語機能としてはないので、無理やりやることになる。

一応こういうのはあるけど、安定してるかどうかは不明。
lua-users.org/wiki/PlutoLibrary

513 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 13:19:28 ]
>>508
試してみましたが、luabindではligthuserdataではなくuserdataを使用して
独自の型ID等を付加してチェックしているようで、無理でした。
luabindのソースを追ってみたところ、luabind::detail::convert_to_luaで
C++側の変数の参照をluaのスタックに積めることが分かったので、
これでどこかのテーブルに置くとか引数で渡すとかの方法が使えそうです。
luabindのドキュメントにもサンプルにも、こういったスタックを使う方法が
記載されていないので、本来の使い方とは違う気もしますが。

514 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 13:24:32 ]
>>513
通常、スクリプトにはC++クラス型のインスタンスのポインタを渡してポインタで操作させる。
C++の参照はC++固有の機能なので他の言語では使えないと考えたほうがいい。
別の変数に代入した瞬間(参照で無く実体のコピーとして)にコピーコンストラクタが発動したって文句言えないぞ。

まあバインダがエラー吐いてコンパイルの段階で失敗すると思うが。

515 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 13:29:57 ]
休止モードを呼び出せばいいんだよ。

516 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 14:09:30 ]
>>514
bind側に参照を渡した場合は、ポインタに変換して管理してるみたいですね。

517 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 08:47:27 ]
>>510 >>512
ありがとうございます。
Pluto調べてみます。



518 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 09:36:22 ]
LuaでGUIムリだろと思ってたら、意外とバインダが出てくるもんだなw
お前ら優しすぎw

519 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 10:21:52 ]
小学生に方程式ムリだろと思ってたら、意外と鶴亀算が出てくるようなもんだな

520 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 11:31:33 ]
最近はメインループのかなりの部分まで組み込みスクリプトで作っちゃうのが主流になりつつあるのかな。

521 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 12:02:53 ]
Luaだと入力補完のあるエディタが無いから
逆にやり難いと感じる俺

522 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 12:11:48 ]
>>520
大半を組み込み言語化した結果、パフォーマンスの壁にぶちあたって
機能分離可能なところはどんどんC++化していく、ってのが定番だとオモ

サンプル:俺

523 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 12:45:05 ]
まあ通常、動的(型付け)言語はネイティブコードと比べて10倍以上は遅いからな。
オレもスクリプトでゲーム開発環境を一通り書き上げたところだが、
60フレームまわしたらそれだけで意外にCPU食ってしまうので、ちと困ってる。
最低ラインがPentium 4 2.4GHzくらいになった。

524 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 14:49:37 ]
JIT付き静的型付けスクリプト言語
穴場だから誰か作れば
有名になれるかもよ

525 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 15:10:52 ]
>>524
すでにあるっちゅうねん。
.NET Framework向けだがな。

526 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 15:54:13 ]
>>.NET Framework向けだがな。

駄目じゃん

527 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 16:18:55 ]
作りたいと本気で思ってる俺が来ましたよ
もし作るならスクリプトで定義したクラスのインスタンスがC++から簡単に作れて、マルチスレッドとか使って同時に複数のインスタンスを参照してもおかしくならない仕様にしたいな



528 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 16:46:03 ]
つAngelScriptJIT
ただしやり方は不明。

529 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 18:52:02 ]
LuaJIT ってなかったっけ?






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

前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