トップページgamedev
1001コメント504KB

タスクシステム総合スレ part5

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2009/02/19(木) 02:21:01ID:k4ODtuXP
タスクシステムについての議論、相談、質問、雑談などのスレです

part4 http://pc11.2ch.net/test/read.cgi/gamedev/1233459490/
part3 http://pc11.2ch.net/test/read.cgi/gamedev/1226199100/
part2 http://pc11.2ch.net/test/read.cgi/gamedev/1196711513/
part1 http://pc11.2ch.net/test/read.cgi/gamedev/1173708588/


・タスクと呼ばれる実装は、非常に多岐に渡ります
 古典タスクシステムについての話題は「>>2」と明示してください
 そうでない場合はカスタム版タスクであることを明示してください

・人を憎んで言語を憎まず
0059名前は開発中のものです。2009/02/21(土) 11:55:53ID:3HETWV4t
>>58
>基本的な考え方は変わらんでしょ。
TCB有る無しで違うと思うが。
タスクを1個のリストで管理するかどうかも重要だ。
ごった煮リストでむりくり制御しようとしている様を指して変だと言ってるんで。

>いわゆる「プライオリティつき」タスクを使うか、シグナルのような仕組みを付け加えればよいのでは?
ここまでやると「単純」の域を超えているだろ。
すでにコードの見通しが悪くなってる。
「タスクシステム」のプライオリティーはベーシックの行番号やGOTOに見えるわ。

>そもそもあんまりタスク使って複雑になるようなゲームならタスクじゃない管理方法使うべきだし。
そうだな。
0060名前は開発中のものです。2009/02/21(土) 12:02:50ID:P36r7rTD
「箸なんて原始的です。だから誰かメリット教えてくれないと箸の使い方覚えません」
って言ってる子供と同じだな。
「魚食うときとか便利だろ?」と言っても
「スープ飲めないじゃん、肉切れないじゃん」と言い返される。
スープ飲むときゃスプーン使えばいい。肉きりたきゃナイフとフォーク。箸で食いやすいものは箸で食えば良い。それだけのこと。
でも箸ぐらい使えないと馬鹿にされるぞ、と。
0061名前は開発中のものです。2009/02/21(土) 12:16:21ID:G7lsvTqK
単純-複雑、変-変じゃない、とか審美的主観の話をしたら
好みの違う人とは話が合わないのは当然。
技術的に欠陥や優位があるというのならコードや
測定結果の数字を使って具体的に定量的に主張しろよ。
0062名前は開発中のものです。2009/02/21(土) 12:20:35ID:3HETWV4t
>>60
で、「箸で食いやすいもの」は結局なんなの?
タスクシステム使って良かったと思える場面てどこ?
やっぱりメリット言えないの?

タスクシステムが原始的だなんて言ってないだろ。
タスクシステムよりもずっと原始的なやり方のほうが遥かにマシだと言ってるんだが。
0063名前は開発中のものです。2009/02/21(土) 12:21:06ID:4jF5VqD/
>>60
ちがうな
箸で食えばいいのにトンカチで食べようとしてる人がいるから
なんで?って聞いてるんだ
0064名前は開発中のものです。2009/02/21(土) 12:22:39ID:4jF5VqD/
いや、トンカチですらないな
トンカチは役に立つもんなw

タスクシステムはなんだろ?
なんにも役に立たないやw
0065名前は開発中のものです。2009/02/21(土) 12:23:43ID:3HETWV4t
定量的な主張なら前スレ>>510>>641でやったな。
>>510にはメリットが無いのにコード量は>>641の倍だった。

コード量の差と>>510が使っていたかなりの量のマクロを指して複雑だと言っている。
>>2はその時点ですでにタスク信者が見放していたからまだだけど、比較する必要あるか?
0066名前は開発中のものです。2009/02/21(土) 12:25:36ID:Kwr5xaMF
>53
だからcontinuationの問題だろ?
0067名前は開発中のものです。2009/02/21(土) 12:27:01ID:3HETWV4t
>>66
だから継続もタスクシステム抜きで実現できるだろ?
0068名前は開発中のものです。2009/02/21(土) 12:27:28ID:Kwr5xaMF
>57
全てのn+1は、必ずnを参照すべし

とキミは主張しているのか?
0069名前は開発中のものです。2009/02/21(土) 12:27:39ID:hYClRP74
そのうえ全部まるごと食えばいいじゃんとか言う奴もいるから話にならんな
0070名前は開発中のものです。2009/02/21(土) 12:28:57ID:Kwr5xaMF
>67
dispatch部分をいちいち個別に書くのかよw
0071名前は開発中のものです。2009/02/21(土) 12:29:20ID:3HETWV4t
>>68
何言ってるのかサッパリ分からん。
0072名前は開発中のものです。2009/02/21(土) 12:34:33ID:Kwr5xaMF
>71
> タスクシステムだとオブジェクト間の関連が処理順依存になって面倒になると思うが。
> そこはどうすんの?
> 1フレームの誤差だから許容すんの?

タスクシステムだろうと、個別ループだろうと、処理依存するだろ?
1フレームの誤差はどちらでも出るぞ。

