- 1 名前:名前は開発中のものです。 mailto:sage [2009/02/19(木) 02:21:01 ID:k4ODtuXP]
- タスクシステムについての議論、相談、質問、雑談などのスレです
part4 pc11.2ch.net/test/read.cgi/gamedev/1233459490/ part3 pc11.2ch.net/test/read.cgi/gamedev/1226199100/ part2 pc11.2ch.net/test/read.cgi/gamedev/1196711513/ part1 pc11.2ch.net/test/read.cgi/gamedev/1173708588/ ・タスクと呼ばれる実装は、非常に多岐に渡ります 古典タスクシステムについての話題は「>>2」と明示してください そうでない場合はカスタム版タスクであることを明示してください ・人を憎んで言語を憎まず
- 37 名前:名前は開発中のものです。 mailto:sage [2009/02/20(金) 22:54:50 ID:U7J/cf6e]
- DBって何?
ドラゴンボールの略かえ? タスクシステムってwikiにすら載ってないから謎が多いよね オブジェクト指向データベースですらwikiに載ってるというのに タスクシステムごときをシーングラフと同列に並べるなよ 全角英数使うなよ DSLぐらい理解しろよ 飯食ったか 風呂入ったか 歯ー磨けよ
- 38 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 04:05:46 ID:J8fI+ges]
- そのwikiってのは、もしかしてWikipediaのことか?
- 39 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 09:45:44 ID:P36r7rTD]
- 個人で作る規模のゲームなら、変に凝らなくてもタスクシステム程度でちょうどいいんでないかな。
タスクも必要ないテトリスとかオセロぐらい単純なゲームならwhile/switch/caseだけでもいいし。 仕事で作るゲームならその現場のルールや伝統の方法でやりゃいい。 結局アンチタスクって ポインタも構造体も無いHSPでタスク使いたくても使えないから すっぱい葡萄になってるレアケースでしょ。
- 40 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 10:18:19 ID:3HETWV4t]
- 「変に凝ってる」のがタスクシステムだと気付け。
- 41 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 10:22:39 ID:3HETWV4t]
- いい加減ド素人タスカーの「お前ら技術力ないだろ、○○を勉強しろ」的なレスは飽きた。
- 42 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 10:27:28 ID:P36r7rTD]
- >>40
あの糞単純なタスクシステムのどこが凝って見えるのかを知りたい。
- 43 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 10:32:12 ID:3HETWV4t]
- どのタスクシステムについて言ってるんだ?
>>2か? >>2なら現代でやる意味がないという意味で変に凝っている。 その他のカスタムタスクを指しているなら、目的が迷走している点で変に凝っている。
- 44 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 10:35:42 ID:3HETWV4t]
- #define ONE 1
#define PLUS + int x = ONE PLUS ONE; こんな馬鹿げたことをやってるのがタスクシステム。 単純なこと変なやり方でやって喜んでるだけだろ。
- 45 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 10:40:06 ID:P36r7rTD]
- >>44
よくわからんが 君の頭の中では タスクシステム=マクロ なのか? もしかしてタスクシステムを理解してない?
- 46 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 10:41:23 ID:3HETWV4t]
- ……。
「単純なこと変なやり方でやって喜んでる」という例えを示しただけなんだけど。
- 47 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 10:49:00 ID:P36r7rTD]
- タスクシステム自体はすごく単純な作りだけど
あれでも理解できない人がいるということか まぁ関数ポインタとか、C言語初心者には「変なやり方」で難しいかもしれんが。
- 48 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 10:52:57 ID:3HETWV4t]
- まあ、「理解してない?」みたいな突っかかり方が十八番だからしゃあないか。
つーか、理解するとかしないとか、どんだけ低レベルなの。 >>47 >>41
- 49 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 10:56:23 ID:P36r7rTD]
- >>48
それはつまり みんな君が理解してないことを突っ込んでたけど 君は勉強しても理解できないからアンチになった、ということになるが…
- 50 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 11:00:45 ID:3HETWV4t]
- とりあえず、タスクシステムのメリットを説明してみ?
誰もまともにできてないんだが。 お前がどう理解しているのかちゃんと示してくれ。
- 51 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 11:02:15 ID:3HETWV4t]
- メリット説明できずに黙るだろうな。
これまでの奴は全部そうだった。 ID:P36r7rTDの健闘を祈る。
- 52 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 11:04:27 ID:P36r7rTD]
- ギャラガとか今なら個人で作る規模のアクションゲームなら
複数オブジェの並列動作を単純に記述できていいね、ぐらいのものじゃない? そんな難しく考えるほどのもの?
- 53 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 11:08:42 ID:3HETWV4t]
- forループで済む話をわざわざ変なやり方で面倒にしている理由を話せと言っている。
単純というが、普通に書いたらどう複雑で、それをどう単純にしたのか示してみろ。 タスクシステムのほうが複雑だから「単純に記述」という部分が嘘になってるんだよ。
- 54 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 11:18:09 ID:P36r7rTD]
- ギャラガを例にとると
自分・敵の弾、敵の死亡、敵の生成、などのオブジェが可変のケースだと オブジェの増減をリスト管理してとか、結局タスクシステムと同じような仕組み作る必要があるんでない? さらに、敵が編隊組んで移動、とかボーナスシーンとか、隊長機がやられたら編隊解散、とか タスクなら関数切り替えで単純に状態推移を記述可能だけど switch/caseで状態をオブジェ単位で記録して切り分け、となると タスクシステムのほうがシンプルに記述できるだろ。 まぁ関数ポインタ理解できない人が見たら難しいソースになるかもしらんが。
- 55 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 11:21:56 ID:4jF5VqD/]
- >>54
なにいってるのかまったくわからない
- 56 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 11:25:13 ID:P36r7rTD]
- まぁ理解できないなら使わないでいいと思うぞ。
趣味のプログラマがどんな方法でプログラムしようとも 誰も文句いわんだろ。
- 57 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 11:30:15 ID:3HETWV4t]
- 状態遷移を関数ポインタで表現するのは良いと思うし、
それはタスクシステムに限ったことじゃないよな。 >>1を読んで、どのタスクシステムについて語ってるのかハッキリさせてほしいんだが。 タスクシステムだとオブジェクト間の関連が処理順依存になって面倒になると思うが。 そこはどうすんの? 1フレームの誤差だから許容すんの?
- 58 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 11:38:27 ID:P36r7rTD]
- >>57
>>1を読んで、どのタスクシステムについて語ってるのかハッキリさせてほしいんだが。 ゲームの種類にあわせればいいんでない? ほんとに単純なゲームなら>>2でもいいけど、ゲームによって問題が出たり 普通にC++使える環境ならクラスで作り直したり改良もあり.。基本的な考え方は変わらんでしょ。 >>タスクシステムだとオブジェクト間の関連が処理順依存になって面倒になると思うが。 オブジェクト間の処理順が問題になるケースなら いわゆる「プライオリティつき」タスクを使うか、シグナルのような仕組みを付け加えればよいのでは? そもそもあんまりタスク使って複雑になるようなゲームならタスクじゃない管理方法使うべきだし。
- 59 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 11:55:53 ID:3HETWV4t]
- >>58
>基本的な考え方は変わらんでしょ。 TCB有る無しで違うと思うが。 タスクを1個のリストで管理するかどうかも重要だ。 ごった煮リストでむりくり制御しようとしている様を指して変だと言ってるんで。 >いわゆる「プライオリティつき」タスクを使うか、シグナルのような仕組みを付け加えればよいのでは? ここまでやると「単純」の域を超えているだろ。 すでにコードの見通しが悪くなってる。 「タスクシステム」のプライオリティーはベーシックの行番号やGOTOに見えるわ。 >そもそもあんまりタスク使って複雑になるようなゲームならタスクじゃない管理方法使うべきだし。 そうだな。
- 60 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 12:02:50 ID:P36r7rTD]
- 「箸なんて原始的です。だから誰かメリット教えてくれないと箸の使い方覚えません」
って言ってる子供と同じだな。 「魚食うときとか便利だろ?」と言っても 「スープ飲めないじゃん、肉切れないじゃん」と言い返される。 スープ飲むときゃスプーン使えばいい。肉きりたきゃナイフとフォーク。箸で食いやすいものは箸で食えば良い。それだけのこと。 でも箸ぐらい使えないと馬鹿にされるぞ、と。
- 61 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 12:16:21 ID:G7lsvTqK]
- 単純-複雑、変-変じゃない、とか審美的主観の話をしたら
好みの違う人とは話が合わないのは当然。 技術的に欠陥や優位があるというのならコードや 測定結果の数字を使って具体的に定量的に主張しろよ。
- 62 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 12:20:35 ID:3HETWV4t]
- >>60
で、「箸で食いやすいもの」は結局なんなの? タスクシステム使って良かったと思える場面てどこ? やっぱりメリット言えないの? タスクシステムが原始的だなんて言ってないだろ。 タスクシステムよりもずっと原始的なやり方のほうが遥かにマシだと言ってるんだが。
- 63 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 12:21:06 ID:4jF5VqD/]
- >>60
ちがうな 箸で食えばいいのにトンカチで食べようとしてる人がいるから なんで?って聞いてるんだ
- 64 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 12:22:39 ID:4jF5VqD/]
- いや、トンカチですらないな
トンカチは役に立つもんなw タスクシステムはなんだろ? なんにも役に立たないやw
- 65 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 12:23:43 ID:3HETWV4t]
- 定量的な主張なら前スレ>>510と>>641でやったな。
>>510にはメリットが無いのにコード量は>>641の倍だった。 コード量の差と>>510が使っていたかなりの量のマクロを指して複雑だと言っている。 >>2はその時点ですでにタスク信者が見放していたからまだだけど、比較する必要あるか?
- 66 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 12:25:36 ID:Kwr5xaMF]
- >53
だからcontinuationの問題だろ?
- 67 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 12:27:01 ID:3HETWV4t]
- >>66
だから継続もタスクシステム抜きで実現できるだろ?
- 68 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 12:27:28 ID:Kwr5xaMF]
- >57
全てのn+1は、必ずnを参照すべし とキミは主張しているのか?
- 69 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 12:27:39 ID:hYClRP74]
- そのうえ全部まるごと食えばいいじゃんとか言う奴もいるから話にならんな
- 70 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 12:28:57 ID:Kwr5xaMF]
- >67
dispatch部分をいちいち個別に書くのかよw
- 71 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 12:29:20 ID:3HETWV4t]
- >>68
何言ってるのかサッパリ分からん。
- 72 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 12:34:33 ID:Kwr5xaMF]
- >71
> タスクシステムだとオブジェクト間の関連が処理順依存になって面倒になると思うが。 > そこはどうすんの? > 1フレームの誤差だから許容すんの? タスクシステムだろうと、個別ループだろうと、処理依存するだろ? 1フレームの誤差はどちらでも出るぞ。 だから、『状態n+1に更新する場合は、全ての状態nを保存してから処理すべし』、と言いたいのか? と尋ねたんだが、理解できなかったか?
- 73 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 12:46:40 ID:Kwr5xaMF]
- 逆に言えば、
priorityを上げ下げすることで処理順依存をある程度解消できるタスクシステムとやらの方が 個別ループよりも柔軟性が高く優秀である とID:3HETWV4tは言っているわけだが、今まで言ってきてることと矛盾してるだろ? ホントに気づいてないのか?
- 74 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 13:56:49 ID:07PQbtcV]
- >>65
> >>510にはメリットが無いのにコード量は>>641の倍だった。 タスクシステムの部分を除けば641のほうがはるかにコード量は多かったよ。 それだけでもタスクシステムというシステムを導入するメリットがあると言えると思うが。
- 75 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 14:20:08 ID:3HETWV4t]
- >>72
>タスクシステムだろうと、個別ループだろうと、処理依存するだろ? ああ、そりゃそうだな。 >>73 プライオリティーで表現すれば処理順を動的に変更できるし柔軟性も高まるが、そんな需要あるか? ・自機の弾に当たっている敵A ・自機に重なっている敵A この場合どちらを先に処理するか、全部消滅させるかみたいなルールは動的に決めるものではないよな。 これをわざわざプライオリティーで表現してソートしたりするのが面倒なんだが。 さらにこの辺のプライオリティーがハードコーディングならやっぱり無駄にしか見えん。 でもってこれをタスクシステムで頑張ると「面倒→誤差許容しないとやってられない」、 というシナリオを描いて>>57の発言となった。 シグナルだのプライオリティーだの言っても所詮ルールが静的ならべた書きのほうが楽だろ。
- 76 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 14:29:25 ID: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行程度だが、どこが遥かになんだ。
- 77 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 14:30:42 ID:Te+n/W8K]
- なんで静的であるという前提なんだ?
そういうゲームしか作ったこと無いとか?
- 78 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 14:34:49 ID:3HETWV4t]
- >>77
この手のルールが動的に変わる場合ってどんなのがあるの? ギャラガは違うよな。
- 79 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 14:40:53 ID:P36r7rTD]
- 素手で食いたいなら素手で食ってもいいんだが…
何を使えばいいかは料理しだい。世界中の料理を箸で食べろとは主張してないし、 ナイフもフォークもどんな道具も、万能な道具なんてないよ。 でも箸使えないからって箸を否定するのはみっともないよね、ということだね。 箸を使えないのが能力不足のせいか、HSPのせいかは知らんが。
- 80 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 14:48:03 ID:Te+n/W8K]
- >78
つまり、作ったことも無ければ想像したことも無いということか。 ダメジャンw
- 81 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 14:50:59 ID:3HETWV4t]
- 万能な道具はないが、明らかに場違いな道具はあるって話。
俺はもともと目的に合った手段を選べという立場だ。 タスクシステムが手段として他のやり方よりもまともに機能する場面て何?と聞いているんだが。 その問いに対してズバリこれと言ってくれればそれで話は終わるんだがな。 >でも箸使えないからって箸を否定するのはみっともないよね 俺はオマル使えないし、オマル使ってるやつは否定したくなるな。 オマル使ってるやつはみっともないし、オマルを勧める奴は言語道断だ。
- 82 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 14:53:10 ID:3HETWV4t]
- まあ、オマルならな、渋滞にはまった時の非常手段として役立つかもしれない。
洩らすよりはマシだからな。 こういう「こんな時なら使える」って意見が欲しいんだよ。
- 83 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 14:54:55 ID:P36r7rTD]
- タスクシステムを使った実例は
ナムコの古典的アーケード以外にも 昔からのゲームメーカーのゲームを入れれば星の数ほど使われてる それに対して何もゲーム作ったことも無い人間が「メリット理解できません」 といっても「そうだろうね」としか言えんわな。 今の最新ゲームの規模で古典的タスクみたいな単純な仕組みが使われることはもう無いけど、 個人製作レベルならまだその程度で十分じゃないのかな。 個人製作レベルで数億円かかるフレームワークとかエンジンとかの話してても夢物語だし…
- 84 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 14:57:44 ID:3HETWV4t]
- >>83
現代で使うメリットが無いと言ってるんだよ。 リソースきつきつだった時代に使うことまで否定してないだろ。
- 85 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 15:03:45 ID:P36r7rTD]
- >>84
関数ポインタ理解できる程度のプログラマなら 小規模なゲームで状態推移を簡単に管理できる実装の一例、程度でしょ プログラマに実装の選択肢があるのは一般にメリットだと思うがね。 逆に君は「あらゆる状態でタスクより優れた方法がある」ということを 説明できるのかね?
- 86 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 15:06:25 ID:Te+n/W8K]
- >81
> 俺はオマル使えないし、オマル使ってるやつは否定したくなるな。 > オマル使ってるやつはみっともないし、オマルを勧める奴は言語道断だ。 オマエは要介護認定の人たちをバカにしているのか?
- 87 名前:名前は開発中のものです。 [2009/02/21(土) 15:08:18 ID:hYClRP74]
- なんでお前らは結論の出てる議題で必死になってるんだ?
- 88 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 15:18:06 ID:3HETWV4t]
- >>85
>>84
- 89 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 15:19:06 ID:3HETWV4t]
- >>86
>>36
- 90 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 15:21:43 ID:P36r7rTD]
- そーいえば
非相対マルチコアの某最新コンシューマ機で 少ないサブコアのローカルメモリ内だけでメインCPU側から独立して タスク管理するために、ほぼタスクシステムな仕組みでジョブ管理されてる実装を見たな。 これ、最新ゲームだったけど。 リソースがいくらでもある、って前提で富豪的考え方しか出来ん最近のゆとりプログラマには 結局最新技術も使いこなせないんだろうなぁ…
- 91 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 15:25:48 ID:bQf1hP7d]
- タスクシステムは個々のタスクがグローバルなもの(例えばスクリーンデバイス)にばらばらにアクセスする。
ばらばらにアクセス=グローバルなものの整理ができていない。 グローバルなものの整理ができていないと1万行を超えるプログラムを動作させるのは難しい。 www.kojima-cci.or.jp/fuji/mybooks/cdiag/cdiag.2.4.html だから代わりに引数を使おう www.kojima-cci.or.jp/fuji/mybooks/cdiag/cdiag.2.5.html という話で終わるでしょ。 たとえ個人製作レベルでも1万行なんて普通に超えるよ。 もしタスクシステム使う人が 「1万行越えたらそのコードはいったん捨てて、タスクシステム使わずに1から設計し直すよ」 という認識を持っているならアリかもしれないが、 例えば 「1万行越え確実だけどタスクシステム使って設計するよ。 もちろん1万行超えたらそのコードはいったん捨てて、またタスクシステム使って1から設計し直おすよ」 と言う話ならナシ。
- 92 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 15:31:55 ID:3HETWV4t]
- >>90
>>84 まあ、これは無駄に「現代」とくくったのがイカンかったね。 リソース使える場面でもタスクシステム使うといいよという例があったら頼むわ。
- 93 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 15:33:38 ID:Dmt7DoEE]
- みんな熱いな。タスクについての認識や結論はもう出てると思う。
「使いたいやつが使えばいいと思う」 ただそれだけだ。 タスクのメリット話せと言われても、おそらく使ってる人も表現し辛い箇所なんだよね。 フレーム間を跨ぐ処理を書く上で多用するわけで、その辺はゲームによってまちまちだ。 じゃあ逆にタスク代替案も示せと言われても、 switchに戻すだとかで、これといって画一的な処理は示されないのが現状。 銀の弾丸は存在しない。それだけだよね。
- 94 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 15:33:51 ID:IeOQ7r77]
- haskellとかでタスクシステムを実装するとしたらどんな感じになるか
ただしunsafeほげほげとかIORef禁止で
- 95 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 15:45:18 ID:7rFrs1eT]
- >>91
そのURLに書いてあるのって、アクセスの話じゃなくて宣言を整理するって話じゃないの?
- 96 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 15:46:27 ID:P36r7rTD]
- >>92
CPUリソースとメモリリソースを考慮に入れないなら それこそどんなアルゴリズムでもいいんでない?遅かろうが無駄だろうが好きなの使えば。 作業効率とか考えるならプログラムも不要でツクールやMODでいいんじゃね?という感じ。 本職のプログラマなら、どんなチープな環境でも軽量・低コストで動作できる アルゴリズムを知ってるのは十分メリットだと思うけど。 組み込みにしろ、携帯機にしろ、リソースの厳しい環境でやれって言われるのは 良くあることだから。 ま、個人製作ならそんなことどーでもいいんで、 そーなると実装方法を強制されない個人製作で何でアンチタスクになるのかが謎だが。 嫌いなら使わなきゃいいだけなのに。何でアンチ?
- 97 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 15:47:46 ID:4jF5VqD/]
- >>91
なつかしいな「Cプログラミング診断室」 でもグロバール変数一覧は俺はオススメできないけどな そもそも作るなといいたいw>グローバル変数・関数
- 98 名前:名前は開発中のものです。 [2009/02/21(土) 15:48:18 ID:Vn5x9Xxe]
- Haskellはスレッドが数バイトしか使わないほど
軽いから結構かわりそう
- 99 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:01:57 ID:3HETWV4t]
- >>96
いきなり極端になったな。 作業効率考えるなら〜の部分が唐突に投げやりなんだが、まあしゃあないか。 >>39 >>40 この流れをよく見てみよう。 結局、変に凝ってるのはどっちだよ。 アンチっていうか、こういう意味不明なこと言う奴に、 「リソースある場面でタスクシステム導入する奴は変に凝ってる」 と言いたいわけだ。 リソース無い場面で使うことに関して異論がないのはもう何べんも言ってるのでこれ以上繰り返さないようにな。 ちなみに>>39で想定している場面てリソースないような状況じゃないよな。
- 100 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:04:15 ID:bQf1hP7d]
- >>95
そうです。今見返すと話つながってないっすね。混乱させてごめん。 1つ目のURL書いた理由は、グローバルなもの(マクロも変数も)を無秩序に使ってると 10000行あたりで破綻するという話を紹介したかったからです。 2つ目のURLはOKだよね?
- 101 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:04:28 ID:Kwr5xaMF]
- >99
引数クンなのか、ごった煮リスト嫌いクンなのか、どっちなの? それとも、それ以外? 複雑なものは理解できないクン?
- 102 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:05:45 ID:a9F+sDW/]
- >>92
リソースが余ってるならC++を使う必要性自体がないのでは・・・w 俺は>>84は、現代のプログラマでも「タスクも知っていた方が良い」ことを示すいい事例だと思った リソース使える場面でC#やRubyよりC++使うといいよという例があれば前言は取り消す
- 103 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:08:02 ID:07PQbtcV]
- >>76
> (5087 + 514 + 118 + 235) - 4684 = 1270 > その差50行程度だが、どこが遥かになんだ。 タスクシステム使わないほうは、27%もソース増えてるじゃん。 開発時間はソースの量にだいたいは比例するから、 8時間の作業で済むところが、10時間強もかかる計算になるじゃん。 俺ならそんなの御免だね。 だから、俺は使えるところでは使ったほうがいいという結論だな。 使えないと思うところでは使わない。それだけのことじゃん。
- 104 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:13:33 ID:4jF5VqD/]
- >>103
処理が減ったわけでもないのに そこがそんなにうれしいとこなのか?
- 105 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:16:13 ID:07PQbtcV]
- >>104
人間がバグを仕込んでしまう確率は、だいたいコードの分量に比例して増えるからね。 可読性を保っているなら、コードは少ないほうが望ましい。27%も違えば大きな違いだろう。
- 106 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:18:18 ID:7rFrs1eT]
- >>100
1つ目が繋がってないのに2つ目を持ってこられても困るというか 個人的な感想を言えば、たったの1万行で破綻するとはとても思えない
- 107 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:19:40 ID:4zHPU/si]
- とりあえず俺は実装についてはどうでもよくて、タスクシステムという名前へのアンチ
要はゲーム中で動く「モノ」のことでしょ?なんでわざわざタスクとか呼ぶん? 例えば「実例で学ぶゲームAIプログラミング」の2章が もろにいわゆるタスクシステムやタスク間通信の近代的なC++実装だと思うんだが タスクなんてひとっことも言わないし、こうやって作るんだとか誇りもしないのね。たいしたことじゃないから。 これがいまどきのありふれた感覚じゃねーの? だいたい根本的に、「モノ」を管理するために低レベルなOSのアナロジーを使うこと自体が間違ってると思う。 そういうの実装を歪めると思わん? 「ゲームオブジェクト」「エンティティ」「アクター」なんでもいいけど、「タスク」だけはない。 具象的なネーミングとしても抽象的なネーミングとしても。 非ゲームプログラマがTaskという名前のクラスを見て、何なのかすぐ理解できるのかってことですよ。 お前らがやりたいのは、OSの稚拙な真似事じゃなくて、「モノ」を動かすことでしょ? あーでもロスプラみたいにマルチコアに振り分けるならOS的要素強いかもね。わかんね。 結局、典型的な「自転車置場の議論」(0xcc.net/blog/archives/000135.html)なんだよなこれ。 松浦本読んだ程度のドシロウトでも参加できるという。 そういうのを避けるためにも俺はタスクシステムという言葉は使わない。 使ってるやつ見かけたら陰からこっそり指さして笑う。
- 108 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:21:47 ID:3HETWV4t]
- 行数でインパクトがないからってパーセント換算するのはヤメようぜ。
- 109 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:25:03 ID:3HETWV4t]
- タスクというとITRON思い出すから嫌なんだよな。
ITRONのタスクはすげーよ。なのに、タスクシステムのタスクは全然すごくねーよ。 このギャップにイラッとするのはある。
- 110 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:25:40 ID:4jF5VqD/]
- >>105
それは本質をまったくみてないなぁ 1行ごとに中身のない改行を入れて「;」を打つだけでも行数だけは増えるじゃない しかも今回のプログラムだって工夫すれば改行崩れの処理省きでcontinue文は消せてしまうので それをソースコードの行数の増加と考えるのは上げ足取りをしてるようにしか見えない むしろ、マクロでfor文を見えなくした>>510のがわかりにくくて気持ち悪い このマクロっぽいのの意味を初見でみた人が知るには付属のタスクシステムテンプレートを 全部読んで理解するしかないでしょ? これは嫌だなぁ 仮にマニュアルもなにもなかったとしたらかなり読める人限定されそう
- 111 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:26:24 ID:07PQbtcV]
- >>108
このまま規模が大きくなっても、このパーセンテージは揺らがない。 タスクシステムを使わないほうのプログラムでは、どうしても27%ほどだけソースが大きくなる。 だから行数なんかには意味がない。このパーセンテージのほうがはるかに重要だ。 お前は、どうしてそれをごまかそうとするのか俺にはわからない。
- 112 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:31:02 ID:07PQbtcV]
- >>110
> それは本質をまったくみてないなぁ そんなことはない。大雑把にはソースの分量で判定できる。 どちらのプログラムも平均的なプログラマが書いたと仮定して、 タスクシステムを使わないほうは27%もソース分量が増えたのには違いない。 > むしろ、マクロでfor文を見えなくした>>510のがわかりにくくて気持ち悪い あの程度のソースがわかりにくいとは思わないが、マニュアルがないと 正しく使えない人がいるというのには同意。 ただ、本人が開発するなら話は別だろう。
- 113 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:33:03 ID:4jF5VqD/]
- >>111
酷いな ループのカッコとnull判定のことでしかないのに ここまでくると病気としかいいようがない
- 114 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:35:43 ID:4jF5VqD/]
- まあ、でも差分がループのカッコとnull判定だけなんだから
それがタスクシステムの本来の役目ということがはっきりしたともいえるね 正直、差分がそこしか見えなかったんだからそれでいいんだよな? タスクシステム=ループのカッコとnull判定をはじけます でおk?
- 115 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:38:17 ID:07PQbtcV]
- >>113
あんたはプログラミング経験が浅くてわかってないんだろうが、ループも、二重ループにするとき、 i,jの添え字を間違えたり、null判定を忘れたり、continueを書き忘れたりするのが人間ってものなの。 そういう定型化している部分を共通部分として書き出して、どこか別のところに追いやったほうが バグは減るわけ。それは別にタスクシステムでなくてもいいのだが。 forがforeachになっただけでずいぶんバグが減る。 foreachの終了のときのハンドラを定義する構文があればさらに安全性は高まる。 そうやって抽象化と共通部分の括りだしを繰り返して書いていくのがプログラムだろう。
- 116 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:40:14 ID:3HETWV4t]
- >>111
>このまま規模が大きくなっても、このパーセンテージは揺らがない。 どこがそんなにラクになるのかなと見直したが、2重のforループがTASK2と書けるんだね。 ここでだいぶ文字数稼いでるみたいだ。 んで、それがそんなにうれしいことなのかと言われるとNOな訳で。
- 117 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:40:41 ID:4jF5VqD/]
- >>115
だから タスクシステム=ループのカッコとnull判定をなくした最新鋭のシステムです でいいんだろ?
- 118 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:41:07 ID:07PQbtcV]
- >>114
> 正直、差分がそこしか見えなかったんだからそれでいいんだよな? 全然違うね。 510のように抽象化することで、自動並列化のようなことが可能になってくる。 まあ、510のソースを自動並列化するのは正直無理だが、もう少し抽象化して、 各タスクの役割を明確に記述できれば自動並列化できる。
- 119 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:41:26 ID:P36r7rTD]
- >>107
「ウォークマン」みたいなものじゃない? 最初に有名になって、それ以降類似したものの総称として 便利だから名前だけ使ってるって。 >非ゲームプログラマがTaskという名前のクラスを見て、何なのかすぐ理解できるのかってことですよ。 タスクシステムを使うのはゲームプログラマでしょ。普通は。 いちいち現場で「これはオブジェクトを管理するシステムで更新と描画で登録関数が呼ばれて…」 とか説明するより「タスクシステム的なもの」の一言でゲームプログラマならだいたいって通じるし。 ま、デザインパターンみたいにちゃんと定義と命名されればいいんだろうけど ゲーム業界固有の物だしねぇ
- 120 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:41:35 ID:07PQbtcV]
- >>116-117
>>118
- 121 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:45:39 ID:4jF5VqD/]
- >>118
それは>>510からはいえないな 実際、>>510と>>641の間で自動化云々って話はないわけだし 自動化を証明したければ比較のソースを書いてからだな それまではいっちゃいけねぇだろ 俺も否定しないし 少なくとも>>510と>>641の間では自動化は見えなかった 今回はこれが結論
- 122 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:52:23 ID:3HETWV4t]
- まあ、2重のforループで文字数稼いでいるということは、
forループの中身が増えれば増えるほどその稼ぎは薄まる訳だ。 規模が巨大になればなるほどパーセント減るようにしか見えないぞ。 その辺どうなのよ。
- 123 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:55:30 ID:07PQbtcV]
- >>121
510と641を並列化するソースを書き比べればすぐにわかるよ。 そんな本格的なものでなくていいから。 2重ループでi×jのループ回してるところ、あれをi×j / N のループに 分けて実行して、すべてのスレッドの終了をセマフォで待つだけでいいよ。
- 124 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 16:56:43 ID:07PQbtcV]
- >>122
> forループの中身が増えれば増えるほどその稼ぎは薄まる訳だ。 > 規模が巨大になればなるほどパーセント減るようにしか見えないぞ。 それはもちろん正しい。そのへんはゲームの性質によるだろう。
- 125 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 17:14:52 ID:3HETWV4t]
- >>124
>>111
- 126 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 17:27:14 ID:iOCBxjYv]
- タスクシステムとやらのメリット
コードが一割減 タスクシステムのデメリット 可読性が低くなる この調子でお願いします メリットわかってるんだったらごまかさずに書けよ そんな出し惜しみばかりするから無駄に荒れる
- 127 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 17:35:18 ID:07PQbtcV]
- >>126
コード削減、一割減はちょっと違うと思うな。 今回の例ではタスクシステムを使わないと27%増。 俺の感覚では、だいたいこの数字はどんなゲームでもそんなに変わらなくて 平均すれば20%前後だと思うな。これが10%程度ってことはないな。 並列化とかもっと大がかりな仕組みがタスクシステム側に用意されていれば この差はもっと広がるしな。まあ、それをタスクシステムと呼んでいいのかは知らんが。
- 128 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 17:46:01 ID:iOCBxjYv]
- じゃあ二割減でもいいや
開発速度向上はない、可読性が低いものほど開発に時間がかかるから タスクシステムとやらのデメリットとして 開発に時間がかかるというのも追加できる この調子ならメリットデメリットを列挙できそうだな 選択肢になりうるかどうかはそれを見れば判断できるだろう 化けの皮を一枚ずつはいでいくのは楽しいの
- 129 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 17:52:15 ID:07PQbtcV]
- >>128
> 開発速度向上はない、可読性が低いものほど開発に時間がかかるから ソース全部理解しなくても、510のタスクシステムは使えるだろ。 TASK2(クラス名A,クラス名B) { クラス名A1.XXX = YYY; クラス名B2.ZZZ = WWW; } こう使うだけじゃん。説明に1分も要さないと思うが?
- 130 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 17:52:47 ID:Kwr5xaMF]
- >128
> 開発速度向上はない、可読性が低いものほど開発に時間がかかるから > タスクシステムとやらのデメリットとして まずタスクシステムのどこが可読性低いのかを示してもらわないと。 FSMになってるところ? 関数ポインタの部分? ごった煮リスト?
- 131 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 18:15:26 ID:D/oVP314]
- >>130
自分のタスク内で完結しない処理に関しては、全部グローバル変数経由 ゲーム中のあるシーンを想定した場合、そこで何のタスクがどういう順番で走るかが、 コードの一箇所を見てもわからない。
- 132 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 18:15:57 ID:4jF5VqD/]
- >>129
でも読みにくいなぁ、おいw それが何を表してるのかさっぱりわからないぜw ループ隠しただけなのになw
- 133 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 18:24:15 ID:hYClRP74]
- >>131
>自分のタスク内で完結しない処理に関しては、全部グローバル変数経由 そんな処理するのはタスクじゃないだろ。
- 134 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 18:26:52 ID:D/oVP314]
- >>118
> もう少し抽象化して、各タスクの役割を明確に記述できれば自動並列化できる。 そんな簡単じゃないよ。 並列処理は計算機科学の分野では長らく研究されていて、いろいろ知見が積み重なってるんだが、 少なくとも 510 からは、自動並列化につながる筋道がまったく見えない。 夢が大きいのはいいんだが、まったく現実性が無いのもどうかと思うぞ。
- 135 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 18:32:19 ID:a9F+sDW/]
- タスク擁護派から言わせてもらうが、>>129 は読みづらいよ
初めて読む STL や Loki や boost と同じくらいにね。俺なら使わん 結局、あるライブラリを使うメリットは普及してるかどうかだ strcpy や strncpy を使うメリットはなんだ? みんなあの仕様はおかしいと感じているのに? タスクもそれと同じこと。 そして、普及さえしていなければメリットはないと考えて必死で叩くお前らは正しい
- 136 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 18:40:14 ID:07PQbtcV]
- >>134
> 並列処理は計算機科学の分野では長らく研究されていて、いろいろ知見が積み重なってるんだが、 > 少なくとも 510 からは、自動並列化につながる筋道がまったく見えない。 「自動」の意味を誤解しているようだが、 自動車は、自動的に目的地まで運んでくれる乗り物ではないのと同様、 人間が何もしなくてもいいという意味ではない。 俺が「自動」並列化と言っているのは>>123の意味。 例えば、TASK2をP_TASKと人間が書き換えればあとは自動的に並列化してくれるように改造するのは容易。 なんでこれが出来ないと思うのか、俺はお前らの技術力を疑いたくなる。本当にお前らプログラマなのか?
- 137 名前:名前は開発中のものです。 mailto:sage [2009/02/21(土) 19:05:26 ID:D/oVP314]
- >>136
> なんでこれが出来ないと思うのか その程度で済むなら OpenMP がやってる
|

|