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

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

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2008/11/09(日) 11:51:40ID:+pjnJyQQ
タスクシステムについての議論、相談、質問、雑談などのスレです

part2 http://pc11.2ch.net/test/read.cgi/gamedev/1196711513/
part1 http://pc11.2ch.net/test/read.cgi/gamedev/1173708588/
0244名前は開発中のものです。2008/12/12(金) 08:56:23ID:6q9RSuqq
>>243
オブジェクト指向のキモは、クラスの洗い出しと、クラス間の関連を見極めること。
何でもかんでもグローバル変数に書いて共有するのはダメだろ。
0245名前は開発中のものです。2008/12/12(金) 13:54:57ID:6fpFqUQy
タスクシステムとグローバル変数には何の関連性もないし
タスクシステムがオブジェクト指向であるというのもそのとおり。

たんなる技術手法の1つでこれといった決まったルールが決まってない名称であるから
揚げ足取りがしやすいだけ。

デザパタより昔からあった手法だし、C++よりは古い。
0246名前は開発中のものです。2008/12/12(金) 22:29:53ID:vHZmpFnT
クラスもなければプロトタイプでもない、CLOS のような多態のメカニズムもない。
どこがどうオブジェクト指向なんですかね。
0247名前は開発中のものです。2008/12/12(金) 22:35:04ID:EK0D+T+v
>>243
1口にオブジェクト指向といってもメッセージングとオブジェクト主体の動的なものと、
構造体主体の静的なものとかがある。前者はスクリプト言語とか。C/C++は主に後者。

参考: http://d.hatena.ne.jp/sumim/20040525/p1
0248名前は開発中のものです。2008/12/13(土) 00:25:41ID:m0qW0f8x
このスレの異常に不憫な嫌タスク厨を見てて
いつも思うことがあるんだが・・・




「神は自らタスクるものをタスク」
0249名前は開発中のものです。2008/12/13(土) 00:26:53ID:de3lQl9T
>>242
WM_LBUTTONDOWNとかWM_MOVINGとかWM_DESTROYみたいなイベントも扱う。
それら入出力関係・アプリ生存期間の制御関係のものと、ゲーム処理をいっしょくたに
扱える標準的インタフェースなんて作るなというのが主旨。
もし作ろうとすると
 1.イベントハンドラで統一
 2.やっぱ使い勝手悪いのでゲーム処理はenter_frame(), display(), move()の3つだけに集約
  →タスクシステムいっちょあがり
となる。

あとenterframe()とdisplay()で分けたけど、よく考えたらenterframe()1個で足りるかも。
ゲーム処理は1フレームに1回、1つの関数呼ぶだけで足りるし。
というかenter_frame()さえもいらないかも。
どこかで誰かが全入出力デバイスの面倒見る必要は結局あるもんね。
俺はなんか分けてたからああ書いたけど。その辺はごめん。

重要なのは「入出力デバイス処理とゲーム処理は別物」ということ。
そして別物なので、「ゲーム処理にまでイベントハンドラ適用しようとすんな」ということ。
タスクシステム=イベントハンドラ崩れorイベントハンドラの俺ゲーム最適化後というイメージを持ってる。
OSも昔とか組み込み系の貧弱な環境とかではユーザランドとOSの切り分け曖昧だったりOS無しで自前管理だったりするけど、
規模大きくなるとそれじゃ成立しなくなるのに似てるかも。

メインループとかの構造はそう、大体そんな感じでOKじゃね? あんまそこは興味ない。
main関数からじゃなくいきなりイベントハンドラから始まる環境とかあるし、正直動けばそれでいい。
一応俺はそのd3ddev->Present()をdevice.wait_frame()に置き換えてその中でDispatchMessage()ぐるぐる回しつつ1フレーム待ってるやり方。
0250名前は開発中のものです。2008/12/13(土) 01:06:41ID:1u8g2R1V
>>249
それってホーミングミサイルがターゲッティングした相手とか
キャラと移動床、移動床と固定壁の相互判定の処理とかって
どこ飛んでいっちゃってんの?

なんかワンフレのオブジェクトの独立した動作しか見えてなくね?

上記のことをそのシステム使って解決しようとすると
もう関数の引数でやりとりできないからグローバル変数使って回避するしかないっしょ?
0251名前は開発中のものです。2008/12/13(土) 01:16:46ID:gfZ50szk
>WM_LBUTTONDOWNとかWM_MOVINGとかWM_DESTROYみたいなイベントも扱う。
>それら入出力関係・アプリ生存期間の制御関係のものと、ゲーム処理をいっしょくたに
>扱える標準的インタフェースなんて作るなというのが主旨

HSPerも基本的にそう思うよー
http://pc11.2ch.net/test/read.cgi/gamedev/1227748699/181n

でも、これって>>2>>2卒業とは関係無い話だと思うよ
GUIに特化したOSのイベントシステムというものは
OS提供のGUI関連機能を積極的に使わない限りは
「どんなアプリにとっても」どうでもいい存在なんだし

そういう場合、どんなアプリでも
最低限のイベントに対応する処理を脇のほうで適当にこなしてるだけ

0252名前は開発中のものです。2008/12/13(土) 01:38:03ID:1u8g2R1V
>>250はレス先間違えたw
0253名前は開発中のものです。2008/12/13(土) 02:16:57ID:gfZ50szk
>タスクシステム=イベントハンドラ崩れorイベントハンドラの俺ゲーム最適化後というイメージを持ってる。

>>2にはイベントという概念はないしイベントディスパッチャもないよ
イベント駆動システムの体を成してないよ
>>2はジョブの連結リストを走査して全ての要素(ジョブ)をディスパッチしてる
つまり単純な順次処理しかしてくれないよ
イベントがあるとすれば、それはユーザー自身がジョブの中で記述しなければならないよ
>>2は何にもしてくれないよ
0254名前は開発中のものです。2008/12/13(土) 09:18:22ID:HlSyOfLl
イベントというかメッセージだったかな
HSPerは頭よくないから使い分けがよくわかんないの