だから、『状態n+1に更新する場合は、全ての状態nを保存してから処理すべし』、と言いたいのか?

と尋ねたんだが、理解できなかったか?
0073名前は開発中のものです。2009/02/21(土) 12:46:40ID:Kwr5xaMF
逆に言えば、

  priorityを上げ下げすることで処理順依存をある程度解消できるタスクシステムとやらの方が
  個別ループよりも柔軟性が高く優秀である

とID:3HETWV4tは言っているわけだが、今まで言ってきてることと矛盾してるだろ?
ホントに気づいてないのか?
0074名前は開発中のものです。2009/02/21(土) 13:56:49ID:07PQbtcV
>>65
> >>510にはメリットが無いのにコード量は>>641の倍だった。

タスクシステムの部分を除けば641のほうがはるかにコード量は多かったよ。

それだけでもタスクシステムというシステムを導入するメリットがあると言えると思うが。
0075名前は開発中のものです。2009/02/21(土) 14:20:08ID:3HETWV4t
>>72
>タスクシステムだろうと、個別ループだろうと、処理依存するだろ?
ああ、そりゃそうだな。

>>73
プライオリティーで表現すれば処理順を動的に変更できるし柔軟性も高まるが、そんな需要あるか?

 ・自機の弾に当たっている敵A
 ・自機に重なっている敵A

この場合どちらを先に処理するか、全部消滅させるかみたいなルールは動的に決めるものではないよな。
これをわざわざプライオリティーで表現してソートしたりするのが面倒なんだが。
さらにこの辺のプライオリティーがハードコーディングならやっぱり無駄にしか見えん。

でもってこれをタスクシステムで頑張ると「面倒→誤差許容しないとやってられない」、
というシナリオを描いて>>57の発言となった。

シグナルだのプライオリティーだの言っても所詮ルールが静的ならべた書きのほうが楽だろ。
0076名前は開発中のものです。2009/02/21(土) 14:29:25ID:3HETWV4t
>>74

■TaskDemo
main.cpp 4684
Tasksystem.cpp 337
Tasksystem.h 4625

■NormalDemo
main.cpp 5087
Star.cpp 514
main.h 118
Star.h 235

(5087 + 514 + 118 + 235) - 4684 = 1270

その差50行程度だが、どこが遥かになんだ。
0077名前は開発中のものです。2009/02/21(土) 14:30:42ID:Te+n/W8K
なんで静的であるという前提なんだ?
そういうゲームしか作ったこと無いとか?
0078名前は開発中のものです。2009/02/21(土) 14:34:49ID:3HETWV4t
>>77
この手のルールが動的に変わる場合ってどんなのがあるの?
ギャラガは違うよな。
0079名前は開発中のものです。2009/02/21(土) 14:40:53ID:P36r7rTD
素手で食いたいなら素手で食ってもいいんだが…
何を使えばいいかは料理しだい。世界中の料理を箸で食べろとは主張してないし、
ナイフもフォークもどんな道具も、万能な道具なんてないよ。

でも箸使えないからって箸を否定するのはみっともないよね、ということだね。

箸を使えないのが能力不足のせいか、HSPのせいかは知らんが。
0080名前は開発中のものです。2009/02/21(土) 14:48:03ID:Te+n/W8K
>78
つまり、作ったことも無ければ想像したことも無いということか。
ダメジャンw
0081名前は開発中のものです。2009/02/21(土) 14:50:59ID:3HETWV4t
万能な道具はないが、明らかに場違いな道具はあるって話。
俺はもともと目的に合った手段を選べという立場だ。
タスクシステムが手段として他のやり方よりもまともに機能する場面て何?と聞いているんだが。
その問いに対してズバリこれと言ってくれればそれで話は終わるんだがな。

>でも箸使えないからって箸を否定するのはみっともないよね

俺はオマル使えないし、オマル使ってるやつは否定したくなるな。
オマル使ってるやつはみっともないし、オマルを勧める奴は言語道断だ。
0082名前は開発中のものです。2009/02/21(土) 14:53:10ID:3HETWV4t
まあ、オマルならな、渋滞にはまった時の非常手段として役立つかもしれない。
洩らすよりはマシだからな。
こういう「こんな時なら使える」って意見が欲しいんだよ。
0083名前は開発中のものです。2009/02/21(土) 14:54:55ID:P36r7rTD
タスクシステムを使った実例は
ナムコの古典的アーケード以外にも
昔からのゲームメーカーのゲームを入れれば星の数ほど使われてる

それに対して何もゲーム作ったことも無い人間が「メリット理解できません」
といっても「そうだろうね」としか言えんわな。

今の最新ゲームの規模で古典的タスクみたいな単純な仕組みが使われることはもう無いけど、
個人製作レベルならまだその程度で十分じゃないのかな。

個人製作レベルで数億円かかるフレームワークとかエンジンとかの話してても夢物語だし…
0084名前は開発中のものです。2009/02/21(土) 14:57:44ID:3HETWV4t
>>83
現代で使うメリットが無いと言ってるんだよ。
リソースきつきつだった時代に使うことまで否定してないだろ。
0085名前は開発中のものです。2009/02/21(土) 15:03:45ID:P36r7rTD
>>84
関数ポインタ理解できる程度のプログラマなら
小規模なゲームで状態推移を簡単に管理できる実装の一例、程度でしょ

