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

387 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 22:20:25 ]
Pawnコンパイラのビルド方法
--
CMakeダウンロードする
CMakeインストールする
CMake起動する
"Browse Source"をクリックし、実行環境をビルドするなら<pawn>\source\amxを指定する。Pawnコンパイラをビルドするなら<pawn>\source\compilerを指定する
"Browse Build"をクリックし、適当な出力フォルダを指定する(以下、<out> と表現する)
"Configure"をクリックし、VisualC++ネイティブを選択する。エラーが起きても、もう一度 ConfigureをクリックするとGenerateボタンが有効になる。
"Generate"をクリックしてファイルを生成する
<out>にVC++用のプロジェクトファイルができている
ソースに<pawn>\source\compilerを指定した場合、<out>にはpawnc.slnができている。それをVCで開いてビルドする。
..\bin\pawn.icoが存在しませんとかエラーがでたら、該当場所に適当なアイコンファイルを入れておく。
<out>\Debugにpawnc.dllとpawncc.exeができている。それがコンパイラ。


388 名前:デフォルトの名無しさん mailto:age [2009/11/11(水) 23:56:32 ]
Goのビルドが早いらしいので期待age

389 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 00:07:43 ]
ttp://jp.techcrunch.com/archives/20091110google-go-language/

390 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 13:31:44 ]
そのGoって組み込みじゃないんじゃ・・・・

391 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 17:18:47 ]
ゴルーチン

392 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 23:59:48 ]
ttp://golang.org/doc/go_faq.html#Do_Go_programs_link_with_Cpp_programs

There is a “foreign function interface” to allow safe calling of
C-written libraries from Go code. We expect to use SWIG to
extend this capability to C++ libraries.

There is no safe way to call Go code from C or C++ yet.

組み込みまだ出来なさそう。あとは、luaみたいに使える方向性があるか分からない。
現在の対応はdarwinのx86/x86_64とlinuxのx86/x86_64/armとnative clientのような気がする

393 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 00:23:26 ]
you ain't gonna need it

394 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 11:03:02 ]
GCサポートとあるけどc++好きにはウケナイ気がする
GC無しでc++的にガチガチに使えるなら使いたい
c++は0xも控えてるしGoは微妙な位置に落ち着きそう

395 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 11:47:27 ]
そういや0xって後50日くらいで終了するんだなぁ



396 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 12:51:11 ]
C++0xはコンセプトを捨てて再調整中で、まだ時間がかかるようだ
最近はC++1xと呼ばれている・・・

397 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 12:52:17 ]
っていうか検索しにくさでDに勝負挑んでんの? って感じのネーミングなんだが……。

398 名前:397 mailto:sage [2009/11/13(金) 13:00:17 ]
あ、ごめんなさい誤爆。Dスレに投げたつもりだった……。

399 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 18:49:47 ]
Squirrelの画像検索のしにくさよりはましだろ

400 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 19:04:49 ]
16進数だと思って欲しいだって
びょーん?さんのお知らせ

401 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 02:54:01 ]
で、誰かPawnつかってみた? 激高速ぽいし、静的型付けで余計なバグも少なそうだし、かなり使えそうだけど…


402 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 21:13:23 ]
>>388
GoはLinuxとMacにしか対応していません。

403 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 21:54:06 ]
この手の組込スクリプトエンジンをShiftJIS対応させる場合、基本的にWindows用に組んじゃって大丈夫なのかな。
Unicode対応させる場合はWindowsだけじゃダメだよね?

404 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 23:22:05 ]
修正を公開するつもりが無いならどうしたって構わないよ
#ifで切り分けるくらいはしておけばいいんじゃないか

#if (defined WIN32)
 実装
#else
 naiyo!!
#endif

これならWindows以外で使いたい人が中を見て、流用できそうならそうすることも出来るだろう

405 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 23:56:52 ]
thx!



406 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 00:09:23 ]
>>404
上手くいけば公開しようかなと思ってる。
ただ、Windowsでしかプログラム組んでないんで、Linuxでもちゃんと動くようにするための技法とかさっぱりわからないんだ。

ちなみにShiftJIS対応は簡単だけど、Unicode対応はソースあちこちいじらないとダメなんで無理かも…

407 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 07:08:38 ]
UTF-8でもなければUCS2やUTF16でもなく、UNICODEと言っている時点で、
何にも分かってないのが丸わかりだからやめておけ。

408 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 08:00:11 ]
   /ヽ /ヽ
  ':' ゙''"  `':,
  ミ   ・ω・ ;,
 :; . っ     ,つLua!
  `:;      ,;'
   `( /'"`∪


409 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 08:10:51 ]
ぅあたんおはよう

410 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 10:48:18 ]
しかし、今時ShiftJISはねえなあw

411 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 11:48:04 ]
WindowsだとまだShiftJIS現役だしなぁ…

412 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 13:12:23 ]
WindowsのNTFSのファイル名とかUTF-8にする方法ある?

413 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 13:25:40 ]
それ以前に一つ確認しておくが、NTFSのファイル名のエンコードがどうなっているのかは理解しているのか?