ケータイだからID違うのはしかたないね
0255名前は開発中のものです。2008/12/13(土) 15:00:33ID:qrT1CCoR
>>242
不憫なやつだな、お前
なんかわかった気になっちゃってんだろうけど

21世紀の高スペックハードが前提ならModernC++Designあたりの設計の方が当然良いっつの
まーおまえは配列が最高だと思ってるかも知れないから、これも分からないかも知れないが・・・w
ジョブコンはハードべったりなコーディングのための実装(設計ではない)であって、
組み込みに近いハードで便利なんだよ
これを組み上げた故・深谷正一氏はナムコで神様って呼ばれてただろ

嫌タスク厨は、世の中に唯一の正しい答えがあるわけじゃないことを学んだ方がいいよ
様々な現場があり、また過去にあったことを理解しろ
多分20年後には、C++自体が百害あって一利なしと言われているだろうが、
その時でも俺はC++を擁護するね
仕事ではC#かECMAScriptあたりを使っていたとしてもね
だから俺は今、タスクを擁護する
かつて世界をリードした日本のゲーム最盛期の技術として、価値あるものだ

あ、でもタスクしか使えない老害はそろそろ消えてくださいw
もうバブルは終わったんだよ。過去にしがみつくなwww
0256名前は開発中のものです。2008/12/13(土) 15:49:54ID:nTnjQTuE
モナドを使ったステートレスなタスクを考えてください
0257名前は開発中のものです。2008/12/13(土) 16:20:05ID:Q1lPMEoI
CPSでおk
0258名前は開発中のものです。2008/12/13(土) 21:30:40ID:rCULSb4p
久しぶりにのぞいたら例の本でふきあがってるのな
まだ続いてる?
いわゆるタスクシステム的な抽象度の高いオブジェクトがシステム最上層で一本だけのリストに
なってる系の設計の問題だと思う点はタスクの描画順序を変えようとしてプライオリティを変えると
その抽象度の高いクラスを継承するクラス全部リコンパイルするハメになるとこ
そして最近は複数バッファを使う技術を実装する途上で描画順序を変えなくてはならなくなることが多い
同一のリソースに複数回描画を要請することもある
0259名前は開発中のものです。2008/12/13(土) 23:19:03ID:ngcrwCO9
本当のタスクシステムはリストではなくリングバッファ
リスト使うやつはまがい物
0260名前は開発中のものです。2008/12/14(日) 02:07:26ID:JyTBiW8D
>>255
で、なんで急に「ジョブコン」の話を始めてるのかな?
俺は>>2の話をしたがお前はそれを「ジョブコン」の話だと思ってるのかな?
もしかしてお前、>>2=「ジョブコン」だとでもいいたいのかな?まさかね

故人の名を引っ張り出して嘘を吐くなんてバチ当たりなこと、するわけないよね?

人として
0261名前は開発中のものです。2008/12/14(日) 04:35:12ID:BTfnwu0u
723 名前: 遠藤雅伸 ★ 投稿日: 02/01/04 11:43 ID:???
>>720-722
 >>712の言っている「タスク」というのは、80年代初頭に深谷正一
氏が完成させた、通称「ジョブコントローラー」とか「オブジェクトコン
トローラー」とか言われているものだと思います。
 CRTのブランキングに同期して行われるインタラプト処理をトリガー
にして、60分の1秒単位で順次処理をマルチに行う構造ですね。

 今では誰もが使っているというか、既に時代遅れなのですが、当
時はプログラマに読者層がある雑誌などで、プログラムを解析して
紹介したりしてました。
0262名前は開発中のものです。2008/12/14(日) 06:36:31ID:lnd0cLcc
描画順序を内包するから問題になるのであってそれは外にだせばいいだけだな
それでも複雑・特殊化した描画のシーケンスに対する柔軟性のなさは相変わらずだけど
0263名前は開発中のものです。2008/12/14(日) 08:13:40ID:zCveThyG
業務用アプリでさえタスクシステムなのにお前らいつまでこんなネタを繰り広げてるんだよ
0264名前は開発中のものです。2008/12/14(日) 10:46:26ID:hPd7IYfR
×タスクシステム
○イベント駆動
0265名前は開発中のものです。2008/12/14(日) 13:38:40ID:zax2tb8N
タスクシステム = リアルタイム・ゲームにおける並列動作処理の基本アイデア

基本アイデアを否定するって、初心者掲示板においてどんだけ罰あたりなんだよ。
0266名前は開発中のものです。2008/12/14(日) 13:55:05ID:J0IK5eg8
>>265
ゲームの基本アイデアは、

1. 定期的
2. 外部から駆動される

オブジェクトの集合でシステムを構成すること、だろう。固定長ブロックをポインタで
つないだ所謂タスクシステムは、その(特殊なケースに最適化された)例の一つ。
0267名前は開発中のものです。2008/12/14(日) 14:13:11ID:zax2tb8N
「定期的」オブジェクト:
 フレームワーク(タスクの生成/消滅/アクティブ化/非アクティブ化)

「外部から駆動される」オブジェクト:
 上記のフレームワークに乗っかった個々のタスク

・・・ということ?

結局、>>266の実体はタスクシステムなんでは?
0268名前は開発中のものです。2008/12/14(日) 20:09:25ID:kt8hWnnq
デザパタより昔からあった手法だし、C++よりは古い。
0269名前は開発中のものです。2008/12/14(日) 23:37:27ID:hPd7IYfR
イベント駆動とメッセージングOOPの組合せ程度じゃ
単なるよくあるGUIプログラミングの定石じゃない
0270名前は開発中のものです。2008/12/15(月) 07:22:29ID:OmEWjIQA
>>267
for (;;) {
 player.exec(*this);
 std::for_each(enemies.begin(), enemies.end(), boost::bind(&Enemy::exec, ::_1, boost::ref(*this)));
 WaitVSync();
}

