【Lua】組み込み系言語総合 その2【Squirrel】 at TECH
[2ch|▼Menu]
[前50を表示]
800:デフォルトの名無しさん
10/01/15 08:28:47
URLください

801:デフォルトの名無しさん
10/01/24 11:27:15
lua5.1.dllがノートンでウィルス扱いされるな

802:デフォルトの名無しさん
10/01/24 11:46:33
なにそれこわい

803:デフォルトの名無しさん
10/01/24 18:24:53
そういやShiftJIS対応Lua5.1.3もノートンでウィルスありと判定されてたな。
誤検出なのかな?

804:デフォルトの名無しさん
10/02/03 00:46:56
皆luaスクリプトの暗号化はどうやってるん?
リファレンスマニュアル探したけど、それらしい物が無かったんだが…

805:デフォルトの名無しさん
10/02/03 00:53:24
Luaってシリアライズできなかったっけ

806:デフォルトの名無しさん
10/02/03 01:12:18
lua_load/lua_dumpで自前で暗号化するくらしかできんよね

807:デフォルトの名無しさん
10/02/03 08:55:04
暗号化したファイルを読み込んで復元し、文字列にする>luaL_loadbufferやluaL_loadstringにその文字列を渡してコンパイル
って手順ではダメ?

808:デフォルトの名無しさん
10/02/03 10:27:02
Python人気ねーな。luaより断然コード書きやすいのに。遅いけど

809:デフォルトの名無しさん
10/02/03 12:43:27
>>808
>>4

810:デフォルトの名無しさん
10/02/03 12:46:04
Luaがもうちょっとキモくない文法ならいいんだけどなぁ

811:デフォルトの名無しさん
10/02/03 12:49:10
文法だけ変換するプリプロセッサかトランスレータのようなものを作ればいいんじゃないだろうか

812:デフォルトの名無しさん
10/02/03 13:02:55
たった数十kbくらいのサイズで
Cライクな文法が使える超軽量な組み込みないかな
LuaとかPawnも、小さい部類だろうけど不要な物が多すぎる

813:デフォルトの名無しさん
10/02/03 18:35:51
asじゃあかんの

814:デフォルトの名無しさん
10/02/03 21:16:11
Win版でUTF8とUTF16を相互変換するようにLuaを改造したけど需要ないかしら
たとえばSDLとか

ところで、Windows x64向けにビルドしてみたけど
> print(2^63 - (2^63+1))
でなぜか0が返ってくる

> print(2^31 - (2^31+1))
なら1になるけど

ちなみにlua_Integerの実体ptrdiff_tは8バイトになってる
どこがおかしいのかわからん

815:デフォルトの名無しさん
10/02/03 21:57:11
整数も浮動小数点で計算するからだそうだ‥‥
64bit integerに対して64bit doubleじゃ精度足りないっての

パッチがあったからつっこんでみるが、ちゃんと動くか心配だ

816:804
10/02/03 21:57:40
>>805->>807
アドバイスありがとう。
luaL_loadbufferやluaL_loadstringを使うという発想は思いつきませんでした。

817:デフォルトの名無しさん
10/02/04 15:53:15
>>811
Euphoria, t3x, moto, JavaなどCトランスレータを実装している言語は探すと色々あるものの、
トランスレート後に吐いたCソースとハンドコードしたCソースとのリンク方法が
文章化されてなかったりするするんだよな。

>>812
小さくはないが...elastiCは?
URLリンク(www.elasticworld.org)

818:デフォルトの名無しさん
10/02/04 19:12:28
Luaスクリプトってバインダなしで使い物になるレベル?

819:デフォルトの名無しさん
10/02/04 19:41:20
何らかのバインダ及びグルーが無いと、スクリプトの意味が無い気が。

820:デフォルトの名無しさん
10/02/04 21:35:40
mingw ,gcc を前提としてるバインダが多い様な気がして
lua手を出しにくいのです。。。

821:デフォルトの名無しさん
10/02/04 21:52:42
lua51.libとlua5.1.libって何が違うんだろう

822:デフォルトの名無しさん
10/02/04 21:53:06
それは気のせいないし思い込みでは……

823:デフォルトの名無しさん
10/02/04 21:57:42
.so を makefile でつくる、という事例にちょくちょく
遭遇しまうまう・・・orz