プログラマに実装の選択肢があるのは一般にメリットだと思うがね。
逆に君は「あらゆる状態でタスクより優れた方法がある」ということを
説明できるのかね?
0086名前は開発中のものです。2009/02/21(土) 15:06:25ID:Te+n/W8K
>81
> 俺はオマル使えないし、オマル使ってるやつは否定したくなるな。
> オマル使ってるやつはみっともないし、オマルを勧める奴は言語道断だ。

オマエは要介護認定の人たちをバカにしているのか?
0087名前は開発中のものです。2009/02/21(土) 15:08:18ID:hYClRP74
なんでお前らは結論の出てる議題で必死になってるんだ?
0088名前は開発中のものです。2009/02/21(土) 15:18:06ID:3HETWV4t
>>85
>>84
0089名前は開発中のものです。2009/02/21(土) 15:19:06ID:3HETWV4t
>>86
>>36
0090名前は開発中のものです。2009/02/21(土) 15:21:43ID:P36r7rTD
そーいえば
非相対マルチコアの某最新コンシューマ機で
少ないサブコアのローカルメモリ内だけでメインCPU側から独立して
タスク管理するために、ほぼタスクシステムな仕組みでジョブ管理されてる実装を見たな。

これ、最新ゲームだったけど。
リソースがいくらでもある、って前提で富豪的考え方しか出来ん最近のゆとりプログラマには
結局最新技術も使いこなせないんだろうなぁ…
0091名前は開発中のものです。2009/02/21(土) 15:25:48ID:bQf1hP7d
タスクシステムは個々のタスクがグローバルなもの(例えばスクリーンデバイス)にばらばらにアクセスする。
ばらばらにアクセス=グローバルなものの整理ができていない。

グローバルなものの整理ができていないと1万行を超えるプログラムを動作させるのは難しい。
http://www.kojima-cci.or.jp/fuji/mybooks/cdiag/cdiag.2.4.html

だから代わりに引数を使おう
http://www.kojima-cci.or.jp/fuji/mybooks/cdiag/cdiag.2.5.html

という話で終わるでしょ。
たとえ個人製作レベルでも1万行なんて普通に超えるよ。

もしタスクシステム使う人が
 「1万行越えたらそのコードはいったん捨てて、タスクシステム使わずに1から設計し直すよ」
という認識を持っているならアリかもしれないが、
例えば
 「1万行越え確実だけどタスクシステム使って設計するよ。
  もちろん1万行超えたらそのコードはいったん捨てて、またタスクシステム使って1から設計し直おすよ」
と言う話ならナシ。
0092名前は開発中のものです。2009/02/21(土) 15:31:55ID:3HETWV4t
>>90
>>84

まあ、これは無駄に「現代」とくくったのがイカンかったね。
リソース使える場面でもタスクシステム使うといいよという例があったら頼むわ。
0093名前は開発中のものです。2009/02/21(土) 15:33:38ID:Dmt7DoEE
みんな熱いな。タスクについての認識や結論はもう出てると思う。
「使いたいやつが使えばいいと思う」
ただそれだけだ。
タスクのメリット話せと言われても、おそらく使ってる人も表現し辛い箇所なんだよね。
フレーム間を跨ぐ処理を書く上で多用するわけで、その辺はゲームによってまちまちだ。
じゃあ逆にタスク代替案も示せと言われても、
switchに戻すだとかで、これといって画一的な処理は示されないのが現状。

銀の弾丸は存在しない。それだけだよね。
0094名前は開発中のものです。2009/02/21(土) 15:33:51ID:IeOQ7r77
haskellとかでタスクシステムを実装するとしたらどんな感じになるか
ただしunsafeほげほげとかIORef禁止で
0095名前は開発中のものです。2009/02/21(土) 15:45:18ID:7rFrs1eT
>>91
そのURLに書いてあるのって、アクセスの話じゃなくて宣言を整理するって話じゃないの?
0096名前は開発中のものです。2009/02/21(土) 15:46:27ID:P36r7rTD
>>92
CPUリソースとメモリリソースを考慮に入れないなら
それこそどんなアルゴリズムでもいいんでない?遅かろうが無駄だろうが好きなの使えば。
作業効率とか考えるならプログラムも不要でツクールやMODでいいんじゃね?という感じ。

本職のプログラマなら、どんなチープな環境でも軽量・低コストで動作できる
アルゴリズムを知ってるのは十分メリットだと思うけど。
組み込みにしろ、携帯機にしろ、リソースの厳しい環境でやれって言われるのは
良くあることだから。

ま、個人製作ならそんなことどーでもいいんで、
そーなると実装方法を強制されない個人製作で何でアンチタスクになるのかが謎だが。
嫌いなら使わなきゃいいだけなのに。何でアンチ?
0097名前は開発中のものです。2009/02/21(土) 15:47:46ID:4jF5VqD/
>>91
なつかしいな「Cプログラミング診断室」
でもグロバール変数一覧は俺はオススメできないけどな
そもそも作るなといいたいw>グローバル変数・関数
0098名前は開発中のものです。2009/02/21(土) 15:48:18ID:Vn5x9Xxe
Haskellはスレッドが数バイトしか使わないほど
軽いから結構かわりそう
0099名前は開発中のものです。2009/02/21(土) 16:01:57ID:3HETWV4t
>>96
いきなり極端になったな。
作業効率考えるなら〜の部分が唐突に投げやりなんだが、まあしゃあないか。