これだって VSync ごとに 1 回ずつ、各オブジェクトを呼び出してるわけで、
別に固定長ブロックをポインタでつないだ「タスクシステム」とやらに限った
話じゃない。
0271名前は開発中のものです。2008/12/15(月) 22:10:39ID:Y+es7eZl
ポエマーだけど、人違いされたままなのは気に入らないので横合いからちょっかい出してみるのねー

>>255
ジョブ(プログラムとデータを関連付けたもの。要するにオブジェクト)の連結リストを巡回して実行するだけで
これこそが神の技だとかソロモンの指輪(どう見てもガチャガチャで入手した飴菓子のジュエルリングだが)だとかいって
ホルホルしてるウンコカルト教の信者のつまらないプライドをベキベキにへし折るためのちょっとしたアンチテーゼとして
「STGで弾とかパーティクルを大量に出すなら>>2より配列で素直に書いたほうがちょっぱやだけど何でそうしないの?」
みたいなこと書いたことあるけど、カルト教団からの脱会を決意をした子(>>239-240,>>249)に向かって阿呆とか死ねとか
言ったりはしないよ。目出度いことなんだからお赤飯を炊いてあげたいくらいだねー

ところで>>2には深谷氏の流派に見られた特徴的な記述が微塵も感じられないけど、君はどうして混ぜこぜに語るの?
異質な点をあげればキリないけど、端的な例をあげれば>>2にはコンテキストの保存や切り替え機構がないよね。
>>2書いた人はどいつもこいつもその必要性を微塵も感じてないんじゃないかな。ゆえに深谷氏の師事を受けた
人間ではないよ。まぁ優劣の話ではないのね。明らかに異質。完全に別物ってことなのね

>>257
それ、知らない人が読んでも意味がよく分からないと思うのねー
引用先で遠藤サンがおっしゃってる「順次処理」というのは、ジョブの処理内容のことだと思うのねー
別の言い方をすればジョブの内容はシーケンス制御ですよ、というお話だと思うのねー

これをマルチで行なう、というのは順次処理を行なうジョブ(複数個)、固定時間刻みで逐次処理することだと思うのねー
この逐次処理の処理単位は世間一般にはジョブステップとかタスクとか読ばれるのかもしれないのねー
luaのコルーチンと同じようにユーザーが挟み込んだ補助情報(yield文相当)で半自動的にジョブは分割されて
実行されるのねー。アセンブラでジョブを記述するにはとても使いやすかったのねー
0272名前は開発中のものです。2008/12/15(月) 22:12:34ID:Y+es7eZl
×師事を受けた
○教えを授かった
0273名前は開発中のものです。2008/12/15(月) 22:14:32ID:Y+es7eZl
△ジョブ(複数個)、固定時間刻みで
○ジョブ(複数個)を固定時間刻みで
0274名前は開発中のものです。2008/12/15(月) 22:22:24ID:Y+es7eZl
一方で、>>238とか>>253の順次処理というのは連結リストに繋がれた順番の話だと思うのねー
繋がれた順番に実行するということ。つまり順次処理。バッチ処理だね

>>2はジョブをバッチ処理する機能しか積んでないというのは本当だね。それを>>2では無理やり逐次処理に使う。
逐次処理するための足りない部分は誰が面倒みるの?ユーザーが面倒見るんだよ。全部ね
0275名前は開発中のものです。2008/12/15(月) 23:09:23ID:Y+es7eZl
×>>257
>>261

酔っ払ってるとダメなのねー

これで>>261の引用元の遠藤サンが何で「タスク」という組み方を聞かれて「ジョブコン」のことだと推測したのか
が見えてくると思うのねー

可能性@ : 「タスク」という組み方が>>2程度のものだとは露ほども考えてなかった。想定外にお粗末な>>2
可能性A : メインフレームの基礎知識がある人間は「タスク」と言われたら「ジョブステップ」かなと思う
         言うまでもなく深谷氏を師事するものにとってジョブステップといえばアレである

ま、いずれにせよ。あの流派の人間に「ジョブコンとは>>2」なんて言い放ったら青筋立てて苦笑いすると思うのねー
0276名前は開発中のものです。2008/12/15(月) 23:57:34ID:OmEWjIQA
>>271
> luaのコルーチンと同じようにユーザーが挟み込んだ補助情報(yield文相当)で半自動的にジョブは分割されて
> 実行されるのねー。アセンブラでジョブを記述するにはとても使いやすかったのねー
今でもコルーチンは便利だけど、その部分は C++ で書かずにスクリプト言語+スタックレスの VM 使うよな。
昔はスクリプト言語なんて贅沢は言ってられなかったわけだが。
0277名前は開発中のものです。2008/12/16(火) 07:45:28ID:Xcw/e/us
スクリプトも無節操に使うとグローバル変数、関数とかわんない
0278名前は開発中のものです。2008/12/16(火) 10:06:25ID:4E6YhtY0
タスクシステム>働いたら負けかなと思ってる
0279名前は開発中のものです。2008/12/16(火) 11:17:10ID:j7LoR4yM
というか、ジョブコン(コルーチン)話はこのスレのスコープに入るわけ?
0280名前は開発中のものです。2008/12/16(火) 20:51:33ID:JXrz6RNp
>>270
それってタスクシステムのアイデアを、そのままライブラリで厚化粧しただけじゃん
0281名前は開発中のものです。2008/12/16(火) 22:19:38ID:Trm7DCXt
> ジョブコン(コルーチン)
は?
0282名前は開発中のものです。2008/12/16(火) 23:25:50ID:DQ0ASKX3
>>277
一般的には、スクリプトは C++ の単一のインスタンスに張り付ける。

