【Lua】組み込み系言語総合 その2【Squirrel】
at TECH
[前50を表示]
400:デフォルトの名無しさん
09/11/13 19:04:49
16進数だと思って欲しいだって
びょーん?さんのお知らせ
401:デフォルトの名無しさん
09/11/14 02:54:01
で、誰かPawnつかってみた? 激高速ぽいし、静的型付けで余計なバグも少なそうだし、かなり使えそうだけど…
402:デフォルトの名無しさん
09/11/14 21:13:23
>>388
GoはLinuxとMacにしか対応していません。
403:デフォルトの名無しさん
09/11/15 21:54:06
この手の組込スクリプトエンジンをShiftJIS対応させる場合、基本的にWindows用に組んじゃって大丈夫なのかな。
Unicode対応させる場合はWindowsだけじゃダメだよね?
404:デフォルトの名無しさん
09/11/15 23:22:05
修正を公開するつもりが無いならどうしたって構わないよ
#ifで切り分けるくらいはしておけばいいんじゃないか
#if (defined WIN32)
実装
#else
naiyo!!
#endif
これならWindows以外で使いたい人が中を見て、流用できそうならそうすることも出来るだろう
405:デフォルトの名無しさん
09/11/15 23:56:52
thx!
406:デフォルトの名無しさん
09/11/16 00:09:23
>>404
上手くいけば公開しようかなと思ってる。
ただ、Windowsでしかプログラム組んでないんで、Linuxでもちゃんと動くようにするための技法とかさっぱりわからないんだ。
ちなみにShiftJIS対応は簡単だけど、Unicode対応はソースあちこちいじらないとダメなんで無理かも…
407:デフォルトの名無しさん
09/11/16 07:08:38
UTF-8でもなければUCS2やUTF16でもなく、UNICODEと言っている時点で、
何にも分かってないのが丸わかりだからやめておけ。
408:デフォルトの名無しさん
09/11/16 08:00:11
/ヽ /ヽ
':' ゙''" `':,
ミ ・ω・ ;,
:; . っ ,つLua!
`:; ,;'
`( /'"`∪
409:デフォルトの名無しさん
09/11/16 08:10:51
ぅあたんおはよう
410:デフォルトの名無しさん
09/11/16 10:48:18
しかし、今時ShiftJISはねえなあw
411:デフォルトの名無しさん
09/11/16 11:48:04
WindowsだとまだShiftJIS現役だしなぁ…
412:デフォルトの名無しさん
09/11/16 13:12:23
WindowsのNTFSのファイル名とかUTF-8にする方法ある?
413:デフォルトの名無しさん
09/11/16 13:25:40
それ以前に一つ確認しておくが、NTFSのファイル名のエンコードがどうなっているのかは理解しているのか?
414:デフォルトの名無しさん
09/11/16 14:27:33
ICUとか無駄にでかいのを勧めてみる
そういう話じゃないんだろうけど、Windows依存の話はもう勘弁しておくれなんし
415:デフォルトの名無しさん
09/11/16 14:56:21
ファイル名ってUNICODEじゃなくてmbcsだろ
mbcsにUTF-8そのまま突っ込んでもファイルは出来るが
望みのものにはならない訳で
416:デフォルトの名無しさん
09/11/16 15:05:36
URLリンク(www-06.ibm.com)
417:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/11/16 17:18:13
ファイル名の場合、NFDにも注意ね
419:デフォルトの名無しさん
09/11/16 17:23:01
>>418
OSX はさっさと直せよと思う。まじで
420:デフォルトの名無しさん
09/11/16 18:20:29
Microsoftのコンパイラは wchar_t は2byteなので、全部一文字って訳にはいかないです
サロゲートペアに対応させようとかおもった場合は手動で処理してやらんとダメです。
少なくともVS2008時点では、_tcsincやCharNextといった ポインタを進める関数がサロゲートペアをちゃんと処理してくれない
(おそらくOSがサロゲートペアに対応する前のコードとの互換性を気にしてるのだろう)
もっとも、クロスプラットフォーム名コード書くなら、CharNextとか使わずに自前で処理してるだろうけど・・・
421:デフォルトの名無しさん
09/11/16 19:20:13
書かれてる事の意味が解らないままレスする人多すぎ
ここが組み込み系言語のスレな事も考えず読んでる人も多すぎ
422:デフォルトの名無しさん
09/11/16 22:46:16
>>420
落ち着いて考えるんだ。
組み込みスクリプトごときでサロゲートペアが関係してくるようなややこしい話がどれくらいある?
まあ、議論自体は有意義だとは思うが。
423:デフォルトの名無しさん
09/11/16 22:52:23
素直にTRONコードを使え
424:デフォルトの名無しさん
09/11/16 23:33:37
とりあえずVSで使う時に、文字セットを「Unicode文字セットを使用する」にしてちゃんと使えればそれでOkだな。
Squirrelはデフォでいけたが。
425:デフォルトの名無しさん
09/11/17 10:17:44
知れば知るほどVSなんぞ捨てた方がマシ
UTF8はBOM有り前提とか諸々腐ってるし(VS2005までしか知らんけど)
Windows環境で作業しなきゃならんなら
gcc、devc++、エディタ、こんだけでいいよ
426:デフォルトの名無しさん
09/11/17 10:23:35
>>425
お前……VisualStudioまともに使いこなせてないだけだろ?
UTF-8 BOM付きなんて使う機会ほとんどないぞ。
427:デフォルトの名無しさん
09/11/17 10:28:50
VSでエンコード付きテキストエディタを指定するとUTF-8はシグネチャ付きとなしと両方選べる。
つまりどっちも扱える。
428:デフォルトの名無しさん
09/11/17 10:47:43
IDEの方に問題は出ないが、VCのコンパイラ側がBOM無しだと、
文字コードの認識に失敗する。
429:デフォルトの名無しさん
09/11/17 11:18:43
URLリンク(msdn.microsoft.com)
BOM無しUTF-8の時 文字コードの認識に失敗するんじゃなくて、そもそも対応していないだけ
IDEでBOM無しUTF-8で保存可能なのは、ドキュメントとか編集するときのためだろうか?
430:デフォルトの名無しさん
09/11/17 23:42:08
Squirrel 2.2.4 stable来てるね
3.0もbeta1になった
431:デフォルトの名無しさん
09/11/18 09:19:38
おー、Squirrelのバージョンアップまじか
色々バグ修正されてるのかな
BuildとShift-JISパッチ入れるのめんどくさいけど、今夜試してみるわ
432:デフォルトの名無しさん
09/11/19 04:33:19
>>429
WEBの世界だとそれが標準だからだと思うよ>BOM無しUTF-8で保存可能
Visual Web Developper あわせの対応であって、VC はスルーされてるってことかと。
コンシューマ機が UTF-8 ベースに移ってるのでそれあわせでコード共有しようとするときに地味に困る > VC がUTF-8をまともに扱えない
BOM つけると今度は gcc がこけるんだぜ……
433:デフォルトの名無しさん
09/11/19 10:47:44
LuaでLua_Stateの解放をせずに、グローバル変数等の環境を個別に初期化する
サンプルはどこかにないでしょうか?
434:デフォルトの名無しさん
09/11/19 11:56:04
グローバル環境を空のテーブルに置き換えるのって
普通にできんかったっけ?
435:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/11/19 18:16:26
426の読解力に溜息が出るよ
437:デフォルトの名無しさん
09/11/20 08:36:36
>>429
UTF-8てそもそも既存のシステムに手をなるべく加えないで動かすための文字コードじゃないのか?
よくわからんな
438:デフォルトの名無しさん
09/11/20 08:45:59
そもそも文字列はハードコーディングするべきじゃない。
外部リソースとして、入出力時にコードを調整すればいいだけのこと。
439:デフォルトの名無しさん
09/11/20 08:49:56
print loadstring(0x34d3a6b8);
こんなプログラミングが歓迎されるんですね
440:デフォルトの名無しさん
09/11/20 09:00:17
>435 を試してみたのですが、lua_setfenvだとグローバル環境の操作は無理なようです。
グローバル環境テーブル全体に対する操作関数って無いのでは?
441:デフォルトの名無しさん
09/11/20 09:34:40
>>438
スクリプトを読み込んだ際に特定の文字コードに変換して、内部の処理はその文字コードで統一って感じかな?
だとすると、何に変換するのがいいんだろう。UTF16?
442:デフォルトの名無しさん
09/11/20 09:47:54
スクリプトファイルは基本UTF-8、
ネイティブに引き渡すときはUTF-16、面倒ならUCS2にするのが一番問題が少ない。
443:デフォルトの名無しさん
09/11/20 11:51:20
>>437
その恩恵にあやかれるのはASCIIコードしか使ってない欧米人だけだけどな。
非ASCIIコード圏は、既存のエンコード方式と区別ができないので余計に混乱する。
全てのプレーンテキストがUTF-8に置き換わるまでの過渡期は、BOM付きUTF-8が
一番無難な選択だと思うけどね。
俺はWindows上でgccとか使わないので、FTPクライアントにBOMの有無を変換する
機能さえついてくれればあまり問題ない。
もっとも、MSは独自にBOM付きUTF-8を強行するのではなく、非ASCIIコード圏で
過渡期にはBOMが必要であることを訴えて、規格に盛り込ませるべきだと思うが。
444:デフォルトの名無しさん
09/11/20 12:26:22
>>437
「ファイルの中身」自体が最大のレガシーシステム。だから UTF-8 が使われるようになってる。
日本人は一度 SJIS やら EUC やらで通った道をもっかい世界規模で通り直してるだけではある
>>438
なにが一番困るって、ファイル名中の「コメント」
コメントに日本語つかうな?ごもっとも(苦笑)
445:デフォルトの名無しさん
09/11/20 12:27:06
ファイル名中じゃねえ、ファイル中
446:デフォルトの名無しさん
09/11/20 12:31:33
>>443
> 全てのプレーンテキストがUTF-8に置き換わるまでの過渡期は、BOM付きUTF-8が
> 一番無難な選択だと思うけどね。
この上の記述はわかるし、それはよくわかるんだが、
実際はBOM付きでトラブることが多くて、俺は折れたわw
BOMなしで上手く行くようにすべき
447:デフォルトの名無しさん
09/11/20 12:44:29
あ、437 のいってること完全によみちがえてたや。すまん。
動作上は問題ないに決まってるんだから、ツールで対応できない意味がわからんってことだな。
既存エンコードと混在したのを自動判定する必然性は別にないんだから、
ツール側に「MBCSではなくUTF-8として扱う」スイッチだけつければすむことだ。
MS1社が対応するだけで世界は平和になるんだからさっさとそうしてくれってことだな
448:デフォルトの名無しさん
09/11/20 12:56:28
>>443
もう手遅れ
MSがいまだにSJISを強行している時点で終わってる
449:デフォルトの名無しさん
09/11/20 13:38:56
SJISを強行しているように見えるのはロケールを日本語にして使っているからなんだが、
なんでそんなに視野が狭いんだろう?
ちなみにOSのロケールを英語にすると、UTF-8も無しでコンパイルが通るぞ。
450:デフォルトの名無しさん
09/11/20 13:40:42
BOM無しで
451:デフォルトの名無しさん
09/11/20 13:58:43
thx!
おまいあたまいいな
452:デフォルトの名無しさん
09/11/20 14:03:05
>>449
L"日本語" って正しく通る?
453:デフォルトの名無しさん
09/11/20 14:12:51
ロケール変えて見た
こりゃええわw
まともなアプリと糞アプリの違いが一目瞭然になったw
454:デフォルトの名無しさん
09/11/20 14:16:50
やっぱりコマンドプロンプトは糞のままだったw
455:デフォルトの名無しさん
09/11/20 14:23:06
URLリンク(boost.cppll.jp)
このサイトが初めてエンコード選ばなくても
日本語で文字化けせずに表示されましたw
ほんとうにありがとうございましたw
456:デフォルトの名無しさん
09/11/20 14:24:23
日記はチラ裏で
457:デフォルトの名無しさん
09/11/20 14:41:12
>>455
ブラウザの文字エンコードが正しく認識できないって、どこの田舎ものやねん……。
458:デフォルトの名無しさん
09/11/20 14:42:25
>>454
cmd.exeはフォントを日本語にすれば治る
cygwinのbashはスクロールがおかしくなるが英語ロケールでインストールし直すと治るのかもしれないがやっていない
しかしいかに日本のWindowsアプリケーションが日本語=SJISで決め打ち(mbcs)しているかが良くわかるね
本来はhogehogeW()を呼ばないといけないところをhogehogeA()で済ませちゃってるんだろうな
mbcsでもSJISだとそれで動いちゃうから日本語ロケールだと気付かないし気にならないんだね
正しいプログラムの作り方についてもう一度勉強しなおす(日本のMSががんばってアナウンスする)必要があるんじゃないかな
459:デフォルトの名無しさん
09/11/20 14:47:32
>>457
ああごめん
ここのことね
URLリンク(boost.cppll.jp)
460:デフォルトの名無しさん
09/11/20 14:50:07
スレ違い
461:デフォルトの名無しさん
09/11/20 17:39:18
質問どうぞ
462:デフォルトの名無しさん
09/11/20 20:08:17
>>440
lua_replace(L, LUA_GLOBALSINDEX)
ならどう?
463:デフォルトの名無しさん
09/11/21 08:14:53
>>462
できました!
ありがとうございます
464:デフォルトの名無しさん
09/11/21 09:04:14
Luaのテーブルってキーを使ってアクセスするようになってますが、
キーが分からない場合に全ての項目を調べたい時のサンプルってありますか?
465:デフォルトの名無しさん
09/11/21 09:14:26
for k,v in pairs(t) do hoge(k,v) end
466:463
09/11/21 09:49:37
>462 でグローバル環境を空にはできましたが、
これだけだと再使用ができないような?
このあとlua_openlibsを使っても標準ライブラリが使用できません。
Lua_Stateをcloseせずに再使用するのは大変みたいですね。
467:デフォルトの名無しさん
09/11/21 10:09:26
>>465
thx
pairsやnextでなめれるんですね
468:デフォルトの名無しさん
09/11/21 10:14:16
lua_openlibは副作用でレジストリにも変更加えるからじゃね?
走らせたいチャンクを一旦スタックに積んで
そいつの環境を置き換えるのはどう?
469:デフォルトの名無しさん
09/11/21 10:56:34
>>468
具体的なやり方が今一思いつきません。
load〜で積んだあとに空の環境に置き換えるって意味じゃないですよね?
470:469
09/11/21 11:03:04
そもそもスクリプト側で使ったグローバル"変数"だけ初期化して
ライブラリ等のテーブルは使いまわせたらlua_Stateの再構築の
コストを減らせて、細かいスクリプトの連続呼び出しに良いのではと
考えていたんですが、Luaは変数も関数もその他色々もテーブル分けて
ないので、選択的に変数だけで消すのに無理がある気が・・・
471:デフォルトの名無しさん
09/11/21 11:04:51
何でデフォの宣言がglobalなんだろうかね・・・
472:デフォルトの名無しさん
09/11/21 11:52:21
>>469
いや、そういう意味。走らせるチャンク毎に独自の環境を差し込む。
luaL_openlibsに関しちゃ対象がグローバル環境決め打ちのサポート関数でしかないんで
どのみち使えないんだけど、そこはチャンクの環境に差し替えるテーブルの__indexにフックかけて
グローバル環境に委譲してしまうって感じでどうか。
これならlocalをつけない変数宣言はチャンク毎の独自の環境に登録されるだけなので
グローバル環境の汚染も防げる。やってることはmodule関数と大体いっしょ。
コード書いて検証したわけじゃないのでうまくいくかは知らんw
473:デフォルトの名無しさん
09/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
09/11/21 13:11:20
>>473
なるほど、こうやるのですか。
ありがとう!
475:デフォルトの名無しさん
09/11/22 10:32:35
ゲーム内にN個のオブジェクトが存在する。
それぞれのオブジェクト固有の状態を保存するために、Cプログラム側でN個のテーブルを用意する。
オブジェクトの行動を定義したluaファイルをロードしてlua_Stateインスタンスを作る。
オブジェクトはN個だが、このインスタンスは1つしか作らない(みんな行動パターンは共通なので)
で、個々のオブジェクトの状態を更新するときに、そのオブジェクトに対応するテーブルを引数にして
lua関数を呼び出し、テーブルを更新させる。
というのをやりたいのですが、N個のテーブルを作るのが「?」です。
テーブル作ってスタックに積むのはいいんですが、なんせスタックに積むわけですから、
どこかの操作で勝手にPOPされたり、消えたりしませんかね??
476:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/11/23 03:18:07
ぶった切りすいません
luaは組み込みに最適だと思うんですが、
lua単独でGUIを表示してゲームを作り、実行ファイル(exe)に変換はできるのでしょうか?
もしできるなら、教えてください。
ぐぐっても探すことができなかったので・・・
478:デフォルトの名無しさん
09/11/23 04:22:36
自前で組み込むの前提の言語でそういうもの作ってもあまり嬉しくないのでだれも作ってないと思います
479:デフォルトの名無しさん
09/11/23 05:02:50
言ってることが良く分からないが、Lua単独ではGUIは無理だと言っておく
そもそもこのスレで紹介されてる言語は、用途を特定しないスクリプトであって組み込んでどのように動かすかはその人次第
そういう用途なら○○ツクールやHSPにしておきなさいな
480:デフォルトの名無しさん
09/11/23 08:23:05
厳密には単独ではないけど、Luaのモジュールか何かでSDL使うのとか無かったっけ?
481:デフォルトの名無しさん
09/11/23 09:34:33
自分でGUI処理の組み込み部分を作り、スクリプトリソースをリンクすれば、
単独exeに出来るだろ。
482:デフォルトの名無しさん
09/11/23 10:12:43
>>477
その用途なら、Pythonじゃね?
483:デフォルトの名無しさん
09/11/23 12:08:15
I think so.
484:477
09/11/23 16:28:01
みなさん、レスありがとうございます。
どうしてもluaでゲームを開発しなくてはいけない状況なのです。
ウィンドウの表示がわからないため、苦戦しています。
どの参考書を読んでも書いてなくて。
別の言語にウィンドウを作らせて、動作はLUAだけで、などでできますでしょうか?
485:デフォルトの名無しさん
09/11/23 16:30:06
>>484
なんでできないと思うの?
486:デフォルトの名無しさん
09/11/23 16:38:15
>>485
レスありがとう
みんなやってないし、コマンドプロンプト上か
ほかの言語に組み込むだけのものかと思いまして・・・
487:デフォルトの名無しさん
09/11/23 16:46:43
URLリンク(aims.dna-softwares.com)
こことか見てみ
Luaを主体にしたゲームエンジン作って、このサークルのソフトは殆どLuaで作られてる
それにしても、その知識量からどうしてもLuaで作らなきゃいけない状況が発生するなんて
いったいどんな大見得切ったんだよ
488:デフォルトの名無しさん
09/11/23 16:53:23
参考書読んだのなら、Luaを使っている人がどのような目的と仕組みで走らせるのかは理解した?
あくまで組み込みスクリプトなんだよ?
ウィンドウズを表示するという関数を組み込んでもらって、
Luaにインターフェース提供してもらわないとprintやscanすらままならないよ
ゲーム開発でスクリプタとして働くのならLuaの言語仕様を覚えるのと、PGからバインドした関数一覧もらってこれば良いよ
489:デフォルトの名無しさん
09/11/23 17:00:01
レスありがとう
正直、大学のゼミでこの言語を使うということに決めたんです
いくつもある言語から選んで、luaを選んだのは自分だけ。
頼る人もいないので、本とネットで勉強してるかんじです。
>>487
サンプルをdlして参考にしていますが、難しい。
もっとじっくり読んでみます。
>>488
用途は理解しているつもりですが、これをメインにしてプログラムを組んでいかなくてはいけなくて・・・
やはり、ウィンドウを表示する関数をCなどで書いて、luaからその関数を持ってくることが一番楽なんですかね。
490:デフォルトの名無しさん
09/11/23 17:11:31
明日、学校でごめんなさいして
もっと詳しくて質問できる奴のいる言語で
最初からやり直す方がましのような気がする。
491:デフォルトの名無しさん
09/11/23 17:13:36
>>490
それはしたくないというか、結構この言語は気に入っているので辞めたくないんですよ
492:デフォルトの名無しさん
09/11/23 17:17:17
それでここきてなんとかしようなんてあますぎる
493:デフォルトの名無しさん
09/11/23 17:18:29
C側とのデータのやり取りがめんどいから余り良い言語とは・・・
494:デフォルトの名無しさん
09/11/23 17:26:23
>>489
> やはり、ウィンドウを表示する関数をCなどで書いて、luaからその関数を持ってくることが一番楽なんですかね。
Lua を使うと言って、こういったバインド系の作業はしたくないとか、意味がわからん。
もともとそうやって使う言語だろうに。
「みんなやってない」とか言ってるが、何個のプロジェクトを見て言ってるのか怪しいもんだ。
495:デフォルトの名無しさん
09/11/23 17:26:36
Luaの言語を理解して使えるようになる手間を1とすると、
ゲーム用のC/C++ライブラリを組むのが最低10倍〜ぐらい手間も時間かかるよ
Win32APIからDirectXかOpenGLまで使えるようにならないと話にならない
ゲームライブラリは既存のものでいいならC素人ならDXライブラリを組み込むのが多分もっとも最短だと思う
ゼミテーマが「組み込みスクリプト研究」で実例として「ゲーム」を選んだのなら、外部ライブラリにどっぷり頼っていったほうが幸せだとは思う
496:デフォルトの名無しさん
09/11/23 17:27:39
怒られたくなくて嘘を付いている幼児じゃあるまいし
無理せず諦めておけよ
497:デフォルトの名無しさん
09/11/23 17:33:10
>>493
つまりAngelScriptがいいって事ですね。
わかります。
498:デフォルトの名無しさん
09/11/23 17:42:29
自分の実力より遙かに上の事をやろうとしても無駄になるだけだぞ
ちょっと上ならともかく分不相応すぎ。諦めろ
499:デフォルトの名無しさん
09/11/23 17:48:07
Luaじゃ宿題スレも使えないしねえ。
(答える奴はどうせこのスレも見てる)
500:デフォルトの名無しさん
09/11/23 18:23:45
HSPスレに逝けよ
501:デフォルトの名無しさん
09/11/23 21:35:31
とりあえず、この本みてみて、何とかなるか考えてみたら。
スクリプト言語による効率的ゲーム開発 C/C++へのLua組込み実践
URLリンク(www.amazon.co.jp)
サポートページ
URLリンク(lua.mine.nu)
どうなんだろうなあ。
502:デフォルトの名無しさん
09/11/23 21:46:36
URLリンク(en.wikipedia.org)
Luaでルーチンいじれるゲームとかゲームエンジンとかあるけど
日本語の資料があんまりないと思う
503:デフォルトの名無しさん
09/11/24 10:46:49
Lua for Windows: A batteries included Lua installation on Windows.
URLリンク(luaforwindows.luaforge.net)
これいっこダウンロードしてインストールすれば、
GUI から OpenGL から DB 接続までなんでもはじめから入ってるよ。
ウィンドウ作る程度なら、サンプルそのまま使える。
504:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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
09/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:デフォルトの名無しさん
09/11/25 17:56:07
Lua詳しくないんでアレだが、lua_pushlightuserdataではダメなの?
509:デフォルトの名無しさん
09/11/26 09:43:19
Luaで実行状態を全部ファイルに保存して、また復帰するようなことは可能ですか?
510:デフォルトの名無しさん
09/11/26 10:10:30
>>509
Lua側でioで記録、読み込みするコード書くしかないかも
511:デフォルトの名無しさん
09/11/26 10:18:51
Smalltalkなら可能です
512:デフォルトの名無しさん
09/11/26 11:32:21
>>509
言語機能としてはないので、無理やりやることになる。
一応こういうのはあるけど、安定してるかどうかは不明。
URLリンク(lua-users.org)
513:デフォルトの名無しさん
09/11/26 13:19:28
>>508
試してみましたが、luabindではligthuserdataではなくuserdataを使用して
独自の型ID等を付加してチェックしているようで、無理でした。
luabindのソースを追ってみたところ、luabind::detail::convert_to_luaで
C++側の変数の参照をluaのスタックに積めることが分かったので、
これでどこかのテーブルに置くとか引数で渡すとかの方法が使えそうです。
luabindのドキュメントにもサンプルにも、こういったスタックを使う方法が
記載されていないので、本来の使い方とは違う気もしますが。
514:デフォルトの名無しさん
09/11/26 13:24:32
>>513
通常、スクリプトにはC++クラス型のインスタンスのポインタを渡してポインタで操作させる。
C++の参照はC++固有の機能なので他の言語では使えないと考えたほうがいい。
別の変数に代入した瞬間(参照で無く実体のコピーとして)にコピーコンストラクタが発動したって文句言えないぞ。
まあバインダがエラー吐いてコンパイルの段階で失敗すると思うが。
515:デフォルトの名無しさん
09/11/26 13:29:57
休止モードを呼び出せばいいんだよ。
516:デフォルトの名無しさん
09/11/26 14:09:30
>>514
bind側に参照を渡した場合は、ポインタに変換して管理してるみたいですね。
517:デフォルトの名無しさん
09/11/27 08:47:27
>>510 >>512
ありがとうございます。
Pluto調べてみます。
518:デフォルトの名無しさん
09/11/28 09:36:22
LuaでGUIムリだろと思ってたら、意外とバインダが出てくるもんだなw
お前ら優しすぎw
519:デフォルトの名無しさん
09/11/28 10:21:52
小学生に方程式ムリだろと思ってたら、意外と鶴亀算が出てくるようなもんだな
520:デフォルトの名無しさん
09/11/28 11:31:33
最近はメインループのかなりの部分まで組み込みスクリプトで作っちゃうのが主流になりつつあるのかな。
521:デフォルトの名無しさん
09/11/28 12:02:53
Luaだと入力補完のあるエディタが無いから
逆にやり難いと感じる俺
522:デフォルトの名無しさん
09/11/28 12:11:48
>>520
大半を組み込み言語化した結果、パフォーマンスの壁にぶちあたって
機能分離可能なところはどんどんC++化していく、ってのが定番だとオモ
サンプル:俺
523:デフォルトの名無しさん
09/11/28 12:45:05
まあ通常、動的(型付け)言語はネイティブコードと比べて10倍以上は遅いからな。
オレもスクリプトでゲーム開発環境を一通り書き上げたところだが、
60フレームまわしたらそれだけで意外にCPU食ってしまうので、ちと困ってる。
最低ラインがPentium 4 2.4GHzくらいになった。
524:デフォルトの名無しさん
09/11/28 14:49:37
JIT付き静的型付けスクリプト言語
穴場だから誰か作れば
有名になれるかもよ
525:デフォルトの名無しさん
09/11/28 15:10:52
>>524
すでにあるっちゅうねん。
.NET Framework向けだがな。
526:デフォルトの名無しさん
09/11/28 15:54:13
>>.NET Framework向けだがな。
駄目じゃん
527:デフォルトの名無しさん
09/11/28 16:18:55
作りたいと本気で思ってる俺が来ましたよ
もし作るならスクリプトで定義したクラスのインスタンスがC++から簡単に作れて、マルチスレッドとか使って同時に複数のインスタンスを参照してもおかしくならない仕様にしたいな
528:デフォルトの名無しさん
09/11/28 16:46:03
つAngelScriptJIT
ただしやり方は不明。
529:デフォルトの名無しさん
09/11/28 18:52:02
LuaJIT ってなかったっけ?
530:デフォルトの名無しさん
09/11/28 19:09:51
Luaは静的じゃないでしょ
531:デフォルトの名無しさん
09/11/28 19:18:30
ああごめん、静的を見落としてた
532:デフォルトの名無しさん
09/11/29 13:59:21
luaのlua_pcallのerrfncが呼ばれたときに、元のエラーメッセージとは
別にソースファイル名、行番号を収集する場合なんですが、
lua_getstackのレベル指定で、1から++しながら順にたどって
最初にcurrentlineの値が-1以外になったレベルがソースファイルの
階層と判断して問題ないでしょうか?
533:デフォルトの名無しさん
09/11/29 15:45:53
メンバアクセスの:と.ってどう違うの?
534:デフォルトの名無しさん
09/11/29 17:27:09
.が通常のメンバアクセスで、:でアクセスする場合は
v.(v ,〜 に展開される。
例: v:open(arg) -> v.open(v, arg)
535:デフォルトの名無しさん
09/11/29 17:53:43
d
536:デフォルトの名無しさん
09/11/29 18:04:12
>>17 問題1
使用言語: R
f <- function (n) {substr("abcdefghijklmnopqrstuvwxyz",1,n)}
> f(6)
[1] "abcdef"
> f(30)
[1] "abcdefghijklmnopqrstuvwxyz"
537:デフォルトの名無しさん
09/11/29 18:06:04
すみません。
書くところを間違えました。
ごめんなさい。
538:デフォルトの名無しさん
09/11/29 18:06:48
聞かれてないけどついでに補足すると.は[]に展開される
v:member(arg) -> v.member(v, arg) -> v[menbe](v, arg)
539:デフォルトの名無しさん
09/11/29 18:09:23
v['menber'](v, arg)
540:デフォルトの名無しさん
09/11/29 18:17:00
へー
じゃあメンバアクセスのたびにマップ検索してんのか
遅くならないのかな
541:デフォルトの名無しさん
09/11/29 18:28:37
空想具現化プログラミングというところから落としたlua5_1_3_Win32_mbenc_a2.zipを展開したところbin2c5.1.exeにウイルス検知ソフトが反応したんですが、これは大丈夫なんでしょうか?
542:デフォルトの名無しさん
09/11/29 18:31:42
>>540
そりゃ勿論遅いだろうさ
543:デフォルトの名無しさん
09/11/29 18:41:44
メンバだけの話じゃないだろうし。
変数名からなにから全ての識別子の判定で毎回どこかのテーブル見てるはず。
544:デフォルトの名無しさん
09/11/29 18:59:47
>>541
カスペルスキー系の誤検出のはず。
bin2cとか別に普段使うものでもないから削除しておいても良いかと。
545:デフォルトの名無しさん
09/11/29 19:20:09
>>543
ローカル変数は実行時はテーブル見ない。例えば、
local a = b * c + d
を
local a = b * c
a = a + d
に変えても速さは変わらない。
546:デフォルトの名無しさん
09/11/29 19:37:56
>>544
ありがとうございます安心しました
547:デフォルトの名無しさん
09/11/29 23:33:25
静的型付けならPawnいかがかな?
548:デフォルトの名無しさん
09/11/30 22:05:16
ちょっと確認したいんですが
lua_registerで登録した関数を呼び出すときには新しいスタックが毎回生成される、したがって
Glue関数内部ではlua_gettopでスタックの数を確認する必要なしにスタックの1番目が最初の引数、2番目が・・・としてよい
同様に、返り値もスタックの1番目が最初の返り値、二番目が・・・としてよい(何も考えずにスタッククリアして返り値を積めばいい)
これは正しいですか?
549:デフォルトの名無しさん
09/12/01 00:52:46
うむ
550:デフォルトの名無しさん
09/12/01 06:17:28
>>524
ActionScript 3.0 がそっちのほうを目指しているんじゃないかな。
いちおう Flex SDK はオープンソースらしいから、
自分のプログラムに組み込むこともできるかも。
>>540
Lua Performance Tips
URLリンク(www.lua.org)
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
551:デフォルトの名無しさん
09/12/01 21:46:34
Luaについて質問です。
10進数で書かれた文字列、たとえば「\130\160\130\162\130\164」は
Lua上で「あいう」となりますが、外部ファイルに記述したものを
io.linesで取り出したものだと、コード列が返ってきてしまいます。
これを通常の文字列に変換したものとして使いたいのですが、どうしたらいいのでしょうか。
552:デフォルトの名無しさん
09/12/01 21:50:08
>>549
ありがとうございます
553:デフォルトの名無しさん
09/12/01 22:20:40
>>551
多分C側でバイナリに変換しないとダメじゃないだろうか。
Luaの標準ライブラリでももしかしたら出来るかもしれないが、
Cの方がてっとり早いだろう。
554:デフォルトの名無しさん
09/12/01 23:27:17
SquirrelのほうがLuaよりゲーム向けなんかな?
どっちも知識なしだったらSqから勉強でいいのだろうか
555:デフォルトの名無しさん
09/12/01 23:54:06
>>554
どちらも汎用スクリプトだから処理系単体ではどちらがよりゲーム向けということはない。
周辺ライブラリやバインダの入手性や使い勝手の差はあると思うけど。
556:デフォルトの名無しさん
09/12/02 01:51:00
>>554
速度がLua>Sqで結構大差あったりするんで
Wikipedia項目リンク
のLuaとの違いに強い魅力を感じるんでなければLuaがオススメ。
特に知識なしなら、Luaのほうが日本語資料が充実してるんで勉強しやすいかと思う。
557:デフォルトの名無しさん
09/12/02 02:00:16
lua は文法がな……
558:デフォルトの名無しさん
09/12/02 08:15:39
日本語は文法がな・・・
559:デフォルトの名無しさん
09/12/02 09:41:13
AngelScript|Д゚)ジー
560:デフォルトの名無しさん
09/12/02 11:48:28
>>551
loadstring をつかえばできるよ。
local str = "\130\160\130\162\130\164" -- io.lines で取り出した文字列
local decode = loadstring("return \"" .. str .. "\"")
print(decode())
561:デフォルトの名無しさん
09/12/02 15:29:08
>>449
コンパイラがOSロケールに依存してるから英語にしましょうなんて愉快すぎるわ
他のロケール依存アプリ全部道連れにする方法なんぞ万人に薦められんだろ
562:デフォルトの名無しさん
09/12/02 16:39:37
問題が起こるのはShiftJISを決めうちして作っている一部の馬鹿アプリだけだろ。
なぜ全部とか間抜けな話になるのか、頭の悪い奴の考えはさっぱり分からん。
563:デフォルトの名無しさん
09/12/02 16:40:53
バカアプリの代表が Visual Studio って話じゃないのん?
564:デフォルトの名無しさん
09/12/02 18:39:01
そんな事よりお前ら、GameMonkeyについて語るんだ。
565:デフォルトの名無しさん
09/12/02 18:47:34
winアプリにスクリプト組み込む場合、メッセージ(WM)処理どうしてる?
自分はマルチスレッドにしてるんだけど、WM_CLOSE受けたときに
スクリプトが走ってたら、スレッド他殺していいものなのかどうか。
566:デフォルトの名無しさん
09/12/02 18:57:22
保存したいデータがあるかどうかで判断しね?
567:デフォルトの名無しさん
09/12/02 19:00:15
データ保存しない場合はどんなタイミングで落としても問題無いってこと?
568:デフォルトの名無しさん
09/12/02 19:16:24
スクリプトを複数スレッドで別々に動かす状況がわからんな…
Luaだと、Lua_yieldでスクリプトの処理を一時停止させて次のスクリプト、という感じではダメなの?
569:デフォルトの名無しさん
09/12/02 19:43:49
それだとスクリプト書く側に停止を意識させないとダメですよね?
570:デフォルトの名無しさん
09/12/02 22:23:10
スクリプト側にメインループを置いて処理してるの?
571:デフォルトの名無しさん
09/12/03 00:38:27
winmainでメッセージループ、別スレッドでスクリプト。
スクリプトは入力待ち(マウス等)で関数無いで停止することがあって、
その間にメッセージループ側にWM_CLOSEとか来た場合にどうやって
終了させるかで色々迷っている、と。
スクリプトで割り込みを意識するような書き方は手間なので、
スレッドごと落とせると楽なんだけど、lua_Stateってスレッドごと
落とした後にlua_closeに渡して大丈夫なのか?ってのが疑問な
わけですよ。
lua_call系にステップ実行があると良かったんですがね。
ステップ数も指定できたりするのが。
572:デフォルトの名無しさん
09/12/03 09:26:27
>>571
スレッドを強制終了したら、基本的に何が起こってるか不明というか
たとえばガベコレの途中だったりしたら(その他でもあらゆる不明な原因で)
異常な状態になるからやめたほうが良い。
手段としては、別スレッドのほうの処理をコルーチンで構成しておいて、
コルーチンがyieldしたタイミングでコルーチン呼び出し側のコードで
終了チェックするようにする。
あとウエイトが絡む関数については、待ちループで終了チェックをするようにして、
終了フラグが立っていたらyieldを起こすようにする。
とかそんな感じじゃないの。
573:デフォルトの名無しさん
09/12/03 09:30:46
>>571
無限ループ防止という観点では、デバッグフックで1行実行ごとに関数呼ばせて、
その中でカウンターアップしていって、カウンターが一定の数になったらyieldとかいう手もある。はず。
574:デフォルトの名無しさん
09/12/03 11:24:54
スクリプト側の待ちループの中でlua_yieldを呼び出すグルー関数を呼びだすようにしておき、
メッセージ処理の待ちの間、具体的には
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でスクリプトを呼び出せばいいような気がする。
575:デフォルトの名無しさん
09/12/03 11:28:06
>>565
他のスレッドはいきなり殺したらあかんでしょ。
メインスレッドからフラグたてて、よしなに自殺
576:デフォルトの名無しさん
09/12/03 11:29:49
てか、この辺のマルチスレッドの話ことってLua関係なくないか?
577:デフォルトの名無しさん
09/12/03 11:44:10
>>571
(before)
入力待ち(マウス等)で関数内で停止する
(after)
yieldを使い、外で停止する
入力が来たらresumeで関数内に戻る
WM_CLOSEが来たらresumeしないまま終了
578:デフォルトの名無しさん
09/12/03 12:59:28
lua関係ないよな。普通にC++だけで書いてても全く同じだ。
まあ、lua (ないしは squirrel) なら、yield のタイミングで同期を
とるようなコードにしておくのが無難ってのはその通りだと思われ
579:デフォルトの名無しさん
09/12/03 20:42:03
>>573
なるほど、それならステップ実行できますね。
>>他のレスくれた方々
具体的に書いた例だとマルチスレッドになってるけど、根本は
WindowsでLua使うときにメッセージ処理をどうしてるかって話ですから。
避けて通れないだろうから、実際に組み込んでる方々はどう対処してるかが
気になったもので。
580:デフォルトの名無しさん
09/12/03 22:32:02
>>579
シングルスレッドモデルで組んであれば処理の流れ的に問題になるようなことは別にない
あとはオブジェクトをどう管理してるかの問題。
ウインドウのインスタンスを lua 配下にしてある(生成もlua側から)なら、それぞれのウインドウの
メッセージ処理部から、lua でのインスタンスの適当なメソッド (onCloseとか) をイベント的に callback
させて閉じるかどうかをスクリプト側に判定させればいいだろう
ウインドウのインスタンスがグローバルなら、lua 側も同様に
グローバルメソッドをイベントとして呼び出して判定させるように組めばいい
581:デフォルトの名無しさん
09/12/04 18:14:29
Luaのスタックとか文法とかにいまいち馴染めないからエンゼルスクリプトをやってみようかと思ったが日本語資料がなさすぎて泣いた
582:デフォルトの名無しさん
09/12/04 18:28:07
>エンゼルスクリプト
なんか可愛いな
583:デフォルトの名無しさん
09/12/04 18:39:34
つ英文マニュアル
結構読みやすいよ。
あと、WIPのtest_featureに入ってるサンプルもわかりやすい。
584:デフォルトの名無しさん
09/12/04 20:37:59
エンゼルスクリプトって速度どれくらい?
585:デフォルトの名無しさん
09/12/04 21:19:06
>>584
>>347
586:デフォルトの名無しさん
09/12/04 21:19:32
>>584
>>347
587:デフォルトの名無しさん
09/12/04 21:20:21
おい、結婚するか
588:デフォルトの名無しさん
09/12/04 21:46:45
そうだな。結婚すると良いよ。
589:デフォルトの名無しさん
09/12/04 21:49:36
じゃあ俺が息子になろわ
590:551
09/12/04 21:52:36
>>553,560
回答が遅くなってすみません。
>>560さんの方法で望みの動作になりました。
お二方とも、本当にありがとうございました。
591:デフォルトの名無しさん
09/12/04 23:34:54
>>581
tolua++を使えばいいと思います。
URLリンク(lua.mine.nu)
592:デフォルトの名無しさん
09/12/04 23:36:01
日本語資料が無いから辛いと書いてるのにそんなの勧めるなよw
593:デフォルトの名無しさん
09/12/04 23:46:07
Pawn何で人気ないん?
594:デフォルトの名無しさん
09/12/04 23:49:03
Luaの入門書読み終わったけどユーザーデータについてあんまし書いてなかったぜ
ポインタ渡せないとオブジェクトの操作ができないジャマイカ
595:デフォルトの名無しさん
09/12/04 23:49:50
Luaの入門書ってどれのこと?
596:デフォルトの名無しさん
09/12/05 00:06:50
入門Luaプログラミングというやつなんだけど、ちょろっと1Pくらいしか説明がなくてわかりにくかった
597:デフォルトの名無しさん
09/12/05 00:21:15
luaといえば、下の二つのスクリプトを順に実行すると、
--a.lua
local v = 1
local function f()
print(v)
end
fv = f
--b.lua
fv()
結果
1
感じになるんだが、関数の実体もガベコレされてるのかな?
関数内で使ってるlocal変数もコピーかリファレンスを持つことになると?
598:デフォルトの名無しさん
09/12/05 00:32:19
>>597
Luaはよく知らないが、単にグローバル変数を
2つのスクリプトで共有してるだけなんじゃね?
599:デフォルトの名無しさん
09/12/05 05:19:56
>>597
fv が f をつかんでいる間はつねに f のなかから v が参照可能だよ。
Lua の関数も参照されなくなればもちろんガベコレされる。
> 関数内で使ってるlocal変数もコピーかリファレンスを持つことになると?
Lua ではこういう変数のことを upvalue と呼んでますが、
必要に応じてスタックからヒープへコピーされるみたい。
URLリンク(www.lua.org)
ここにある The implementation of Lua 5.0 っていう論文に、
イラストつきで説明があります。
600:デフォルトの名無しさん
09/12/05 06:44:46
>>599
完全な回答をありがとう。凄くすっきりしました。
この辺の仕様はとても良くできてるなと思いますね。
601:デフォルトの名無しさん
09/12/05 07:34:58
closureみたいなもん?
602:デフォルトの名無しさん
09/12/05 08:39:50
>>601
そう。レキシカルクロージャです。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4274日前に更新/247 KB
担当:undef