>>39
>>40
この流れをよく見てみよう。
結局、変に凝ってるのはどっちだよ。
アンチっていうか、こういう意味不明なこと言う奴に、
「リソースある場面でタスクシステム導入する奴は変に凝ってる」
と言いたいわけだ。

リソース無い場面で使うことに関して異論がないのはもう何べんも言ってるのでこれ以上繰り返さないようにな。
ちなみに>>39で想定している場面てリソースないような状況じゃないよな。
0100名前は開発中のものです。2009/02/21(土) 16:04:15ID:bQf1hP7d
>>95
そうです。今見返すと話つながってないっすね。混乱させてごめん。
1つ目のURL書いた理由は、グローバルなもの(マクロも変数も)を無秩序に使ってると
10000行あたりで破綻するという話を紹介したかったからです。

2つ目のURLはOKだよね?
0101名前は開発中のものです。2009/02/21(土) 16:04:28ID:Kwr5xaMF
>99
引数クンなのか、ごった煮リスト嫌いクンなのか、どっちなの?
それとも、それ以外?

複雑なものは理解できないクン?
0102名前は開発中のものです。2009/02/21(土) 16:05:45ID:a9F+sDW/
>>92
リソースが余ってるならC++を使う必要性自体がないのでは・・・w
俺は>>84は、現代のプログラマでも「タスクも知っていた方が良い」ことを示すいい事例だと思った

リソース使える場面でC#やRubyよりC++使うといいよという例があれば前言は取り消す
0103名前は開発中のものです。2009/02/21(土) 16:08:02ID:07PQbtcV
>>76
> (5087 + 514 + 118 + 235) - 4684 = 1270
> その差50行程度だが、どこが遥かになんだ。

タスクシステム使わないほうは、27%もソース増えてるじゃん。

開発時間はソースの量にだいたいは比例するから、
8時間の作業で済むところが、10時間強もかかる計算になるじゃん。

俺ならそんなの御免だね。
だから、俺は使えるところでは使ったほうがいいという結論だな。

使えないと思うところでは使わない。それだけのことじゃん。
0104名前は開発中のものです。2009/02/21(土) 16:13:33ID:4jF5VqD/
>>103
処理が減ったわけでもないのに
そこがそんなにうれしいとこなのか?
0105名前は開発中のものです。2009/02/21(土) 16:16:13ID:07PQbtcV
>>104
人間がバグを仕込んでしまう確率は、だいたいコードの分量に比例して増えるからね。

可読性を保っているなら、コードは少ないほうが望ましい。27%も違えば大きな違いだろう。
0106名前は開発中のものです。2009/02/21(土) 16:18:18ID:7rFrs1eT
>>100
1つ目が繋がってないのに2つ目を持ってこられても困るというか
個人的な感想を言えば、たったの1万行で破綻するとはとても思えない
0107名前は開発中のものです。2009/02/21(土) 16:19:40ID:4zHPU/si
とりあえず俺は実装についてはどうでもよくて、タスクシステムという名前へのアンチ
要はゲーム中で動く「モノ」のことでしょ?なんでわざわざタスクとか呼ぶん?

例えば「実例で学ぶゲームAIプログラミング」の2章が
もろにいわゆるタスクシステムやタスク間通信の近代的なC++実装だと思うんだが
タスクなんてひとっことも言わないし、こうやって作るんだとか誇りもしないのね。たいしたことじゃないから。
これがいまどきのありふれた感覚じゃねーの?

だいたい根本的に、「モノ」を管理するために低レベルなOSのアナロジーを使うこと自体が間違ってると思う。
そういうの実装を歪めると思わん?
「ゲームオブジェクト」「エンティティ」「アクター」なんでもいいけど、「タスク」だけはない。
具象的なネーミングとしても抽象的なネーミングとしても。
非ゲームプログラマがTaskという名前のクラスを見て、何なのかすぐ理解できるのかってことですよ。

お前らがやりたいのは、OSの稚拙な真似事じゃなくて、「モノ」を動かすことでしょ?