たとえば Enemy クラスのメンバ変数としてスクリプトを張り付けて、
スクリプトからは Enemy クラスのメンバ関数の一部だけ呼べるように
する。

何でもかんでもスクリプトから呼べると、そりゃ破綻するわな。
0283名前は開発中のものです。2008/12/17(水) 01:53:45ID:oN66mV3A
スクリプトのほうが利点があるなら最初から全部スクリプトで作ればいいじゃない?
0284名前は開発中のものです。2008/12/17(水) 02:06:46ID:FLaStTdI
>>283
適材適所。大半を全部スクリプトで作ったほうが良いのは、アドベンチャー
ゲームぐらいじゃないかなぁ。

0285名前は開発中のものです。2008/12/17(水) 02:40:55ID:ahEDXJzw
>>281
ジョブコン=コルーチンって理解じゃ違うのか?

俺は>>279じゃないが
こういう結論になりそうな資料見たことある
内部の人間じゃないから分からんが・・・
なんか謎に包まれてんなあw
0286名前は開発中のものです。2008/12/17(水) 10:18:44ID:52EN4/sP
ジョブコンってコンテキストスイッチないじゃん
ただのステートマシン
0287名前は開発中のものです。2008/12/17(水) 11:41:46ID:bRfj9ttj
>>286
http://game.2ch.net/gamedev/kako/1006/10061/1006184421.html の 810 を
100 回読んでこい。
0288名前は開発中のものです。2008/12/18(木) 18:05:58ID:iEg8pKUf
あった
http://jp.youtube.com/watch?v=3JWl1IikUBE&feature=related
0289名前は開発中のものです。2008/12/20(土) 00:01:42ID:oW76AwO4
>>287 読んだ。
>スタックにプッシュしてあるリターンアドレスも含めた
>CPUコンテクストを復帰させて 各ジョブを呼び出す。
>ただし、リターンアドレスをポップする 形で呼び出すので、
> RTS で呼び出す訳ですが。

うは、なつかしいな。確かZ80で、RTS使うかわりに戻りアドレスをスタックに積んで
pop すると RTSよりマシンサイクルが少し速い、てな話だったような。

>>275
こういうの見ると、メインフレーム屋さんではなくて制御屋さんの発想な気がするけど。
マイコンのアセンブラだと、コンテキスト、というよりCPUのレジスタを保存する
とか普通の世界だったから、それを現代風にアレンジした「タスクシステム」で
考慮してないとしても卑下する必要はないと思うんだけどなあ。

かじっただけの俺がいうのもなんだが、あちこちのサイトで紹介されているタスク
システムの問題点は中途半端に汎用的で抽象化されているところじゃないかな。
ひとつのシステムで多用途に適用できるというのはPGの夢かもしれないけど、
ルーティンを嫌うアミューズメント用途にはちょっと無理があるような気がする。
0290名前は開発中のものです。2008/12/20(土) 15:39:24ID:4NXZi7BF
やね本でこの手の技法を知った。
2年程実際に使ってて、今のところ大きな問題が出てないからまだ使ってる。
とはいえいろいろ小さな問題点や、
ハードのスペック故に浮き上がってきた問題も出てきた。
ただ、今は新しいやり方を覚えてソースを書き換える暇がないので、
じわじわと学びながら弄りながら変えていってるのが現状。
まあ不毛な喧嘩はともかく、
タスクシステムの問題点についてビシバシ突っ込んでくれるのは非常にありがたいので、
これからも話がズレない程度に熱く語ってくれ。
0291名前は開発中のものです。2008/12/20(土) 16:29:07ID:dWaY9Ulk
貴様に命令されるいわれはない
0292名前は開発中のものです。2008/12/20(土) 23:01:46ID:oW76AwO4
>>289
ありゃ、間違ってるな。てか、興味ない人はスルー願います。
>ただし、リターンアドレスをポップする
>形で呼び出すので、 RTS で呼び出す訳ですが。

z80でサブルーチンを CALL nn すると、現在の pc の次のアドレスを
スタックにプッシュして nn に飛ぶ。その先で rts すると、スタック
からアドレスを pc に読み込んで呼び出し元のアドレスの次の命令から
続くのが通常。上のはサブルーチン(タスク)を呼び出すのにその
逆をやってる。なんかの雑誌でみたことがあるな。
 メリットは覚えてないやw
 push でレジスタを退避させるのと一緒に使えて、速くて短い、とかかな。
0293名前は開発中のものです。2008/12/21(日) 01:37:52ID:lXu3AnzO
>>292>>287を読んだだけで内容を理解できてないと思うから
ぐだぐだ書く前にちゃんと理解する努力をしろ。
0294名前は開発中のものです。2008/12/21(日) 20:27:14ID:9M4acoh9
>>293
まあ、そう突っかかんなよw
ではよく理解している293に教えて欲しいんだけど、

(1)「タスクシステム」いうだけで、なぜ271は
>ウンコカルト教の信者のつまらないプライドをベキベキにへし折るための
>ちょっとしたアンチテーゼ
みたいに口汚く否定しなければならないのか?

(2)「タスクシステム」がだめならジョブコンでどうかというと
>あの流派の人間に「ジョブコンとは>>2」なんて言い放ったら青筋立てて苦笑いする
みたいに必死に否定するのはなぜか?

(3) 青筋を立てているのは271ではないのか?

以上3点、ご教授いただければ幸いですw

なんつか、271はそれなりに知見のある人間にも見えるんだけどなぜ?って感じ。
0295名前は開発中のものです。2008/12/21(日) 20:30:02ID:cG9gZch1
定義ごっこウゼーからヤメロよ
名前なんて関係ねーよ

ポインタ保持
グローバル変数関数使いまくり

のソースは問答無用で糞コードなんだよ
0296名前は開発中のものです。2008/12/21(日) 20:38:47ID:9M4acoh9
>>290にはたぶん向いているんだろう。俺にはちょっと使いづらいかなと思った。
あんまり頭よくないんで、全体を把握しにくいコードでポインタを使いまわす
のはおっかないと思ったよ。