414 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 14:27:33 ]
ICUとか無駄にでかいのを勧めてみる
そういう話じゃないんだろうけど、Windows依存の話はもう勘弁しておくれなんし

415 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 14:56:21 ]
ファイル名ってUNICODEじゃなくてmbcsだろ
mbcsにUTF-8そのまま突っ込んでもファイルは出来るが
望みのものにはならない訳で




416 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 15:05:36 ]
www-06.ibm.com/jp/domino01/mkt/cnpages7.nsf/page/default-007ACA9B

417 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 17:13:46 ]
>>415
Windowsは内部的には全部 Unicode で NTFS もUnicode。
Win32 API的には、Uincode な API と MBCS な API が両方同時に存在していて任意に選んで使う。

原理的にはエンコードが UTF-8 な Locale を指定すれば MBCS なAPIでそのまま使えるはずだが、
あいにくそんなロケールは定義されてない。もっとも、UTF-8 から Unicode へは単純に変換できるので、
Unicode な API をラッピングして使えば良いだけなので自前プログラム上で問題になることは特にはない。
自分のプログラムで文字列を char ベースで扱ってるなら、MFC の CString のような char <-> wchar_t 変換
対応したクラスを作ってAPI に渡す時はそれを介するようにしておけば良い

一般的にこの手の組み込み言語の場合「Unicode対応 」ってのはワイドキャラ化のこと。変換は全部入出力部で
処理してしまって、内部は全部 char ではなく wchar_t で処理を行うようにする。英数字もひらがなかたかな
漢字も同じ「1文字」として扱えるので、もろもろ概念や処理が楽になる。そのかわりメモリを喰らう。
Windows だと、Unicode な APIがあるのでこれで作業するのが定番。
UNIX 系OSは、Unicode API は存在してないので、API に渡す必要がある部分(ファイル名など)は
逆にMBCS に変換する必要があってそれなりに面倒だったりするが、これが C言語系における正道

「SJIS対応」だとパーサの類をいじって、\ とかの特殊文字のエスケープ対応を行う対応になる。
また、文字列系のクラスに、専用の mblen とか mbsubstr とかSJISとして1文字単位で扱える
専用の処理を足さないと実用上困る。正規表現系をまじめに対応とかすると死ねる。
「UTF-8対応」や「EUC対応」はASCII 的に安全な文字コードなのでパーサ部は通常いじる必要がないが、
文字列処理用に専用の命令系を足さないと実用性が低いのは SJIS対応と同じ。

古いプログラムを wchar_t 化するのは大変だけど、Unicode は扱いたい、といった場合にUTF-8 対応が行われる。

418 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 17:18:13 ]
ファイル名の場合、NFDにも注意ね

419 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 17:23:01 ]
>>418
OSX はさっさと直せよと思う。まじで

420 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 18:20:29 ]
Microsoftのコンパイラは wchar_t は2byteなので、全部一文字って訳にはいかないです
サロゲートペアに対応させようとかおもった場合は手動で処理してやらんとダメです。
少なくともVS2008時点では、_tcsincやCharNextといった ポインタを進める関数がサロゲートペアをちゃんと処理してくれない
(おそらくOSがサロゲートペアに対応する前のコードとの互換性を気にしてるのだろう)
もっとも、クロスプラットフォーム名コード書くなら、CharNextとか使わずに自前で処理してるだろうけど・・・

421 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 19:20:13 ]
書かれてる事の意味が解らないままレスする人多すぎ
ここが組み込み系言語のスレな事も考えず読んでる人も多すぎ

422 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:46:16 ]
>>420
落ち着いて考えるんだ。
組み込みスクリプトごときでサロゲートペアが関係してくるようなややこしい話がどれくらいある?
まあ、議論自体は有意義だとは思うが。

423 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:52:23 ]
素直にTRONコードを使え

424 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 23:33:37 ]
とりあえずVSで使う時に、文字セットを「Unicode文字セットを使用する」にしてちゃんと使えればそれでOkだな。
Squirrelはデフォでいけたが。

425 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 10:17:44 ]
知れば知るほどVSなんぞ捨てた方がマシ
UTF8はBOM有り前提とか諸々腐ってるし(VS2005までしか知らんけど)
Windows環境で作業しなきゃならんなら
gcc、devc++、エディタ、こんだけでいいよ



426 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 10:23:35 ]
>>425
お前……VisualStudioまともに使いこなせてないだけだろ?
UTF-8 BOM付きなんて使う機会ほとんどないぞ。

427 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 10:28:50 ]
VSでエンコード付きテキストエディタを指定するとUTF-8はシグネチャ付きとなしと両方選べる。
つまりどっちも扱える。

428 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 10:47:43 ]
IDEの方に問題は出ないが、VCのコンパイラ側がBOM無しだと、
文字コードの認識に失敗する。

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

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

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

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

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

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

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

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

Lua_State *L;

〜 一回load、callして使用 〜

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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



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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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


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

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

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

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

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

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



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

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

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

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

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


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

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

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

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

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

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

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

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

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




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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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






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

前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