824:デフォルトの名無しさん
10/02/04 22:02:22
バインダはLuaではなくバインダという言語である!!


825:デフォルトの名無しさん
10/02/04 22:04:46
$(CC) を $(CL) とか代えて、pkg-config はそのままでも
nmake -f makefile でビルドできるもんなんだろうか・・・

826:デフォルトの名無しさん
10/02/05 00:11:51
pkg-configはシェルスクリプトだからmsysなりcygwinなり要るだろ

827:デフォルトの名無しさん
10/02/05 00:39:23
nmakeには、一から書き直して食わしてる
必要なobjぐらいなら写せるだろ

828:デフォルトの名無しさん
10/02/05 00:52:13
それ全然lua関係ないじゃん

必要なc/cppファイルひろって Makefile 書き直すなり
Visual Studio でプロジェクトファイルつくるなりぐらいやりなされ。
そんな難しいもんじゃない。

829:デフォルトの名無しさん
10/02/05 11:59:44
>>828
こういう問題を回避するためにSquirrelのソースパッケージをCMake対応にして
フォーラムに投げてみたら、いらないって言われた……。

830:デフォルトの名無しさん
10/02/05 18:05:55
オレはCMakeで固まろうとした

831:デフォルトの名無しさん
10/02/06 12:14:44
luaのuserdataとlightuserdataの違いって

userdata
・lua側でアロケート
・lua側でデアロケート(GC)
・Cには参照のみが渡される
・Cからは寿命が分からない

lightuaserdata
・C側でアロケート
・C側でデアロケート
・luaには参照のみが渡される
・luaからは寿命が分からない

これ以外になんか有りますか?
それとluaとCでuserdata、lightuserdataの寿命を同期させる方法は有りますか?

832:デフォルトの名無しさん
10/02/06 12:41:41
meta tableの有無も違ってたかも

833:デフォルトの名無しさん
10/02/06 14:15:34
>>831
これは心の贅肉をそのまま箇条書きにしたみたいで面白いな

考え方としてはとりあえず
lightuserdataは無くても整数値で代用できる、と割り切ってしまうほうが簡単
そうすると、整数とuserdataを比較するのは無意味だとわかる

834:デフォルトの名無しさん
10/02/06 21:32:49
|Д゚)<バインダが面倒な人向けにいいもの置いておきますね
|Д゚)つ[AngelScript]
|ミ サッ  [AngelScript]

835:デフォルトの名無しさん
10/02/06 21:47:45
//
/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ AngelScript!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ

836:デフォルトの名無しさん
10/02/06 23:25:21
>>832,833
レスどうもです
メタテーブルの有無は重要ですね
いろいろいじってようやくユーザークラスをLuaに公開できるところまでこぎつけました
しかしlightuserdataは使い道がわからず・・・

837:デフォルトの名無しさん
10/02/07 10:50:27
lightuserdataはCからのポインタの入れ物として使うのが想定されているらしい。

838:デフォルトの名無しさん
10/02/07 14:36:10
lightuserdataは、スクリプトで操作したいクラスのインスタンスとか放り込むんじゃないの?
ゲームとかだとひとつのスクリプトで複数のオブジェクトを制御する必要があるし。

839:デフォルトの名無しさん
10/02/07 15:41:29
C++のオブジェクトとLuaのオブジェクトが混在するのか・・・
C++/CLIならもっとすごいことになるな

840:デフォルトの名無しさん
10/02/07 17:14:33
C++のオブジェクトをスクリプトで操作する感じかな。
例えばスクリプトで

SetSpeed(1,20)

とかいうような関数があった場合、C++側でlightuserdataを取り出し、

//lightuserdataからObjectのポインタを取り出す
Object *lpObject=(Object*)GetLightUserData(L);

//Objectを操作する
lpObject->SetSpeed(x,y);

って感じの処理をするグルー関数を用意する。

841:デフォルトの名無しさん
10/02/07 18:22:00
lightuserdataでC++/Luaのインスタンスを協調させてみようかと頑張ってるんだができないorz
userdataでやれば上手くいくんだけどlightuserdataのほうが軽いらしいし・・・