いずれにせよ、コストと手間を考えて手段を選ぶだけなんだから、手法のメリット
デメリットを論じるならともかく、使うだけで罵ったり赤飯炊いたりしてくれるのは
まあ、本筋と違うと思うんだけどなあ。
0297名前は開発中のものです。2008/12/21(日) 21:37:18ID:9M4acoh9
>>295
new 厳禁, malloc問題外かあ、そりゃ難儀だな。
295 はよほどでかいスタック使ってるんだろうなあ。すばらしい。

0298名前は開発中のものです。2008/12/21(日) 23:03:28ID:cG9gZch1
>>297
ああ、やっぱり馬鹿なんだw
馬鹿だから横文字連発して誰でもできる名称の定義にこだわってんのバレバレ
あー恥ずかしいw
0299名前は開発中のものです。2008/12/22(月) 10:25:16ID:1VWYpijd
>>294
>>271 は撲殺天使気取りのカルシウム足りてない人だから。以上

というかタスクシステムってちゃんと使えばTCBにキャラクタ固有のデータを
おくはずで、グローバル変数は回避するのが正しい使い方だと思うのだけどな。
0300名前は開発中のものです。2008/12/22(月) 18:52:48ID:f8SxWgbT
ID:oW76AwO4
ID:9M4acoh9
ID:1VWYpijd
>みたいに口汚く否定しなければならないのか?

↑(゚∀。)↓

>>271 は撲殺天使気取りのカルシウム足りてない人だから




ルサンチマン号…
0301名前は開発中のものです。2008/12/22(月) 23:23:50ID:sVVTu1LL
>>299
自キャラクタのデータを TCB に置くのは当然として、タスク間の相互作用を
どう記述するかが問題。ヒット判定とかホーミング弾とか。

ここで、他タスクのポインタを持つと寿命管理でミスして dangling pointer 問題が
発生しがちだし、マネージャクラスみたいなものを作ろうとすると、グローバル変数
多用することになる気がするんだが、どう解決してるんだろ?
03022932008/12/22(月) 23:56:55ID:/r5SxkM/
>>294
俺は271じゃないから271の考えてることはわからんよ。

でも>>2は、
>>287のリンク先のジョブコンでの重要な要素(PCとSPが保存される)が消えてる
・CodeZineの記事はメモリ管理がキモすぎる
・TCBとスタックポインタというRTOSで使われる用語を全く別の一般的じゃない意味で使ってる
ので、ああいうのが代表的な解説になってるんじゃヤバいと思うよ。

俺はゲーム自体の出来がよければシステムなんてなんでもいいんだけどさ。
0303名前は開発中のものです。2008/12/22(月) 23:59:47ID:2ecmM+o8
>>289
やぁどうも

>マイコンのアセンブラだと、コンテキスト、というよりCPUのレジスタを保存する
>とか普通の世界だったから

マイコンでcontinuationすることが普通だったのか
80年代初頭においてそうした普通があったというのは寡聞にして知らんので
是非ともご教示いただきたいです。よろしくです

>それを現代風にアレンジした「タスクシステム」で考慮してないとしても

「アレ」を現代風にアレンジすると>>2になるのか。見聞の狭い俺にとっては初耳だ。
現代風にアレンジするとcontinuationは必要なくなるという話も新鮮な響きだ。
「アレ」に必要な処理量と得られる利得(ユーザビリティ、etc)を鑑みたうえで
continuationを積極的に「省く」メリットを探してみたのだが不肖の俺には
荷が勝ちすぎるようだ。この辺りについても是非ご教示いただきたい
重ね重ねよろしく頼むよ
0304名前は開発中のものです。2008/12/23(火) 12:44:20ID:0dKfKv7t
えーと。

確かに継続で間違いないんだが、マルチタスクなOSの(リアルタイム、
非リアルタイムを問わず)コンテキストの保存と復帰、まとめてディスパッチと
いう概念は、計算機の歴史としては割込みと同じくらい古い。確か
マルチプログラミングと呼んでいてOSより古いはず。
(というか、割込みの前と後で戻る所を次々すげ替えていけば、マルチタスクに
なる、よね)
現代的には、OSのスレッドサポートと、言語側の継続とかコルーチンとか、
という風に分かれちゃってるけど、マイコン時代にはアプリからモニタまで
全部ユーザが面倒を見るのが当然だったから、ジョブコンも別に大げさな
仕掛けにはならなかった、のだと思うわけだな。

> continuationを積極的に「省く」メリットを探してみたのだが不肖の俺には
> 荷が勝ちすぎるようだ。

確かにこっちは無理だw
0305名前は開発中のものです。2008/12/23(火) 12:52:38ID:KMGtlw/w
文章長すぎる奴自重しろ
中身もねぇのにだらだら無駄に長い
ホントにプログラマーか?お前
0306名前は開発中のものです。2008/12/23(火) 12:53:09ID:0dKfKv7t
>>302
> ・TCBとスタックポインタというRTOSで使われる用語を全く別の一般的じゃない意味で使ってる
> ので、ああいうのが代表的な解説になってるんじゃヤバいと思うよ。

TCBは痛いが、スタックポインタについては、メモリブロックのLIFOな管理技法に
使う用語として一般的なものだと思うが?
むしろアーキテクチャ用語のスタックしか思い浮かばないほうが視野が狭い。
0307名前は開発中のものです。2008/12/23(火) 12:54:05ID:0dKfKv7t
>>305
継続を一言で説明できるのかお前は?
0308名前は開発中のものです。2008/12/23(火) 15:09:59ID:SQBujvLn
KEIZOKU?
0309名前は開発中のものです。2008/12/23(火) 15:41:23ID:EIXJgmbC
継続 = continuation
0310名前は開発中のものです。2008/12/23(火) 22:57:43ID:oH6JwYTC
>>304
やぁありがとう。非同期的に呼び出される割り込みハンドラはコンテキストの保存と復帰をするよね。すまん。
ところで割込みの起源の話があったので、Donald.E.KnuthのThe Art of Computer Programmingを
めくってみたところDYSEACというコンピュータが最初だそうだ。ぐぐってみたところ面白いページ発見