あーでもロスプラみたいにマルチコアに振り分けるならOS的要素強いかもね。わかんね。
結局、典型的な「自転車置場の議論」(http://0xcc.net/blog/archives/000135.html)なんだよなこれ。
松浦本読んだ程度のドシロウトでも参加できるという。

そういうのを避けるためにも俺はタスクシステムという言葉は使わない。
使ってるやつ見かけたら陰からこっそり指さして笑う。
0108名前は開発中のものです。2009/02/21(土) 16:21:47ID:3HETWV4t
行数でインパクトがないからってパーセント換算するのはヤメようぜ。
0109名前は開発中のものです。2009/02/21(土) 16:25:03ID:3HETWV4t
タスクというとITRON思い出すから嫌なんだよな。
ITRONのタスクはすげーよ。なのに、タスクシステムのタスクは全然すごくねーよ。
このギャップにイラッとするのはある。
0110名前は開発中のものです。2009/02/21(土) 16:25:40ID:4jF5VqD/
>>105
それは本質をまったくみてないなぁ
1行ごとに中身のない改行を入れて「;」を打つだけでも行数だけは増えるじゃない
しかも今回のプログラムだって工夫すれば改行崩れの処理省きでcontinue文は消せてしまうので
それをソースコードの行数の増加と考えるのは上げ足取りをしてるようにしか見えない

むしろ、マクロでfor文を見えなくした>>510のがわかりにくくて気持ち悪い
このマクロっぽいのの意味を初見でみた人が知るには付属のタスクシステムテンプレートを
全部読んで理解するしかないでしょ?
これは嫌だなぁ
仮にマニュアルもなにもなかったとしたらかなり読める人限定されそう
0111名前は開発中のものです。2009/02/21(土) 16:26:24ID:07PQbtcV
>>108
このまま規模が大きくなっても、このパーセンテージは揺らがない。
タスクシステムを使わないほうのプログラムでは、どうしても27%ほどだけソースが大きくなる。

だから行数なんかには意味がない。このパーセンテージのほうがはるかに重要だ。

お前は、どうしてそれをごまかそうとするのか俺にはわからない。
0112名前は開発中のものです。2009/02/21(土) 16:31:02ID:07PQbtcV
>>110
> それは本質をまったくみてないなぁ

そんなことはない。大雑把にはソースの分量で判定できる。

どちらのプログラムも平均的なプログラマが書いたと仮定して、
タスクシステムを使わないほうは27%もソース分量が増えたのには違いない。

> むしろ、マクロでfor文を見えなくした>>510のがわかりにくくて気持ち悪い

あの程度のソースがわかりにくいとは思わないが、マニュアルがないと
正しく使えない人がいるというのには同意。

ただ、本人が開発するなら話は別だろう。
0113名前は開発中のものです。2009/02/21(土) 16:33:03ID:4jF5VqD/
>>111
酷いな
ループのカッコとnull判定のことでしかないのに
ここまでくると病気としかいいようがない
0114名前は開発中のものです。2009/02/21(土) 16:35:43ID:4jF5VqD/
まあ、でも差分がループのカッコとnull判定だけなんだから
それがタスクシステムの本来の役目ということがはっきりしたともいえるね
正直、差分がそこしか見えなかったんだからそれでいいんだよな?

タスクシステム=ループのカッコとnull判定をはじけます

でおk?
0115名前は開発中のものです。2009/02/21(土) 16:38:17ID:07PQbtcV
>>113
あんたはプログラミング経験が浅くてわかってないんだろうが、ループも、二重ループにするとき、
i,jの添え字を間違えたり、null判定を忘れたり、continueを書き忘れたりするのが人間ってものなの。

そういう定型化している部分を共通部分として書き出して、どこか別のところに追いやったほうが
バグは減るわけ。それは別にタスクシステムでなくてもいいのだが。

forがforeachになっただけでずいぶんバグが減る。
foreachの終了のときのハンドラを定義する構文があればさらに安全性は高まる。

そうやって抽象化と共通部分の括りだしを繰り返して書いていくのがプログラムだろう。
0116名前は開発中のものです。2009/02/21(土) 16:40:14ID:3HETWV4t
>>111
>このまま規模が大きくなっても、このパーセンテージは揺らがない。
どこがそんなにラクになるのかなと見直したが、2重のforループがTASK2と書けるんだね。
ここでだいぶ文字数稼いでるみたいだ。
んで、それがそんなにうれしいことなのかと言われるとNOな訳で。
0117名前は開発中のものです。2009/02/21(土) 16:40:41ID:4jF5VqD/
>>115
だから

タスクシステム=ループのカッコとnull判定をなくした最新鋭のシステムです

でいいんだろ?
0118名前は開発中のものです。2009/02/21(土) 16:41:07ID:07PQbtcV
>>114
> 正直、差分がそこしか見えなかったんだからそれでいいんだよな?

全然違うね。

510のように抽象化することで、自動並列化のようなことが可能になってくる。

まあ、510のソースを自動並列化するのは正直無理だが、もう少し抽象化して、
各タスクの役割を明確に記述できれば自動並列化できる。
0119名前は開発中のものです。2009/02/21(土) 16:41:26ID:P36r7rTD
>>107
「ウォークマン」みたいなものじゃない?
最初に有名になって、それ以降類似したものの総称として
便利だから名前だけ使ってるって。

>非ゲームプログラマがTaskという名前のクラスを見て、何なのかすぐ理解できるのかってことですよ。
タスクシステムを使うのはゲームプログラマでしょ。普通は。

いちいち現場で「これはオブジェクトを管理するシステムで更新と描画で登録関数が呼ばれて…」
とか説明するより「タスクシステム的なもの」の一言でゲームプログラマならだいたいって通じるし。

ま、デザインパターンみたいにちゃんと定義と命名されればいいんだろうけど
ゲーム業界固有の物だしねぇ
0120名前は開発中のものです。2009/02/21(土) 16:41:35ID:07PQbtcV
>>116-117
>>118
0121名前は開発中のものです。2009/02/21(土) 16:45:39ID:4jF5VqD/
>>118
それは>>510からはいえないな
実際、>>510>>641の間で自動化云々って話はないわけだし
自動化を証明したければ比較のソースを書いてからだな
それまではいっちゃいけねぇだろ
俺も否定しないし
少なくとも>>510>>641の間では自動化は見えなかった
今回はこれが結論
0122名前は開発中のものです。2009/02/21(土) 16:52:23ID:3HETWV4t
まあ、2重のforループで文字数稼いでいるということは、
forループの中身が増えれば増えるほどその稼ぎは薄まる訳だ。
規模が巨大になればなるほどパーセント減るようにしか見えないぞ。
その辺どうなのよ。
0123名前は開発中のものです。2009/02/21(土) 16:55:30ID:07PQbtcV
>>121
510と641を並列化するソースを書き比べればすぐにわかるよ。
そんな本格的なものでなくていいから。

2重ループでi×jのループ回してるところ、あれをi×j / N のループに
分けて実行して、すべてのスレッドの終了をセマフォで待つだけでいいよ。
0124名前は開発中のものです。2009/02/21(土) 16:56:43ID:07PQbtcV
>>122
> forループの中身が増えれば増えるほどその稼ぎは薄まる訳だ。
> 規模が巨大になればなるほどパーセント減るようにしか見えないぞ。

それはもちろん正しい。そのへんはゲームの性質によるだろう。
0125名前は開発中のものです。2009/02/21(土) 17:14:52ID:3HETWV4t
>>124
>>111
0126名前は開発中のものです。2009/02/21(土) 17:27:14ID:iOCBxjYv
タスクシステムとやらのメリット
コードが一割減

タスクシステムのデメリット
可読性が低くなる


この調子でお願いします
メリットわかってるんだったらごまかさずに書けよ
そんな出し惜しみばかりするから無駄に荒れる
0127名前は開発中のものです。2009/02/21(土) 17:35:18ID:07PQbtcV
>>126
コード削減、一割減はちょっと違うと思うな。
今回の例ではタスクシステムを使わないと27%増。

俺の感覚では、だいたいこの数字はどんなゲームでもそんなに変わらなくて
平均すれば20%前後だと思うな。これが10%程度ってことはないな。

並列化とかもっと大がかりな仕組みがタスクシステム側に用意されていれば
この差はもっと広がるしな。まあ、それをタスクシステムと呼んでいいのかは知らんが。
0128名前は開発中のものです。2009/02/21(土) 17:46:01ID:iOCBxjYv
じゃあ二割減でもいいや

開発速度向上はない、可読性が低いものほど開発に時間がかかるから
タスクシステムとやらのデメリットとして
開発に時間がかかるというのも追加できる

この調子ならメリットデメリットを列挙できそうだな
選択肢になりうるかどうかはそれを見れば判断できるだろう
化けの皮を一枚ずつはいでいくのは楽しいの
0129名前は開発中のものです。2009/02/21(土) 17:52:15ID:07PQbtcV
>>128
> 開発速度向上はない、可読性が低いものほど開発に時間がかかるから

ソース全部理解しなくても、510のタスクシステムは使えるだろ。

TASK2(クラス名A,クラス名B)
{
クラス名A1.XXX = YYY;
クラス名B2.ZZZ = WWW;
}

こう使うだけじゃん。説明に1分も要さないと思うが?
0130名前は開発中のものです。2009/02/21(土) 17:52:47ID:Kwr5xaMF
>128
> 開発速度向上はない、可読性が低いものほど開発に時間がかかるから
> タスクシステムとやらのデメリットとして

まずタスクシステムのどこが可読性低いのかを示してもらわないと。

FSMになってるところ? 関数ポインタの部分? ごった煮リスト?
0131名前は開発中のものです。2009/02/21(土) 18:15:26ID:D/oVP314
>>130
自分のタスク内で完結しない処理に関しては、全部グローバル変数経由

ゲーム中のあるシーンを想定した場合、そこで何のタスクがどういう順番で走るかが、
コードの一箇所を見てもわからない。

0132名前は開発中のものです。2009/02/21(土) 18:15:57ID:4jF5VqD/
>>129
でも読みにくいなぁ、おいw
それが何を表してるのかさっぱりわからないぜw
ループ隠しただけなのになw
0133名前は開発中のものです。2009/02/21(土) 18:24:15ID:hYClRP74
>>131
>自分のタスク内で完結しない処理に関しては、全部グローバル変数経由
そんな処理するのはタスクじゃないだろ。
0134名前は開発中のものです。2009/02/21(土) 18:26:52ID:D/oVP314
>>118
> もう少し抽象化して、各タスクの役割を明確に記述できれば自動並列化できる。
そんな簡単じゃないよ。

並列処理は計算機科学の分野では長らく研究されていて、いろいろ知見が積み重なってるんだが、
少なくとも 510 からは、自動並列化につながる筋道がまったく見えない。

夢が大きいのはいいんだが、まったく現実性が無いのもどうかと思うぞ。
0135名前は開発中のものです。2009/02/21(土) 18:32:19ID:a9F+sDW/
タスク擁護派から言わせてもらうが、>>129 は読みづらいよ
初めて読む STL や Loki や boost と同じくらいにね。俺なら使わん

結局、あるライブラリを使うメリットは普及してるかどうかだ
strcpy や strncpy を使うメリットはなんだ?
みんなあの仕様はおかしいと感じているのに? タスクもそれと同じこと。

そして、普及さえしていなければメリットはないと考えて必死で叩くお前らは正しい
0136名前は開発中のものです。2009/02/21(土) 18:40:14ID:07PQbtcV
>>134
> 並列処理は計算機科学の分野では長らく研究されていて、いろいろ知見が積み重なってるんだが、
> 少なくとも 510 からは、自動並列化につながる筋道がまったく見えない。

「自動」の意味を誤解しているようだが、
自動車は、自動的に目的地まで運んでくれる乗り物ではないのと同様、
人間が何もしなくてもいいという意味ではない。

俺が「自動」並列化と言っているのは>>123の意味。
例えば、TASK2をP_TASKと人間が書き換えればあとは自動的に並列化してくれるように改造するのは容易。

なんでこれが出来ないと思うのか、俺はお前らの技術力を疑いたくなる。本当にお前らプログラマなのか?
0137名前は開発中のものです。2009/02/21(土) 19:05:26ID:D/oVP314
>>136
> なんでこれが出来ないと思うのか
その程度で済むなら OpenMP がやってる
0138名前は開発中のものです。2009/02/21(土) 19:18:40ID:4jF5VqD/
>>136
なんにも自動化しないだろw
0139名前は開発中のものです。2009/02/21(土) 19:35:06ID:07PQbtcV
>>137-138
お前らが何もわかってないただの自称プログラムだというのは十分わかった。

123すら出来ないとはな。
0140名前は開発中のものです。2009/02/21(土) 19:51:24ID:07PQbtcV
>>138
お前本当に日本人か?どう見ても中国人だろ。

前スレ、前前スレから日本語が極端に不自由な奴が二名いるみたいだが、お前はそいつだろ。

プログラム以前に日本語教室行ってこいよ。
0141名前は開発中のものです。2009/02/21(土) 19:59:47ID:4jF5VqD/
もはや進む方向が頭おかしいじゃん
ループなんかはずして喜ぶプログラマいないってw
むしろ、ループ処理してるならfor文を見えるところにおいておいてほしいだろ
誰がこんな構造にして喜ぶのか?
ちょっとは考えろよ
0142名前は開発中のものです。2009/02/21(土) 20:09:26ID:D/oVP314
>>139
依存関係も副作用も無いコードなら、そら簡単に並列処理できるさ。数値計算だと
割と多いが、ゲームでそれはほとんどないだろ。
0143名前は開発中のものです。2009/02/21(土) 20:43:23ID:HdiuLFdj
日本語がおかしかったら中国人ってなんできめつけんの?
インド人かもしれんし韓国人かもしれんだろ
0144名前は開発中のものです。2009/02/21(土) 20:43:36ID:iOCBxjYv
可読性に関してはDSLの圧勝なので
それに比べてタスクシステムは可読性がないと言えるのは間違いないよ
専門家でも読むのが難しい本と、幼稚園児が読める絵本とでは
同じ文字数だとしても
絵本の方が圧倒的に速く読めるでしょう、当たり前だけどな

使えるから使えると言ってるけど
使ったら他の選択肢がなくなるから、使えるからと言って考えなしに使うなと
昔の偉い人とエロイ人もゆってた

つまり、エロエロよー
0145名前は開発中のものです。2009/02/21(土) 20:47:01ID:Dmt7DoEE
>>142
横槍ですまんが、あくまでゲームで並列処理は難しいと決め付けるのは良くない。
ゲームは依存化が明確にしやすく、
割と並列化しやすいとMTフレームワークの中の人が言っております。
http://game.watch.impress.co.jp/docs/20070131/3dlp.htm
>石田氏は「タスクという観点から見ると、依存関係は最小化でき、
>むしろゲームプログラムは並列化しやすいともいえるんです」と、
>これまでのゲーム開発の常識とは正反対の意見を主張する。

これには自分も驚いたが、
MTフレームワークの製作者が実践してそう思ったのなら説得力があると思わないか?
まぁ、予想(予測)と理論と実践はそれぞれ違うって事だ。
0146名前は開発中のものです。2009/02/21(土) 20:56:31ID:D/oVP314
>>145
予想というか、仕事で実際にゲーム書いてた経験談なんだが。モーションとかレンダリング
まわりのジョブはわりと分割しやすいんだけど、いわゆるゲームロジックに絡む部分は、
かなり難しい。

排他制御は特にバグが入りやすい部分だし、仕様変更多発が想定されるゲームロジック
部分を並列処理するのはリスキー。
0147名前は開発中のものです。2009/02/21(土) 21:03:43ID:Dmt7DoEE
完全に頭ごなしに否定するのではなく、
そのリスキーな部分をいかにして、
安全で仕様変更に強い設計で書くのかを議論していってもいと思うわけよ。

仕事でロジック部分の並列化やられたら、うへぇってなるが、
趣味だったら面白いネタだとおもわないかい?
0148名前は開発中のものです。2009/02/21(土) 21:13:55ID:Dmt7DoEE
まぁ俺はタスク使わない派だけれども、
もしタスク派が生き残りをかけるのなら、マルチコア時代の恩恵を
受けられるような並列処理の記述性ただ1点だけ突き詰めるのが良いとおもうぜ。
0149名前は開発中のものです。2009/02/21(土) 21:15:06ID:iOCBxjYv
前スレでは、誰かがプロも使っているタスクシステムと言ってたな
他人の権威にすがって偉そうにする奴も世の中にはたくさんいる
そういう奴は最後には命乞いをして延命を図る
延命を図るのだよっっっ
くやしいのぅ、くやしいのぅwww
0150名前は開発中のものです。2009/02/21(土) 21:37:12ID:H2kw4iDd
ID:Dmt7DoEE
前スレの>>510は名乗るのをやめても
タスク信者の特徴は消せないのだから
名乗るといい

名無しでの火消し&誘導は無駄
0151名前は開発中のものです。2009/02/21(土) 21:43:42ID:Dmt7DoEE
いや。俺は以前>>22を書いた者で、すまんが510とは別人だ。
実際にタスクについては主に見通しの問題で否定的で、参照構造についても目的が無ければ無意味な足枷でしかないと考えている。
ただ、並列化については興味があるわけ。マルチスレッドで速度を稼げるのならそういう技術も覚えたいと思っている。
そんな中、自動並列化についてタスクにはその可能性がなきにしもあらずと考えている。
まぁ自分は実装するのはゴメンだがね。
0152名前は開発中のものです。2009/02/21(土) 21:49:55ID:07PQbtcV
>>142
> 依存関係も副作用も無いコードなら、そら簡単に並列処理できるさ。数値計算だと
> 割と多いが、ゲームでそれはほとんどないだろ。

あんた、本当に大きなゲームのプログラム書いたことがなさそうだな。

並列化して処理時間を稼ぎたい部分って、同期のためのコストとかもあるから
実際はかなり粒度の大きな、単純な計算が繰り返される処理なんだよ。
ゲームのうち、衝突判定とかは特にそういう計算ばっかりだ。

まあ、>>145でもすでに指摘されているが。

このスレは本当に商用で大きな規模のゲームを作ったことがあるのかと
疑いたくなるような奴ばかりで俺はただただ呆れるばかりだ。
0153名前は開発中のものです。2009/02/21(土) 21:50:34ID:D/oVP314
>>151
> そんな中、自動並列化についてタスクにはその可能性がなきにしもあらずと考えている。
そもそも、CPU 食ってるのはゲームロジックより、ヒット判定やモーション処理だったり
しないか? 将棋とかの AI は別だけどさ。

そこは仕様が比較的安定しているから、作りこむだけのコストがかけられる。自動並列化
なんていわずとも、従来のロックベースの方法で OK。
0154名前は開発中のものです。2009/02/21(土) 21:55:00ID:3HETWV4t
一般的な自動並列化と俺定義の自動並列化で話が通じ合ってないな、お前ら。
0155名前は開発中のものです。2009/02/21(土) 21:59:19ID:D/oVP314
>>152
衝突判定は、単に「ぶつかってる・いない」を判定するだけなら簡単なんだが、衝突の
解決が絡むと並列化が割と難しい。

衝突解決には、たとえば「壁は動かない」「プレイヤーが壁に当たったら押し戻される」
「プレイヤーと NPC があたったら NPC 優先」とかルールを決めて、それに応じて
優先順位つけて解決していくのが一般的だと思うが、問題は解決するときに相互
作用が発生することなんだよな。

シーケンシャルに処理するなら、割と手抜きアルゴリズムでもそれっぽく見えるんだが、
並列処理するとなったら、とたんに複雑さが増す。前に一度やってみてメゲた。
0156名前は開発中のものです。2009/02/21(土) 22:02:28ID:Dmt7DoEE
>>153
コンシューマならCPUの数と使用用途が特定されてるもんだが、現実的に考えて決めうちでが妥当だと思う。
PCのような特定されないマルチCPUの環境を考えると、自動で並列化するのは面白いんじゃないんかねぇ……。
自動並列化といっても、正直こればっかりは実装してみないと、
どのようにスレッド分配され、パフォーマンスが上がるのか下がるのかは、議論できんところだね。
0157名前は開発中のものです。2009/02/21(土) 22:08:58ID:3HETWV4t
お前らw

>>136で自動並列化の俺定義出してるんだから、ここはそれに合わせてやれよ。
>>136はライブラリ提供者が、ライブラリ利用者に分からないようこっそり裏で並列化(手作業)しやすいよ。
と、言ってるんじゃないの? 違うか?

ちなみにID:D/oVP314とその他は一般的な意味で話してるような気がする。
ググって出てくるような一般的な意味ね。
0158名前は開発中のものです。2009/02/21(土) 22:14:35ID:D/oVP314
>>157
っつか、それはデータの依存性自動検出とかできないと無理なわけで。ハードルが
超高い。
■ このスレッドは過去ログ倉庫に格納されています