C++側で
tableを作る
tableにインスタンスへのポインタをlightuserdataで格納
tableに各種メソッドを格納(メソッドはself(第一引数)tableからインスタンスへのポインタを取り出してクラスのメソッドをコールする)

さらにtableを積んで__gcフィールドにデリータを格納
最初のテーブルにメタテーブルとして設定

最初のテーブルを返す

という感じでやってるんだけどLua側で__gcが呼ばれてくれない
mt = getmetatable、mt.__gc(hoge)とすればちゃんとデリータを呼んでくれるのに・・・

こっちがDLL
URLリンク(codepad.org)

こっちがLua
URLリンク(codepad.org)

842:デフォルトの名無しさん
10/02/07 18:44:41
userdataとlightuserdataは全く別物。用途が違う。
パソコンでできることがケータイではできないと嘆いているようなもんだぞ?

843:デフォルトの名無しさん
10/02/07 19:23:56
>>841
そういうことができなくなってる分軽いわけなんだが……



844:デフォルトの名無しさん
10/02/07 19:31:07
じゃあlightuserdataは何に使うんだろう
コールバック的な使い方でしょうか

845:デフォルトの名無しさん
10/02/07 19:44:12
だから主にC側で作ったインスタンス(のポインタ)の受け皿だって

846:デフォルトの名無しさん
10/02/07 19:51:50
>>844
てか、マニュアルにもCのポインタそのものだって書いてあるだろう。
Cでよくあるハンドルスタイルやコールバックスタイルの構造を直接扱うためにある。
例えば fopenの帰り値の FILE* を void* にキャストして lightuserdata として持ってそのまま使う。

処理する時には、必ずCの関数をいちいち呼び出すのを前提として、
「LUA側は持ってるだけで何もさわらないデータ構造」として準備されてる。

これの使い方が直感的にわからない人がいるってのが驚きだった^^;

847:デフォルトの名無しさん
10/02/07 20:54:46
わからない人というか、深読みする人もたまにいるな。
ひどくなると「それはただの××だよ」と言われると反論してくる。
「お前はそうやって分かったつもりになってるだけだ」とか。

848:デフォルトの名無しさん
10/02/07 21:05:07
lightuserdataはテーブルのキーとして使う。
自前のオブジェクトのアドレスや、OSから渡されるハンドルをキーにしてテーブルを参照すれば、同じアドレスやハンドルに同じuserdataを対応させることができる。
ちなみに、この時のテーブルはweak tableにしておくといい。

ということを初めて知った時は目から鱗だった。