History and Overview of Interrupts and Interrupt Systems -- Mark Smotherman
http://www.cs.clemson.edu/~mark/interrupts.html

によると割り込みの始祖はUNIVAC1まで遡る。算術オーバーフローの例外処理。ソフトウェア割込み。
割り込みの一番おいしいところである外部割込み(ハードウェア割込み)はKnuthの言っていたDYSEACで
これは米商務省標準局データ処理システム部門電子計算機研究所が開発したもので、米陸軍の
移動式通信システム用として1954年から運用が始まったそうだ

米陸軍弾道研究所 報告書No.1115 国産電子計算機についての調査(第三回目)
http://ed-thelen.org/comp-hist/BRL61-d.html#DYSEAC
>(3) an interruption property which enables the machine to handle unscheduled ,job assignments
> which originate externally without advance notice and must be executed as soon as possible

DYSEACはマルチプログラミング(例えばI/O処理に計算機を独占させない)を実現していたと思われる。
Mark SmothermanによるとDMAもこいつが最初かもだそうだ。おもしろいね
0311名前は開発中のものです。2008/12/23(火) 23:35:30ID:EIXJgmbC
ふむ。撲殺天使の人か別の人かわからんが、興味深い情報をありがたう。
mobile computer と書いてあるからびっくりしたが (carried in two tractor
trailers at 12 and 8 tons, respectively!) とすぐあとに書いてあった。
TRONチップとか、命令の実行に伴って起きる「例外・Exception」、外部入力
で起こされる「割込み・Interrupt」、OSの呼び出し等に使う「トラップ・Trap」と
使い分けてたりするね。
さて、いいかげんで昔のPC板行けと言われそうなので手短にポインタだけ
示すが、岩波講座情報科学1『情報科学の歩み』(高橋秀俊、1983)のp.48
によれば1959年にパラメトロンコンピュータPC-1に筆者らは割込み機能を
付けているが、「割込みという日本語も,英語の interrupt の訳ではなく,
われわれのグループで使いはじめたことばである.」だそうだ。
『コンピュータへの道』(高橋秀俊、1979)のpp.148〜151にも割込みの話が
出ている。
0312名前は開発中のものです。2008/12/23(火) 23:44:27ID:KMGtlw/w
まだなげぇ、すげーなげぇ
少しは相手の反応をみるとか
ちょっとした気遣いは全くないのか?

誰も聞いてないことをベラベラベラベラよくしゃべるなぁ
0313名前は開発中のものです。2008/12/23(火) 23:50:13ID:8VQIcbtp
スレチだが。面白かったよ俺には。
長いとか、よくしゃべるとか、批判の対象が違うだろ。
自分の興味のないこと=誰も聞いてない としか受け取れないのか?
ただスレ違いなだけ
0314名前は開発中のものです。2008/12/24(水) 00:03:00ID:RyEm5AoF
>>313
おお、じゃあ、適当なレス返してやれよw
0315名前は開発中のものです。2008/12/24(水) 01:12:03ID:jdZgu35M
>>289
悪い、出張してた。
うーん、おれが本来のジョブコンを理解できてないから変なこといってるのかもしれないけど、、
z80にしても6809にしても当時のマイコンのアセンブラ本とかみて、
マイコンでマルチタスクを実装する方法とかざらに載ってたと思うんだけど。
continuationという用語で説明されたかは覚えてない。
比較的あたらしいのはこんなのか?
http://www.ertl.jp/ITRON/Newsletter-J/itronnews19.html
これが雑誌に載ってたのを見た記憶がある。中身がぜんぜん違うならごめん。
0316名前は開発中のものです。2008/12/24(水) 01:20:11ID:jdZgu35M
で、俺が見たのはz80のアセンブラ本で、マルチタスクを実装するのに
win3.1みたいに自分でジョブを明け渡す方法と、割り込みを利用して
スイッチする方法がのってた。どっちにしてもなんらかの形で
レジスタの保存と復帰はあたりまえだよね?
んー、多分おれが的外れなことを言ってるんだろう。もう黙るわ。
0317名前は開発中のものです。2008/12/24(水) 02:57:11ID:jdZgu35M
黙るといっておきながらあれだが、
>>315は1992ってなってるな。80年初頭とは違いすぎるね。
だけど、マイコンでみんなやったことってメインフレームの真似事だったんだけどなあ。遠藤さんのスレの例の肝は、リロケータブルなプログラムの組みにくいz80で、RTSを
利用して実現したことだと感心したんだがな。まあいいや。
0318名前は開発中のものです。2008/12/24(水) 11:05:25ID:pWFbRnFD
continuation(継続)とは、要するにコンテキストのようなものだが、
かなり抽象的な概念で、コンテキストとはプログラムの実行中の
一瞬の状態のことだが、継続とはその先にある計算全部を
ひっくるんだもの。ある種の高水準言語(特にScheme)では
一般概念。OSや機械語のレベルで直接扱うことはまずない
(というか高水準の概念)。
Googleで「継続」を検索すると上位10ページの半分弱は
これの説明なのでざっと見てみるといいかも。

「マイコン マルチタスク」で検索するとインタフェースのバックナンバー
目次がひっかかった。1984年9月号の特集が「Cとマルチタスク・モニタ」
なので、そういう記事だろう。多分。
ttp://www.cqpub.co.jp/interface/contents/198xindex.html
0319名前は開発中のものです。2008/12/24(水) 21:21:45ID:tzcrgEm1
また、長文垂れ流しか
ホント無駄な奴等だな
0320名前は開発中のものです。2008/12/24(水) 23:02:53ID:jdZgu35M
>>318 おお、ありがと。1980年の
>12月号 特集◆リアルタイム制御用マルチ・タスク・モニタの研究

