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
376 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 10:58:55 ] Linuxでx64運用してるんだが、ファイルをHDD中でコピーするだけでファイルが壊れてしまう状態になって、 パーツを電源も含めて色々入れ換えてみたところ、 SATAケーブルをノイズに強いタイプに変更したら改善した。 残念ながら完全には直ってないようだけど、十分実用レベルには戻った。 資金に余裕ができたらHDD買い足してパーティションを作り直そう……。
377 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 10:59:54 ] おっと。スレ違いスマン。
378 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 09:41:07 ] pawnダウンロードして、マニュアル読みながらcmake使ってVC++用のプロジェクトファイル作るところまではできたんですが… プロジェクト開いても、なんかファイル構成がよくわからないです。 もしかしてこれ、コンパイラとVMが別のプロジェクトファイルになっているんでしょうか? luaみたいに、単純にヘッダファイルとlibファイルだけが欲しいんですが… もしかしてDLLしかない??
379 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 16:02:52 ] >>378 pawnについていいなと思い試してみたはいいものの 詳しく使おうとするにつれてファイル構成が?で 投げ出した俺と同じ状態だね 確かにあれはわかりにくい
380 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 02:12:15 ] >>371 asEP_SCRIPT_SCANNER の設定で何がどう変わるのか AngelScript 2.17.2 の ライブラリのソースを見てみたけど、単に 'あ' みたいなUTF-8の文字リテラルが 正しく読めるようになるだけっぽい。 "あいう" みたいな文字列リテラルは設定に関係なく1バイトずつ読んで処理してる。 ただし AS_DOUBLEBYTE_CHARSET プリプロセッサを有効にしてビルドしたライブラリで asEP_SCRIPT_SCANNER の設定が 0 だと、マルチバイト文字を考慮する。 >>367 が言っているように判定方法がマズいからShift_JISの半角カタカナを渡すと おかしな挙動になるだろうけど。 あと AngelScript 2.17.2 での asEP_SCRIPT_SCANNER の既定値は 1 っぽい。
381 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 16:15:58 ] となると、マルチバイト判定用のコールバック関数を登録できるような改造した方がいいのかな。 2箇所いじれば大丈夫っぽいし。
382 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 04:57:26 ] >>381 Xtalはそんな感じのことをやってますね。 初期化関数に渡す Setting クラスインスタンスの ch_code_lib メンバに 文字コードクラス(例:SJISChCodeLib)のインスタンスを渡すことで好きな 文字コードを選択できるようになってます。 SJIS, EUC, UTF8, UTF16, UTF32 の文字コードクラスは標準で用意してある模様。
383 名前:382 mailto:sage [2009/11/10(火) 05:09:58 ] > SJIS, EUC, UTF8, UTF16, UTF32 の文字コードクラスは標準で用意してある模様。 …とはいっても別に内部で文字コード変換をしてくれるわけじゃないから、 Windowsのマルチバイト文字セットで使うなら基本的にSJISを選ぶことになるだろうけど。 Unicode文字セットで使うなら、XtalライブラリをUnicode文字セットでビルドして、 文字コードクラスは指定しない(=デフォのまま)ことで正しい挙動になりそう。 もちろんその場合のスクリプトはUnicodeで書く&渡す。 連投&AngelScriptと直接は関係ない話でゴメン。
384 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 09:30:35 ] 試してないけどソース見る限り、UTF-16用の文字コードクラス使うと、 文字列長取得時にサロゲートペアのことも考慮してるようだ 他の文字コード用のも、一文字進めるとか比較とかも変えられるようにはしているようではあるが、 今のところ文字単位での文字列長取得しか違いはないようだ
385 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 11:02:15 ] AngelScript、TCHARとかにも対応できて、Unicodeとマルチバイトのどっちでもビルドできるようにしたいが、 かなりの大部分を修正しないとダメだなぁ… Squirrelは最初から対応してるみたいだけど。
386 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 22:18:49 ] // .amxファイル(コンパイル済みPawnバイナリ)を実行するための最小コード。これをビルドするためには // ダウンロードしてきたPawnのソースに含まれている amx.c, amx.h, amxaux.c, amxaux.h, amxcons.c, amxcore.c をプロジェクトに追加しておく #include "amx.h" #include "amxaux.h" #include <stdio.h> extern "C" AMX_NATIVE_INFO console_Natives[]; extern "C" AMX_NATIVE_INFO core_Natives[]; int main(int argc, char *argv[]) { AMX amx; cell ret = 0; if (aux_LoadProgram(&amx, "test.amx", NULL) != AMX_ERR_NONE) exit(1); if (amx_Register(&amx, console_Natives, -1)) exit(1); if (amx_Register(&amx, core_Natives, -1)) exit(1); if (amx_Exec(&amx, &ret, AMX_EXEC_MAIN)) exit(1); printf("%ld\n", (long)ret); aux_FreeProgram(&amx); return 0; }
387 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 22:20:25 ] Pawnコンパイラのビルド方法 -- CMakeダウンロードする CMakeインストールする CMake起動する "Browse Source"をクリックし、実行環境をビルドするなら<pawn>\source\amxを指定する。Pawnコンパイラをビルドするなら<pawn>\source\compilerを指定する "Browse Build"をクリックし、適当な出力フォルダを指定する(以下、<out> と表現する) "Configure"をクリックし、VisualC++ネイティブを選択する。エラーが起きても、もう一度 ConfigureをクリックするとGenerateボタンが有効になる。 "Generate"をクリックしてファイルを生成する <out>にVC++用のプロジェクトファイルができている ソースに<pawn>\source\compilerを指定した場合、<out>にはpawnc.slnができている。それをVCで開いてビルドする。 ..\bin\pawn.icoが存在しませんとかエラーがでたら、該当場所に適当なアイコンファイルを入れておく。 <out>\Debugにpawnc.dllとpawncc.exeができている。それがコンパイラ。
388 名前:デフォルトの名無しさん mailto:age [2009/11/11(水) 23:56:32 ] Goのビルドが早いらしいので期待age
389 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 00:07:43 ] ttp://jp.techcrunch.com/archives/20091110google-go-language/
390 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 13:31:44 ] そのGoって組み込みじゃないんじゃ・・・・
391 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 17:18:47 ] ゴルーチン
392 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 23:59:48 ] ttp://golang.org/doc/go_faq.html#Do_Go_programs_link_with_Cpp_programs There is a “foreign function interface” to allow safe calling of C-written libraries from Go code. We expect to use SWIG to extend this capability to C++ libraries. There is no safe way to call Go code from C or C++ yet. 組み込みまだ出来なさそう。あとは、luaみたいに使える方向性があるか分からない。 現在の対応はdarwinのx86/x86_64とlinuxのx86/x86_64/armとnative clientのような気がする
393 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 00:23:26 ] you ain't gonna need it
394 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 11:03:02 ] GCサポートとあるけどc++好きにはウケナイ気がする GC無しでc++的にガチガチに使えるなら使いたい c++は0xも控えてるしGoは微妙な位置に落ち着きそう
395 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 11:47:27 ] そういや0xって後50日くらいで終了するんだなぁ
396 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 12:51:11 ] C++0xはコンセプトを捨てて再調整中で、まだ時間がかかるようだ 最近はC++1xと呼ばれている・・・
397 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 12:52:17 ] っていうか検索しにくさでDに勝負挑んでんの? って感じのネーミングなんだが……。
398 名前:397 mailto:sage [2009/11/13(金) 13:00:17 ] あ、ごめんなさい誤爆。Dスレに投げたつもりだった……。
399 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 18:49:47 ] Squirrelの画像検索のしにくさよりはましだろ
400 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 19:04:49 ] 16進数だと思って欲しいだって びょーん?さんのお知らせ
401 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 02:54:01 ] で、誰かPawnつかってみた? 激高速ぽいし、静的型付けで余計なバグも少なそうだし、かなり使えそうだけど…
402 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 21:13:23 ] >>388 GoはLinuxとMacにしか対応していません。
403 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 21:54:06 ] この手の組込スクリプトエンジンをShiftJIS対応させる場合、基本的にWindows用に組んじゃって大丈夫なのかな。 Unicode対応させる場合はWindowsだけじゃダメだよね?
404 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 23:22:05 ] 修正を公開するつもりが無いならどうしたって構わないよ #ifで切り分けるくらいはしておけばいいんじゃないか #if (defined WIN32) 実装 #else naiyo!! #endif これならWindows以外で使いたい人が中を見て、流用できそうならそうすることも出来るだろう
405 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 23:56:52 ] thx!
406 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 00:09:23 ] >>404 上手くいけば公開しようかなと思ってる。 ただ、Windowsでしかプログラム組んでないんで、Linuxでもちゃんと動くようにするための技法とかさっぱりわからないんだ。 ちなみにShiftJIS対応は簡単だけど、Unicode対応はソースあちこちいじらないとダメなんで無理かも…
407 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 07:08:38 ] UTF-8でもなければUCS2やUTF16でもなく、UNICODEと言っている時点で、 何にも分かってないのが丸わかりだからやめておけ。
408 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 08:00:11 ] /ヽ /ヽ ':' ゙''" `':, ミ ・ω・ ;, :; . っ ,つLua! `:; ,;' `( /'"`∪
409 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 08:10:51 ] ぅあたんおはよう
410 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 10:48:18 ] しかし、今時ShiftJISはねえなあw
411 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 11:48:04 ] WindowsだとまだShiftJIS現役だしなぁ…
412 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 13:12:23 ] WindowsのNTFSのファイル名とかUTF-8にする方法ある?
413 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 13:25:40 ] それ以前に一つ確認しておくが、NTFSのファイル名のエンコードがどうなっているのかは理解しているのか?
414 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 14:27:33 ] ICUとか無駄にでかいのを勧めてみる そういう話じゃないんだろうけど、Windows依存の話はもう勘弁しておくれなんし
415 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 14:56:21 ] ファイル名ってUNICODEじゃなくてmbcsだろ mbcsにUTF-8そのまま突っ込んでもファイルは出来るが 望みのものにはならない訳で
416 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 15:05:36 ] www-06.ibm.com/jp/domino01/mkt/cnpages7.nsf/page/default-007ACA9B
417 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 17:13:46 ] >>415 Windowsは内部的には全部 Unicode で NTFS もUnicode。 Win32 API的には、Uincode な API と MBCS な API が両方同時に存在していて任意に選んで使う。 原理的にはエンコードが UTF-8 な Locale を指定すれば MBCS なAPIでそのまま使えるはずだが、 あいにくそんなロケールは定義されてない。もっとも、UTF-8 から Unicode へは単純に変換できるので、 Unicode な API をラッピングして使えば良いだけなので自前プログラム上で問題になることは特にはない。 自分のプログラムで文字列を char ベースで扱ってるなら、MFC の CString のような char <-> wchar_t 変換 対応したクラスを作ってAPI に渡す時はそれを介するようにしておけば良い 一般的にこの手の組み込み言語の場合「Unicode対応 」ってのはワイドキャラ化のこと。変換は全部入出力部で 処理してしまって、内部は全部 char ではなく wchar_t で処理を行うようにする。英数字もひらがなかたかな 漢字も同じ「1文字」として扱えるので、もろもろ概念や処理が楽になる。そのかわりメモリを喰らう。 Windows だと、Unicode な APIがあるのでこれで作業するのが定番。 UNIX 系OSは、Unicode API は存在してないので、API に渡す必要がある部分(ファイル名など)は 逆にMBCS に変換する必要があってそれなりに面倒だったりするが、これが C言語系における正道 「SJIS対応」だとパーサの類をいじって、\ とかの特殊文字のエスケープ対応を行う対応になる。 また、文字列系のクラスに、専用の mblen とか mbsubstr とかSJISとして1文字単位で扱える 専用の処理を足さないと実用上困る。正規表現系をまじめに対応とかすると死ねる。 「UTF-8対応」や「EUC対応」はASCII 的に安全な文字コードなのでパーサ部は通常いじる必要がないが、 文字列処理用に専用の命令系を足さないと実用性が低いのは SJIS対応と同じ。 古いプログラムを wchar_t 化するのは大変だけど、Unicode は扱いたい、といった場合にUTF-8 対応が行われる。
418 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 17:18:13 ] ファイル名の場合、NFDにも注意ね
419 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 17:23:01 ] >>418 OSX はさっさと直せよと思う。まじで
420 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 18:20:29 ] Microsoftのコンパイラは wchar_t は2byteなので、全部一文字って訳にはいかないです サロゲートペアに対応させようとかおもった場合は手動で処理してやらんとダメです。 少なくともVS2008時点では、_tcsincやCharNextといった ポインタを進める関数がサロゲートペアをちゃんと処理してくれない (おそらくOSがサロゲートペアに対応する前のコードとの互換性を気にしてるのだろう) もっとも、クロスプラットフォーム名コード書くなら、CharNextとか使わずに自前で処理してるだろうけど・・・
421 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 19:20:13 ] 書かれてる事の意味が解らないままレスする人多すぎ ここが組み込み系言語のスレな事も考えず読んでる人も多すぎ
422 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:46:16 ] >>420 落ち着いて考えるんだ。 組み込みスクリプトごときでサロゲートペアが関係してくるようなややこしい話がどれくらいある? まあ、議論自体は有意義だとは思うが。
423 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:52:23 ] 素直にTRONコードを使え
424 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 23:33:37 ] とりあえずVSで使う時に、文字セットを「Unicode文字セットを使用する」にしてちゃんと使えればそれでOkだな。 Squirrelはデフォでいけたが。
425 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 10:17:44 ] 知れば知るほどVSなんぞ捨てた方がマシ UTF8はBOM有り前提とか諸々腐ってるし(VS2005までしか知らんけど) Windows環境で作業しなきゃならんなら gcc、devc++、エディタ、こんだけでいいよ
426 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 10:23:35 ] >>425 お前……VisualStudioまともに使いこなせてないだけだろ? UTF-8 BOM付きなんて使う機会ほとんどないぞ。
427 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 10:28:50 ] VSでエンコード付きテキストエディタを指定するとUTF-8はシグネチャ付きとなしと両方選べる。 つまりどっちも扱える。
428 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 10:47:43 ] IDEの方に問題は出ないが、VCのコンパイラ側がBOM無しだと、 文字コードの認識に失敗する。
429 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:18:43 ] ttp://msdn.microsoft.com/ja-jp/library/xwy0e8f2%28VS.100%29.aspx BOM無しUTF-8の時 文字コードの認識に失敗するんじゃなくて、そもそも対応していないだけ IDEでBOM無しUTF-8で保存可能なのは、ドキュメントとか編集するときのためだろうか?
430 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:42:08 ] Squirrel 2.2.4 stable来てるね 3.0もbeta1になった
431 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:19:38 ] おー、Squirrelのバージョンアップまじか 色々バグ修正されてるのかな BuildとShift-JISパッチ入れるのめんどくさいけど、今夜試してみるわ
432 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 04:33:19 ] >>429 WEBの世界だとそれが標準だからだと思うよ>BOM無しUTF-8で保存可能 Visual Web Developper あわせの対応であって、VC はスルーされてるってことかと。 コンシューマ機が UTF-8 ベースに移ってるのでそれあわせでコード共有しようとするときに地味に困る > VC がUTF-8をまともに扱えない BOM つけると今度は gcc がこけるんだぜ……
433 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 10:47:44 ] LuaでLua_Stateの解放をせずに、グローバル変数等の環境を個別に初期化する サンプルはどこかにないでしょうか?
434 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 11:56:04 ] グローバル環境を空のテーブルに置き換えるのって 普通にできんかったっけ?
435 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 12:37:17 ] じゃあこんな感じで良いのかな? Lua_State *L; 〜 一回load、callして使用 〜 lua_newtable(L); lua_setfenv(L, LUA_GLOBALSINDEX); //グローバル変数だけ初期化される? lua_gc(L, LUA_GCCOLLECT, 0); //念のためにGCも走らせるべき? 〜 Lにまたloadして再利用 〜
436 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 18:16:26 ] 426の読解力に溜息が出るよ
437 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 08:36:36 ] >>429 UTF-8てそもそも既存のシステムに手をなるべく加えないで動かすための文字コードじゃないのか? よくわからんな
438 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 08:45:59 ] そもそも文字列はハードコーディングするべきじゃない。 外部リソースとして、入出力時にコードを調整すればいいだけのこと。
439 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 08:49:56 ] print loadstring(0x34d3a6b8); こんなプログラミングが歓迎されるんですね
440 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 09:00:17 ] >435 を試してみたのですが、lua_setfenvだとグローバル環境の操作は無理なようです。 グローバル環境テーブル全体に対する操作関数って無いのでは?
441 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 09:34:40 ] >>438 スクリプトを読み込んだ際に特定の文字コードに変換して、内部の処理はその文字コードで統一って感じかな? だとすると、何に変換するのがいいんだろう。UTF16?
442 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 09:47:54 ] スクリプトファイルは基本UTF-8、 ネイティブに引き渡すときはUTF-16、面倒ならUCS2にするのが一番問題が少ない。
443 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 11:51:20 ] >>437 その恩恵にあやかれるのはASCIIコードしか使ってない欧米人だけだけどな。 非ASCIIコード圏は、既存のエンコード方式と区別ができないので余計に混乱する。 全てのプレーンテキストがUTF-8に置き換わるまでの過渡期は、BOM付きUTF-8が 一番無難な選択だと思うけどね。 俺はWindows上でgccとか使わないので、FTPクライアントにBOMの有無を変換する 機能さえついてくれればあまり問題ない。 もっとも、MSは独自にBOM付きUTF-8を強行するのではなく、非ASCIIコード圏で 過渡期にはBOMが必要であることを訴えて、規格に盛り込ませるべきだと思うが。
444 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:26:22 ] >>437 「ファイルの中身」自体が最大のレガシーシステム。だから UTF-8 が使われるようになってる。 日本人は一度 SJIS やら EUC やらで通った道をもっかい世界規模で通り直してるだけではある >>438 なにが一番困るって、ファイル名中の「コメント」 コメントに日本語つかうな?ごもっとも(苦笑)
445 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:27:06 ] ファイル名中じゃねえ、ファイル中
446 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:31:33 ] >>443 > 全てのプレーンテキストがUTF-8に置き換わるまでの過渡期は、BOM付きUTF-8が > 一番無難な選択だと思うけどね。 この上の記述はわかるし、それはよくわかるんだが、 実際はBOM付きでトラブることが多くて、俺は折れたわw BOMなしで上手く行くようにすべき
447 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:44:29 ] あ、437 のいってること完全によみちがえてたや。すまん。 動作上は問題ないに決まってるんだから、ツールで対応できない意味がわからんってことだな。 既存エンコードと混在したのを自動判定する必然性は別にないんだから、 ツール側に「MBCSではなくUTF-8として扱う」スイッチだけつければすむことだ。 MS1社が対応するだけで世界は平和になるんだからさっさとそうしてくれってことだな
448 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:56:28 ] >>443 もう手遅れ MSがいまだにSJISを強行している時点で終わってる
449 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 13:38:56 ] SJISを強行しているように見えるのはロケールを日本語にして使っているからなんだが、 なんでそんなに視野が狭いんだろう? ちなみにOSのロケールを英語にすると、UTF-8も無しでコンパイルが通るぞ。
450 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 13:40:42 ] BOM無しで
451 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 13:58:43 ] thx! おまいあたまいいな
452 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:03:05 ] >>449 L"日本語" って正しく通る?
453 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:12:51 ] ロケール変えて見た こりゃええわw まともなアプリと糞アプリの違いが一目瞭然になったw
454 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:16:50 ] やっぱりコマンドプロンプトは糞のままだったw
455 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:23:06 ] boost.cppll.jp/HEAD/ このサイトが初めてエンコード選ばなくても 日本語で文字化けせずに表示されましたw ほんとうにありがとうございましたw
456 名前:デフォルトの名無しさん [2009/11/20(金) 14:24:23 ] 日記はチラ裏で
457 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:41:12 ] >>455 ブラウザの文字エンコードが正しく認識できないって、どこの田舎ものやねん……。
458 名前:デフォルトの名無しさん [2009/11/20(金) 14:42:25 ] >>454 cmd.exeはフォントを日本語にすれば治る cygwinのbashはスクロールがおかしくなるが英語ロケールでインストールし直すと治るのかもしれないがやっていない しかしいかに日本のWindowsアプリケーションが日本語=SJISで決め打ち(mbcs)しているかが良くわかるね 本来はhogehogeW()を呼ばないといけないところをhogehogeA()で済ませちゃってるんだろうな mbcsでもSJISだとそれで動いちゃうから日本語ロケールだと気付かないし気にならないんだね 正しいプログラムの作り方についてもう一度勉強しなおす(日本のMSががんばってアナウンスする)必要があるんじゃないかな
459 名前:デフォルトの名無しさん [2009/11/20(金) 14:47:32 ] >>457 ああごめん ここのことね boost.cppll.jp/HEAD/libs/date_time/doc/BuildInfo.html
460 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:50:07 ] スレ違い
461 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 17:39:18 ] 質問どうぞ
462 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 20:08:17 ] >>440 lua_replace(L, LUA_GLOBALSINDEX) ならどう?
463 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 08:14:53 ] >>462 できました! ありがとうございます
464 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 09:04:14 ] Luaのテーブルってキーを使ってアクセスするようになってますが、 キーが分からない場合に全ての項目を調べたい時のサンプルってありますか?
465 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 09:14:26 ] for k,v in pairs(t) do hoge(k,v) end
466 名前:463 mailto:sage [2009/11/21(土) 09:49:37 ] >462 でグローバル環境を空にはできましたが、 これだけだと再使用ができないような? このあとlua_openlibsを使っても標準ライブラリが使用できません。 Lua_Stateをcloseせずに再使用するのは大変みたいですね。
467 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 10:09:26 ] >>465 thx pairsやnextでなめれるんですね
468 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 10:14:16 ] lua_openlibは副作用でレジストリにも変更加えるからじゃね? 走らせたいチャンクを一旦スタックに積んで そいつの環境を置き換えるのはどう?
469 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 10:56:34 ] >>468 具体的なやり方が今一思いつきません。 load〜で積んだあとに空の環境に置き換えるって意味じゃないですよね?
470 名前:469 mailto:sage [2009/11/21(土) 11:03:04 ] そもそもスクリプト側で使ったグローバル"変数"だけ初期化して ライブラリ等のテーブルは使いまわせたらlua_Stateの再構築の コストを減らせて、細かいスクリプトの連続呼び出しに良いのではと 考えていたんですが、Luaは変数も関数もその他色々もテーブル分けて ないので、選択的に変数だけで消すのに無理がある気が・・・
471 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 11:04:51 ] 何でデフォの宣言がglobalなんだろうかね・・・
472 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 11:52:21 ] >>469 いや、そういう意味。走らせるチャンク毎に独自の環境を差し込む。 luaL_openlibsに関しちゃ対象がグローバル環境決め打ちのサポート関数でしかないんで どのみち使えないんだけど、そこはチャンクの環境に差し替えるテーブルの__indexにフックかけて グローバル環境に委譲してしまうって感じでどうか。 これならlocalをつけない変数宣言はチャンク毎の独自の環境に登録されるだけなので グローバル環境の汚染も防げる。やってることはmodule関数と大体いっしょ。 コード書いて検証したわけじゃないのでうまくいくかは知らんw
473 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 13:01:22 ] --ライブラリ等のテーブル_Gと、スクリプト側のenvironmentを分ける local metatable = { __index = _G } local chunk = loadfile(filename) local environment = {} setmetatable(environment, metatable) setfenv(chunk, environment) --Cを使えばなんでもできるので、ダイナミックリンク禁止 environment.require = function() end environment.package = {} return chunk()
474 名前:469 mailto:sage [2009/11/21(土) 13:11:20 ] >>473 なるほど、こうやるのですか。 ありがとう!
475 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 10:32:35 ] ゲーム内にN個のオブジェクトが存在する。 それぞれのオブジェクト固有の状態を保存するために、Cプログラム側でN個のテーブルを用意する。 オブジェクトの行動を定義したluaファイルをロードしてlua_Stateインスタンスを作る。 オブジェクトはN個だが、このインスタンスは1つしか作らない(みんな行動パターンは共通なので) で、個々のオブジェクトの状態を更新するときに、そのオブジェクトに対応するテーブルを引数にして lua関数を呼び出し、テーブルを更新させる。 というのをやりたいのですが、N個のテーブルを作るのが「?」です。 テーブル作ってスタックに積むのはいいんですが、なんせスタックに積むわけですから、 どこかの操作で勝手にPOPされたり、消えたりしませんかね??
476 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 12:35:08 ] >>475 そういう用途のためにレジストリとリファレンスの機構が存在する。 1. 任意のオブジェクト(この場合はテーブル)を作る 2. int table = luaL_ref(state, LUA_REGISTRYINDEX); でレジストリに該当テーブルを格納してリファレンスを取得。 オブジェクトはスタックからは解放されて、レジストリテーブルでのみ保持された状態になる。 リファレンス値は全体でユニークで、C 側でそのままオブジェクトを区別しつつ単純保持するのに使える 3. 使いたい場面(この場合は引数として渡す時)では、 lua_rawgeti(state, LUA_REGISTRYINDEX, table) としてレジストリからスタックに取り出してきて使う 4. 最後破棄する場合は luaL_unref(state, LUA_REGISRYINDEX, table) として解放させる N個つくるならこんなかんじで // テーブル確保 int table[N]; for (int i=0;i<N;i++) { lua_newtable(state); table[i] = luaL_ref(state, LUA_REGISTRYINDEX); } // 例えば table[0] をわたして関数を呼ぶ lua_getfield(state, LUA_GLOBALSINDEX, "func"); // 関数取得 lua_rawgeti(state, LUA_REGISTRYINDEX, table[0]); // 引数としてつむ lua_call(state, 1, 0); // 引数1戻り値無し // テーブル解放 for (int i=0;i<N;i++) { luaL_unref(state, LUA_REGISTRYINDEX, table[i]); } ちなみに squirrel だとオブジェクトのリファレンスを、直接C側から HSQOBJECT としてスタックから取得して 保持できる。概念としてはこっちのがシンプル。