【Lua】組み込み系言語総合 その2【Squirrel】
at TECH
[前50を表示]
900:デフォルトの名無しさん
10/02/15 22:33:58
>>898
__metatableというのがあったのか
というかユーザデータはもともと変えられないって知らなかったorz
レスthxでした
>>899
metatableをうっかり書き換えるのはクライアントで、クラスじゃない
RAIIをうっかり忘れるのとmetatableをうっかり書き換えるのは別次元の問題
そのクライアントのついうっかりを封印して出来なくしてしまえれば安心して寝れる
901:デフォルトの名無しさん
10/02/15 23:37:24
>>900
なにが別次元だ
ファイルを読んだり書いたりdllをロードしたりする、普通の言語じゃないか
902:デフォルトの名無しさん
10/02/19 02:15:03
(◞≼◉ื≽◟◞౪◟,◞≼◉ื≽◟ )
903:デフォルトの名無しさん
10/02/19 20:31:33
∩_
〈〈〈 ヽ
〈⊃ }
∩___∩ | |
| ノ ヽ ! !
/ ● ● | /
| ( _●_) ミ/ Lua!!
彡、 |∪| /
/ __ ヽノ /
(___)
904:デフォルトの名無しさん
10/02/21 15:46:38
(´・ω・`)
905:デフォルトの名無しさん
10/02/22 16:32:07
LuaInterface 使ってる?
906:デフォルトの名無しさん
10/02/22 16:55:48
(`・ω・´)
907:デフォルトの名無しさん
10/02/22 17:51:50
ルアのmodule(name)のnameが被ったらどうなるの?
908:デフォルトの名無しさん
10/02/22 20:06:58
name ru houkei
909:デフォルトの名無しさん
10/02/25 02:06:10
local foo = function ()
local c = 0
return function ()
c = c + 1
return c
end
end
f1 = foo()
f2 = foo()
この場合f1とf2に渡される情報はcと関数の参照だけ?
それともcを含めて関数まるごとコピーされちゃったりする?
910:デフォルトの名無しさん
10/02/25 08:44:16
クロージャとしては別々だけどコードはもちろん共有
911:デフォルトの名無しさん
10/02/25 08:54:10
UpValとProtoの参照
それとenvの参照
912:デフォルトの名無しさん
10/02/26 02:47:27
なんかロベルトさんがLua5.2のグローバルとか環境まわりの仕様変え始めたような。lua-l参照。
913:デフォルトの名無しさん
10/02/26 14:12:12
バージョンアップは無能レベルに到達するまで止まらない
でも5.2はまだリリースされてないから止めようと思えば止められるけど
914:デフォルトの名無しさん
10/03/03 04:05:04
イエルサリムスキー教授の翻訳本にuserdataのメタテーブルはLuaからCを出しぬいて手出しすることはできないから安全、みたいなことが書いてあるんだけど
ud = create_ud()
getmetatable(ud).__gc = nil
のようにごくごく普通にアクセスできるように思えるんですが・・・これは本の間違いじゃないですかね?
915:デフォルトの名無しさん
10/03/03 08:33:03
>>914
保守的GCって知ってるか
解放すべきかどうか疑わしいときは、解放しないほうが安全
916:デフォルトの名無しさん
10/03/03 11:12:19
>>915
今ググって知りました
しかし、保守的GCの話は>>914の話とは関係ないように思えるのですが、実は何か関係があるんでしょうか?
917:デフォルトの名無しさん
10/03/03 11:20:30
Squirrelに興味があるやつは見ておけ。
よく考えられてるサンプルだと思う。
URLリンク(ruriko.denpa.org)
918:デフォルトの名無しさん
10/03/03 18:44:23
>>914
userdataはsetmetatableはできないがgetmetatableはできる。
よってその例のようなアクセスはできる。
禁止したいなら__metatableを適切な値に設定するといい。
919:デフォルトの名無しさん
10/03/03 19:47:36
安全とは禁止することと見つけたり・・・
920:デフォルトの名無しさん
10/03/07 11:27:59
coroutineの利点がいまいちわかんね
state:update()の戦略の方がコスト低いしわかりやすいと思うんだが
921:デフォルトの名無しさん
10/03/07 12:48:09
利点がわかんないなら
君には不要って事なんだよ
無理して使う必要ない
922:デフォルトの名無しさん
10/03/07 15:01:14
自分の理解している範囲の外に利点があることだって普通にあると思うけど。
923:デフォルトの名無しさん
10/03/07 15:08:48
複数回に分けて動かさないといけない処理を継続的な処理として実装可能になる。
結果として同期処理の不要な軽量スレッド的な実装ができるようになる。
924:デフォルトの名無しさん
10/03/07 15:46:16
コルーチンは、ゲームで「アイテムを取った直後に一定時間白くなる」という処理を書くときとか便利だな。
925:デフォルトの名無しさん
10/03/07 16:04:54
>>921
むちゃくちゃな論理展開わろた^^
>>922
ですよね
>>923
複数回に渡って処理を分割するのってstateパターンでも普通にできることだと思う
コルーチンじゃないとどうしてもできない、あるいは明らかに優れてるっていう要素が自分には見えないんすよね
926:デフォルトの名無しさん
10/03/07 16:07:46
Stateパターンが「普通」?
Stateパターンのような回りくどいことをしないといけないのがおかしいとは思わない?
927:デフォルトの名無しさん
10/03/07 16:23:51
>>925
どうしてもできないから、で使ってる人はいないよ。
機能的にすぐれてる部分は全く無い。ぶっちゃけコルーチンも、
全状態保持を言語側が担ってくれてるだけのおおがかりな state だから。
State パターンで何個もあったり、さらには個数が変動したりするオブジェクトの複雑な
挙動のからみあいとか、考えたくもないけど、コルーチンだとわりとすっきり書ける。
最初に仕様にあわせて組んでいくだけなら State でもいいんだけど、
後から見直す時とか、細かい修正に対応する時とか、コルーチンのが圧倒的に読みやすいし記述も楽。
遷移図をそのまま if や while やら使って書き起こすだけだけになるからね
コルーチン切り替えのコストは、固定で組まれた State 切り替えよりかなり大きくなってしまうけど、
表記の楽さがそれを上回る、と判断した人が使うもの。あらゆる状態遷移を頭の中だけでさくさくくめてしまえるので、
State のが簡単だよって言う人は知り合いにもいるけど、それ、凡人には無理ですからー
928:デフォルトの名無しさん
10/03/07 16:36:19
そもそもオブジェクト指向におけるデザインパターンというのは、
言語側でサポートしきれていないニーズを無理やり克服するためのバッドノウハウのようなものだ。
929:デフォルトの名無しさん
10/03/07 18:44:20
>>925
例えばFizzBuzzの通常版が既に完成していて
function fizzbuzz(n, print) for i = 1, n do ... print("FizzBuzz") ... end
後になってState版が必要になったときに使う。
co = coroutine.create(function() fizzbuzz(100, coroutine.yield) end)
930:デフォルトの名無しさん
10/03/07 22:20:25
コルーチンの便利さは、記述が簡単になるって点だな。
931:デフォルトの名無しさん
10/03/07 22:34:16
coroutine.create(function (a, b) showMessageDialog(a, b, "Hello! World!") showMessageDialog(a, b "byebye")end) とか
URLリンク(lua-users.org)
>Run Lua in a separate thread and somehow stop it if it takes too long. とか
おつかい行って来てよ、と丸投げしまう簡便さ
でもちゃんと帰ってこれるのかな・・・的不安
932:デフォルトの名無しさん
10/03/08 08:18:34
>>930
コルーチンは記述が簡単なだけに非同期対応が面倒に感じるんだよな
>>924みたいな単純な処理ですら、アイテムを連続で取るとキャラが白くならなかったり、
直後にゲームクリアしてもキャラが白いままだったり、直後にキャラが変身するとハングしたりとか
Stateパターンならちゃんと回避できる人がコルーチンだと回避し忘れるのはありがちなこと
933:デフォルトの名無しさん
10/03/08 14:56:36
(何言ってんだコイツという眼差し)
934:デフォルトの名無しさん
10/03/08 23:06:08
>>932
他の人はコードで例を示しているんだから、君もコルーチンよりStateパターンが明らからに優れているという例をコードで示したら?
そうでないと、ただの知ったか君と区別つかないよ
935:デフォルトの名無しさん
10/03/08 23:32:20
>920の「state:update()の戦略」が良く判らん……トランザクションのこと?
936:デフォルトの名無しさん
10/03/09 00:01:37
Stateパターンを理解してりゃ、そこは判らない文脈じゃないと思うけど。
937:デフォルトの名無しさん
10/03/09 00:07:39
switch(state) { case WALK: … case WAIT: … case ATTACK: … }
をちょっと格好付けただけ
コルーチンと比較されるような使い方の場合は特にメリットもない
938:デフォルトの名無しさん
10/03/09 00:47:56
>>936
ハイハイ、逃げないでコードで示してね
それともやっぱり、知ったか君だったのw
939:デフォルトの名無しさん
10/03/09 01:02:11
そもそもコルーチンと組み込み系言語って何か関係あるの?
940:デフォルトの名無しさん
10/03/09 01:15:03
このスレで話題になることが多い lua と squirrel が搭載している、以上のものではないかな
他何が搭載してたっけ
941:デフォルトの名無しさん
10/03/09 01:20:31
よくわかんないけど状態遷移するたびにStateインスタンスを破棄、生成してれば
切り替わるタイミングが明確になって後片付けとかが確実になるとかそういうことなんじゃないの
942:デフォルトの名無しさん
10/03/09 02:34:51
ちなみに型が厳密な言語でコルーチンを扱うと複雑になるか、制約が大きくなる
どのみちオブジェクト指向が好きならJavaとかC#とかで正解なんだよ
943:デフォルトの名無しさん
10/03/09 02:43:45
小規模だとコルーチンのがキモチイイけど、遷移が複雑になってくると機械的に遷移図からコードに直せるステートのほうがいいかなって感じる
944:デフォルトの名無しさん
10/03/09 03:03:14
画面遷移処理とか、ADV的な演出の逐次制御とかはコルーチンがいいかんじにはまるね
945:デフォルトの名無しさん
10/03/09 09:40:22
コルーチン=呼び出すと区切りの部分まで実行してくれる関数オブジェクト
みたいな感じで理解してるな。
Luaの場合、coroutine.resumeで呼び出すと、次のcoroutine.yieldの部分まで実行してくれる。
946:デフォルトの名無しさん
10/03/09 12:51:46
10回繰り返し、という処理を、途中でイベントを受け取ったりしながらでも、
for (i = 0; i < 10; ++i) ですらっと書けるのがコルーチン。
947:デフォルトの名無しさん
10/03/09 15:59:05
cでcoroutineを自作しようと思ったら難しかったでござる。
948:デフォルトの名無しさん
10/03/09 16:26:47
奇怪で制約の多いマクロを組むか
sjljでコンテキストを書き換えるかの二択だな
949:デフォルトの名無しさん
10/03/09 17:11:31
その話題までいくともう組み込み言語まったく関係ないな。
950:デフォルトの名無しさん
10/03/09 20:01:13
マルチスレッドで済む処理まで凝るーチン
951:デフォルトの名無しさん
10/03/10 13:54:54
ルアってなんであんなテーブルマンセーなの?
952:デフォルトの名無しさん
10/03/10 14:17:35
シンプルだからじゃない?
このテーブルひとつで普通の配列も連想配列も
オブジェクトまでも扱えるから...
でも無理やりオブジェクト指向マネるくらいなら
ほかのスクリプト言語を検討するよ
953:デフォルトの名無しさん
10/03/10 15:10:04
Luaは初心者向けに見えて
実は玄人向け
954:デフォルトの名無しさん
10/03/10 17:48:04
違うな
M向け
マニアとマゾ
955:デフォルトの名無しさん
10/03/10 18:37:58
AngelScript|Д`)<呼ばれたので飛んできました
GameMonkey|Д`)<俺もー
CRIScript|Д`)<俺もー
956:デフォルトの名無しさん
10/03/10 18:51:20
\ l´⌒\⌒\ \\ \
\ ヽ ) ) \\ \\
( \ \∩___∩ \\
\ \ ⌒⌒| ノ ヽ \\
\ \ / ● ● ト、\ \\\
\ Y | ( _●_) ミ\ \\\
\ / 彡、_ |∪| ノ \ \\\
(____)―ヽノ' ヽ  ̄ ̄ ヽ\\
\, j l l .l }
Lua! l (_ノノノノ
957:デフォルトの名無しさん
10/03/14 18:29:44
過疎
958:デフォルトの名無しさん
10/03/14 18:55:01
コルーチンのAAください
959:デフォルトの名無しさん
10/03/14 19:23:00
●)(●):::\ .\ ::::::::::::::::::::::::::::::::::::::::::::::::
(__人__)./ ̄ ̄ ̄\:::::::::::::::::::::: / ̄ ̄ ̄\ コルーチン
::` ⌒´./ ⌒ ⌒ ヽ::::::::::::::: / ⌒ ⌒ ヽ
::::: ./ (●)(●) |:::::::::::: / ( ●)(●) |
\ | (__ / ̄ ̄ ̄\ | (__人__) } コルーチン
\/、. / ⌒ ⌒ ヽ/、.. ` ⌒´ .ヽ
\ / (●)(●) | |
\ \ | (__ / ̄ ̄ ̄\. | /
|\ \/、. / ⌒ ⌒ ヽ─┐ |丿 コルーチン
| .\ \ / (●)(●) |─┤ |
| |\ \ | (__人__) }─┤ |
| | \ \/、. ` ⌒´ ヽ\
960:デフォルトの名無しさん
10/03/14 20:37:44
/ヽ /ヽ
':' ゙''" `':,
ミ ・ω・ ;,
:; . っ ,つLua
`:; ,;'
`( /'"`∪
961:デフォルトの名無しさん
10/03/14 20:50:30
lldebugみたいな感じのデバッガって、他のスクリプト言語にあるんだろうか?
JavaやPythonとかだと余裕でありそうだけど、SquirrelとかAngelScriptとかにはなさそうだ…
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4274日前に更新/247 KB
担当:undef