なんかもまんまだな。「非同期〜割り込みハンドラは」とか留保つけてるくらいだから
認めてもらえそうにもないが。いつのまにか
>continuationを積極的に「省く」
ことにされてるし。
このスレで continuation といえばマイクロスレッドとかファイバとかの話になるよね。
で、このスレでもおなじみのやねうらお氏がこんなのも用意してたりするわけだよ。
ttp://ml.tietew.jp/cppll/cppll/article/6196

でもさ、コンテキストスイッチングとかマイクロスレッドってc/c++標準の機能でもないし、実装にはそれなりに手間もかかるし、無いとまったくプログラムできないわけでもない。
そういうものをタスクシステムを紹介している>>2に包含してないからって駄目呼ばわりするのはどうなのよ。

黙るとかいいながらまた長文たれながしてるな。すまんね。>>319
0321名前は開発中のものです。2008/12/24(水) 23:11:27ID:jdZgu35M
おっとあぶない。コンテキストスイッチを setjump()/longjumpで実装することも
できるみたいだし、GNU pthを使ったコルーチンの例もあるから、c標準
で実現できないと書くとまた突っ込まれるな。もうぐだぐだだ。
0322名前は開発中のものです。2008/12/24(水) 23:30:35ID:RyEm5AoF
馬鹿だろ
普通初見でプログラムみたらそういう状態が認識できるならそういう変数探すだろ
探してあればそれは読みやすいプログラム
ところがそれを無くそうとするとかいかにやねうらおの程度が低いかわかるな
あるべきところにあるソースのほうが俺はいいソースだと思うぜ

やねうらおまわりってさ
こういう普通の常識もわからない馬鹿ばっかりだから嫌いなんだよね
俺、俺が初心者のときから嫌な匂いしたわこいつら
俺ももう経験10年だけど
こいつらってズレてんだよね
力入れる部分がさ
0323名前は開発中のものです。2008/12/25(木) 00:21:23ID:a/8vcZsU
>>320
> そういうものをタスクシステムを紹介している>>2に包含してないからって駄目呼ばわりするのはどうなのよ。
じゃ、使うメリットが何もないじゃん。
0324名前は開発中のものです。2008/12/25(木) 17:45:17ID:5Ans8N0b
>>322
このスレの流れと逆のこと言ってないか?

このスレの流れ的には、
ジョブコンにはコンテキストスイッチがあったのに、それの発展形を
事象するタスクシステムはそれを取っ払ってる。その結果、グローバル変数で
状態を持ってやったりしなきゃならない、バカじゃね?
ということになってるのに、なんで突然そのグローバル変数を賞賛するかね?

やねがズレてるのは俺も感じてるが、お前はもっとズレてる。
0325名前は開発中のものです。2008/12/25(木) 17:54:00ID:DGaHaIHQ
>>324
は?
グローバル変数を賞賛?
どこにそんなこと書いてあるの?
やねうらおまわりはあいかわらず馬鹿だな
0326名前は開発中のものです。2008/12/25(木) 19:54:19ID:5Ans8N0b
> そういう状態が認識できるならそういう変数

って普通グローバル変数だろ。
グローバルじゃないにしてもstatic変数。実行させてみないと挙動が把握できない。

そういう変数じゃなくて、ブツ切りの挙動を上から下に並べて書けるのが、
継続とかコルーチンとかマイクロスレッドとかファイバを利用したテクニック。
それを頭からバカにしてるのがお前。
0327名前は開発中のものです。2008/12/25(木) 20:17:48ID:cbF0jNVH
よくわからんが、FSMの状態変数のことを言っているんなら
クラスのメンバあたりが妥当で、別にグローバルやstaticである
必要は無いんじゃないの
0328名前は開発中のものです。2008/12/25(木) 20:39:58ID:DGaHaIHQ
>>326
はぁ?
思い込み激しすぎ
どこにそんなこと書いてあるの?
0329名前は開発中のものです。2008/12/25(木) 22:26:40ID:IlrfutNd
ポエマーはクリスマスの家族サービスも終わって一休み、一休み
あとは印刷屋に注文したブツが配送事故なく無事に現地に到着することを祈るだけだよ

∩∩
(・x・)   「パパは誰と戦ってるの?」

(@∀@)「パパはね、今フェードアウト2Dゾンビという怪人と戦ってるんだよ。
     この世に未練タラタラの8bit悪霊に取り憑かれた若者達を正気に戻すために
     作文を書いてるんだ。おやすみ」
∩∩
(・x・)   「ふーん、まぁがんばってね」


娘に絵本を読んで寝付かせた後にネットブックでちょっかい出しに来たのね。勤労家だね
0330名前は開発中のものです。2008/12/25(木) 23:14:09ID:IlrfutNd
>>289
>こういうの見ると、メインフレーム屋さんではなくて制御屋さんの発想な気がするけど

私がまだ下っ端だったころ、電機メーカーでプラントのプロセス制御用のシステム開発に
携わってた人とか、光学機器メーカーで組み込みシステムに携わってた人がいたのね
彼らは今で言うところのリードプログラマに相当する存在だった。俺を含む当時の若手は
彼らから色々教わったのねー

メインフレーム屋(?)とか制御屋(?)とか、そういう分類はよく知らないけど
(基幹業務システムの人とか組み込みシステムの人とかそういう分類で言ってるんだとは思うが)
そういうのに関係なく、当時コンピュータに携わってた人間は多かれ少なかれリタラシーとして
メインフレームのことは知ってたのね。学生時代、お手本となる本格的なコンピュータシステムといえば
その代表格はメインフレームとその弟分たち(オフコン、ミニコンとか)だったのね。教科書には
当たり前のように登場したし、卒研のためにメインフレームを使わせてもらえる贅沢環境を体験した奴も
いたのね。研究室単位ではミニコンのほうが多かったけど、それらのモニタやOSもメインフレームなどの
大型コンピュータのそれを踏襲してたのね