849:デフォルトの名無しさん
10/02/07 22:40:47
何かLuaって面倒くさいな(´ω`)

850:デフォルトの名無しさん
10/02/07 23:14:16
ひたすら軽量さが売りの言語って感じだなあ。

851:デフォルトの名無しさん
10/02/07 23:22:51
ところで848のテクニック?のサンプルソースとかどっかでダウンロードできないかな?

852:デフォルトの名無しさん
10/02/07 23:50:34
>>841みたいにuserdataの方にクラスのインスタンスのポインタを格納して
Luaから呼ばれるC++側の関数で取り出して使ってるんだけど、>>831
みるとuserdataはLua側でGCかかるの?

853:デフォルトの名無しさん
10/02/08 00:40:38
URLリンク(codepad.org)

うーんこんな感じですかね?
ポインタをキーにという発想はすごい便利そうな予感がしますね
しかしグルーコード内のエラー処理とかってどうすればいいんだろう
C++例外を投げるべきなのか、関数内でもみ消してlua_errorするべきなのか

854:デフォルトの名無しさん
10/02/08 07:40:28
>>852
「C++側」と「Lua側」をきっちりと分離したいんだな。
組み込み言語は、そういう幻想にうんざりしてる人のためにあるんだと思うけどな。

855:デフォルトの名無しさん
10/02/08 10:48:05
Luaって速度が同じぐらいで、文法が素直な組み込みスクリプトが作られたらあっという間に駆逐されそう

856:デフォルトの名無しさん
10/02/08 11:02:47
>>855
作られてないから駆逐されてない訳で

857:デフォルトの名無しさん
10/02/08 11:04:23
もともとマイナーな分野なのに亜流が既にいくつも出ていてそれができないってことは
実際のところLuaのバランスが優れているってことでしょ

858:デフォルトの名無しさん
10/02/08 12:13:32
罠を避けるのが上手い。
静的型 クラス メタプログラミング 並列処理 遅延評価 参照透明性 ・・・

859:デフォルトの名無しさん
10/02/08 12:58:59
文法重視で速度気にしてない人は squirrel 使ってるし普通に棲み分けになってんじゃね?

860:デフォルトの名無しさん
10/02/08 13:04:33
自分がLua選んだ理由は日本語の資料が一番多かったからだな。
次点の理由はスタティックリンクできたから。

861:デフォルトの名無しさん
10/02/08 19:55:29
文法が嫌いとかいうやつって、
自分の英語ができないのは分法を教えるからって口だろ

862:デフォルトの名無しさん
10/02/08 20:54:28
まぁ855の言うことが真ならSquirrelによってあっという間に駆逐されてるはずだな。

863:デフォルトの名無しさん
10/02/08 20:56:42
>>861
逆だよ。
文法ができないから英語できないんだよ。

864:デフォルトの名無しさん
10/02/08 21:00:44
>>863
>861が何を言ってるのか分かってるの?w

865:デフォルトの名無しさん
10/02/08 21:12:14
俺スクリプトをLuaのVM用のバイトコードにコンパイルすればいいじゃん

866:デフォルトの名無しさん
10/02/08 21:19:01
yieldをライブラリとして提供するのは実装の幅を狭めてると思う

867:デフォルトの名無しさん
10/02/08 23:28:24
>>862
>>347みる限り速度はでLua>>>>Sq

868:デフォルトの名無しさん
10/02/08 23:34:53
はじめて日が浅いけど L とか -1 が乱舞する
C拡張に馴染む日はくるんだろうか俺・・・

869:デフォルトの名無しさん
10/02/08 23:37:30
>>868
俺は2日で拡張できるようになったぞ

870:デフォルトの名無しさん
10/02/09 09:34:09
>>347では速度がLuaより早いにも関わらず日本ではあまり使われていないGameMonkey。
ざっと見た感じは文法も特に変な感じじゃないから、使いやすそうな感じはするんだけどね。

日 本 語 資 料 皆 無 だ け ど な

871:デフォルトの名無しさん
10/02/09 11:26:11
>日本語資料
月並みなことを言うと
因果関係ではなく相関関係ならあるかもしれない

872:デフォルトの名無しさん
10/02/09 11:32:07
Pawnも文法はシンプルに見えるが流行らないのはやっぱり何かが足りないんだろうな

873:デフォルトの名無しさん
10/02/09 14:25:57
足りないというよりはLuaの情報量や実績やユーザ数を
代えられるほどのものではないということだろう

874:デフォルトの名無しさん
10/02/09 16:13:12
Luaってゲーム以外で使われてますか?

875:デフォルトの名無しさん
10/02/09 16:40:55
>>874
SciTEとか

876:デフォルトの名無しさん
10/02/09 17:04:31
apacheとかwiresharkの拡張に地味に使われてたりする
もともとゲーム向けってわけじゃないしね

877:デフォルトの名無しさん
10/02/09 17:50:35
Schemeが以外と流行らなかったな

878:デフォルトの名無しさん
10/02/09 17:56:04
>>874
TextAdept
URLリンク(caladbolg.net)
半分以上 Lua で記述され、また Lua で拡張可能なテキストエディタ
iconv で読み書きし内部は UTF-8 なので、日本語も使用可

879:デフォルトの名無しさん
10/02/09 21:54:30
>>874
tokyotyrantでLua知ったよ

880:デフォルトの名無しさん
10/02/10 14:33:21
URLリンク(dev.pocoo.org)
URLリンク(www.frykholm.se)
URLリンク(coderay.rubychan.de)

プロジェクト管理ツール を作ろう
Redmin, Retrospectiva, Trac

基本組み込み用途だよね、とツールを作る用途で
移行する気が起きない理由はこの辺にありそうだとさっき気がつきました・・・

881:デフォルトの名無しさん
10/02/10 17:47:01
lua5.1のDLL版を使ってるんですが、グルーコードの呼び出し規約は__cdeclでいいんでしょうか?
それとも__stdcallにしたほうがいいですか?

882:デフォルトの名無しさん
10/02/10 20:55:07
>>881
たぶん__cdeclだけど仮に間違っていたとしても
name manglingの違いで簡単に見分けられるような気がする

883:デフォルトの名無しさん
10/02/10 20:57:16
DLLを使う側の言語の規約に合わせるんだ
Cでしか使わないのなら目的にもよるがどっちでもいいと思うがな

884:デフォルトの名無しさん
10/02/10 22:45:42
>>882
>>883
thxです
さっきluaのヘッダ見たところ呼び出し規約は書いてなかったので多分C言語デフォルトのcdeclでよさそうですね

885:デフォルトの名無しさん
10/02/11 14:50:36
Programming in Lua携帯するにはしんどいな
PDFで売ってくれりゃいいのに

886:デフォルトの名無しさん
10/02/11 15:59:41
ばらして持ち歩けよ

887:デフォルトの名無しさん
10/02/11 16:49:25
組み込んで歩けよ

888:デフォルトの名無しさん
10/02/11 18:52:41
lua で連想配列形式のテーブルの要素数を調べる方法ある?
配列形式だったら #tbl で、出来るみたいだけど・・・。

889:デフォルトの名無しさん
10/02/11 20:14:39
userdata型に型情報を与えて
BOOL isHoge(lua_State *, index);
の形で使いたいんですが
luaのほうで予め提供されてる方法はありますか?
それとも、自分で独自にマップするものなんでしょうか?

890:デフォルトの名無しさん
10/02/11 20:46:48
>>888
pairsやnextかな

891:デフォルトの名無しさん
10/02/11 21:04:58
nextだとnilが設定されたフィールドでハマるので
pairsを使った方がいいんじゃまいか

892:デフォルトの名無しさん
10/02/11 23:23:44
luabashがすばらしすぎる。

bashにluaインタプリタ機能追加してbashの拡張ができる&
bashが生きている間luaインタプリタも生きているのでlua変数を
保持し続ける。これ重要。

ファイル操作が多いとやっぱりシェルスクリプトが楽だけど
コマンド間の結果の連携を環境変数orファイル書き出しで
実装するのはかったるい時に大活躍な予感。


893:デフォルトの名無しさん
10/02/14 01:40:15
組み込み用途以外でLua使おうなんて思わんな
汎用的に使うには標準ライブラリ貧弱だし
thenとかdoとか書くの面倒だし

894:デフォルトの名無しさん
10/02/14 02:40:47
低レベルな質問で申し訳ないのですが
wxFormBuilderから追加したイベント宣言を定義するのはどうしたらいいのでしょうか?

Generateで書き出した.hファイルにある
virtual void OnButton1( wxCommandEvent& event ){ event.Skip(); }
の{ event.Skip(); }をコメントアウトすることで
出来なくも無いのですが
ヘッダファイルの行頭に
// PLEASE DO "NOT" EDIT THIS FILE!
とありますし後々修正があったときに困りそうです。

// Virtual event handlers, overide them in your derived class
このコメントが鍵のような気もするのですが正直意味が分かりません・・・

895:デフォルトの名無しさん
10/02/14 03:09:57
誤爆ってる、失礼しました

896:デフォルトの名無しさん
10/02/14 11:30:21
   /ヽ /ヽ
  ':' ゙''"  `':,
  ミ   ・ω・ ;,
 :; . っ     ,つ Lua!
  `:;      ,;'
   `( /'"`∪


897:デフォルトの名無しさん
10/02/15 16:13:25
自作型で__gcでC側のリソースを開放してるんだが
__gcをうっかり書き換えてしまわないように
メタテーブルを隠蔽あるいは変更不可にすることはできるだろうか?

898:デフォルトの名無しさん
10/02/15 19:19:53
__gcということはユーザーデータか。ならばスクリプト側からはメタテーブル自体の変更はできない。
さらにメタテーブルに__metatableを追加しておけば隠蔽も可能になり、メタメソッドの変更、追加を防止できる。
ただしこれらはC側やdebugライブラリには効果がないし、制限する手段も(多分)無い。


899:デフォルトの名無しさん
10/02/15 21:52:18
C++でRAIIをうっかり忘れてしまうレベルだ
初期化以外でsetmetatable()を使うのか?

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