【メインフレームの基礎知識】って言ったのはそういうことなのね。教科書レベルの知識のお話
0331名前は開発中のものです。2008/12/26(金) 00:03:56ID:nQQPnA5J
>>294
>(1)
別にぽまえさんがクリティカルヒットしたわけじゃないでしょ?
他人事ならニヤニヤしてればいいと思うのよねー

まぁ何度も言ってることだが、当時の実装対象の特性なんてこれっぽっちも知らない人間が
64bitマルチコアCPU&9600GTクラスのビデオカード(DSPカード)搭載のモンスターPCを持ってたりする人間が
IDE付きの静的型付言語の開発環境(VS2008EEなど)+DirectXなどを使ってる人間が
ちゃんこ鍋循環リストにすべてを放り込んでバッチ処理するだけの(今となっては何とも珍妙でお粗末な)
仕掛け(>>2)をどうして神格化するのかおじさんは不思議で不思議で仕方が無いのよねー
「タスクシステム…いとしいしと…」と地底奥深くでひっそりと一人で、職場の中で囁くだけなら別にどうでもいいが
公衆の前で「>>2素晴らしい!神の業!すげーすげー!超参考になる!真似しないと!」と絶叫する奴は
相応の陵辱を受ける覚悟をしてもいいと思うのよねー
0332名前は開発中のものです。2008/12/26(金) 00:05:55ID:tFa9iljv
>>331
お前、なかなかわかってるなw
0333名前は開発中のものです。2008/12/26(金) 00:24:31ID:aORXdj9D
まぁこのスレを、公衆の前と思うかチラシの裏と思うかは人それぞれという気もする。
0334名前は開発中のものです。2008/12/26(金) 00:27:54ID:mDOQ1BG2
>>331
ハァ?、て感じだな。

一体、何を問題にして、何を前提にしているんだ?
一体、何を問題にして、何を前提にしているんだ?
一体、何を問題にして、何を前提にしているんだ?
一体、何を問題にして、何を前提にしているんだ?
一体、何を問題にして、何を前提にしているんだ?
一体、何を問題にして、何を前提にしているんだ?
一体、何を問題にして、何を前提にしているんだ?
一体、何を問題にして、何を前提にしているんだ?
一体、何を問題にして、何を前提にしているんだ?
一体、何を問題にして、何を前提にしているんだ?
0335名前は開発中のものです。2008/12/26(金) 00:30:21ID:nQQPnA5J
私は、何かの縁で最近就職希望の学生さんの就職説明会(なのかしら)に立ち会う機会があった。
どこもかしこもみんな多忙で、こんなオサンが出張ることになった。フェードアウト窓際のふりをして
タラタラと講話をしていた。眠い話が終わると、ご質問ごじゃいますかーと進行のお兄さん(イケメン)が言う

想定どおり、痛くもかわいい質問が多くてにんまりうんじゃりしていたが、特にやべぇと思ったのが
タスクシステムがどうのとかいうゲー専の子だった。本物のフェードアウト2Dオヤジの講師にナニを
吹き込まれたのか知らないが私はゲー専に行く子はちょっと可哀想だなとそのとき思った。
彼には直接個人指導してやりたかったがそういうお時間はいただけなかった。まぁどうでもいいや
0336名前は開発中のものです。2008/12/26(金) 00:35:22ID:nQQPnA5J
×フェードアウト窓際のふりをして
○フェードアウト窓際としては久しぶりの仕事なので
0337名前は開発中のものです。2008/12/26(金) 00:43:37ID:aORXdj9D
>>334 主要部だけ抜き出すとここだな。

オブジェクト指向の恩恵をふんだんに受けられる環境で開発してながら、
ちゃんこ鍋循環リストにすべてを放り込んでバッチ処理するだけの
(今となっては何とも珍妙でお粗末な)仕掛けをどうして神格化するのか?
0338名前は開発中のものです。2008/12/26(金) 00:52:58ID:tFa9iljv
>>335
やべw
ファンになりそうw
0339名前は開発中のものです。2008/12/26(金) 00:57:58ID:mDOQ1BG2
>>337
悪いが俺には、
「オブジェクト指向の恩恵をふんだんに受けられる環境」で
タスクシステム指向を否定する理屈が理解できない。

>一体、何を問題にして、何を前提にしているんだ?
0340名前は開発中のものです。2008/12/26(金) 01:09:03ID:aORXdj9D
> ちゃんこ鍋循環リストにすべてを放り込んでバッチ処理するだけの
> (今となっては何とも珍妙でお粗末な)仕掛け

という評価を否定してみせろ>ID:mDOQ1BG2
0341名前は開発中のものです。2008/12/26(金) 01:12:51ID:tFa9iljv
>>339
>タスクシステム指向を否定する理屈が理解できない
頭おかしいんだw
0342名前は開発中のものです。2008/12/26(金) 01:54:38ID:IU47ZxI2
Lisp?>ちゃんこ鍋循環リスト

Lispは何でもリストで、データとプログラムが同等で、
プログラムを生成するプログラムは常套手段ですが、
今や再評価される一方のモテ言語でつよw
0343名前は開発中のものです。2008/12/26(金) 02:04:03ID:aORXdj9D
Lispのリストは単方向リストで、普通は関数的に使うもの。
(まぁ副作用バリバリで使うこともあるけどな)

「タスクシステム」のリストは、双方向リストで、デク(Double Ended Queue)
と呼ばれるデータ構造。副作用バリバリで使うのが基本。

もうちょっと中身がわかるまで勉強してから出直してね。
■ このスレッドは過去ログ倉庫に格納されています