逐次実行と並列実行

逐次実行というのは言葉として難しいですよね.お湯が湧いてからお味噌を入れる,みたいなものです.何かをやるのに最初にやる方,後にやる方と順番が決まっていて,その順番を入れ替えたらいけないことを言います.

逐次実行と対で使われるのが並列実行です.こちらは,味噌汁を作りながら魚を焼く,ということです.どちらが先というのは関係なく同時にやります.

もし,コンロが一つしかなければ同時にはできないので,たとえば最初に味噌汁を作って,コンロから下ろして,魚を焼きますね.どちらも熱々で食べたかったら,最初に魚を半分焼いてから,味噌汁を作って,その後もう一度魚を焼くという手もあります.味噌汁は多少冷めてもよいけれど,魚をまるまる焼く時間は待てないというところですか.

コンピュータがとても非力でショボショボと動いていた時代は,逐次実行しか考えられませんでした.仕事を切り替えるのはそれなりに時間がかかるので,そんな時間をかけてまで2つ3つの仕事を同時にやるのはもったいないというころです.そこからコンピュータはとても高速になり,仕事を切り替える手間なんて無視できるようになり,沢山の仕事でもいくらでも同時に受け付けられるようになりました.

コンロが100個も同時に使えるんですよ.手順なんて気にしないでなんでもやり放題です.完成の時間をそろえて,それぞれの料理を時間をずらしてスタートすればよいのです.ただし,お湯がわいてからお味噌を入れるという本当に順番が重要なことは,ちゃんと守らなければなりません.

このように,逐次実行を厳密に気にしなければいけないシーンは(コンピュータが高速化したので)減ってきました.それでビスケットでは,他の言語が普通にやっている逐次実行を明示的に指示する方法がありません.逆にやりにくくなってます.順番に実行して欲しいときは,その順番をメガネで作って行かなければなりません.他の言語では,アイコンやブロックを並べれば順番に実行してくれるのに,ビスケットでは並べることではなく,何々の後に何々,というペアで指定しなければなりません.まどろっこしいです.

ビスケットのように,過去に大事にされていたものを捨てて,新しいものを取り込んだシステムにおいて,過去に簡単だったものが,新しい方法では逆に面倒になってしまう,ということはよくあります.何かを捨てないと何かは得られないということですね.

というわけで,ビスケットで逐次実行は面倒です.できないことはないけれど.

ところが,並列実行,こちらはそもそも最初からビスケットの機能として入っています.ステージに絵を複数置いたら,それぞれが並列に実行してくれるわけですから.

実行というの大きな枠で考えると,いままで逐次実行だけが大事だと思われていた(それは本当はBASICという非力なコンピュータを使っていたというだけの理由なんですが)のは間違えで,並列実行も同じくらい大事だよ.その二つをペアで教えないと意味がないよ.というメッセージでもあります.

ところがビスケットにはもうひとつ新たな実行の方式を提案します.「ランダム実行」です.並列実行とも違います,どちらか一つだけをランダムに選んで実行するわけですから.

ビスケットのランダム実行は,同じ絵に対するメガネが複数あった時,それらのメガネをランダムに選択して実行します.こういうことです.

普通の言語では乱数を発生させて,それをある数と大きさを比較して条件分岐の条件として判定させて分岐するというとてもまどろっこしいことをしなければなりません.発生させる乱数の範囲と比較する数をいくつにするかいろいろと決めなければならないことがあります.それを間違うとバランスのとれたランダム実行にはなりません.数,乱数,大小の比較,条件分岐,といったことが理解できなければ使いこなせません.

それに対して,ビスケットのランダム実行はとても簡単です.日本語にしても簡単で,私たちは「~たり」という言い方をします.「おばけは,上に進んだり,下に進んだりする」と読みます.とても直感的に動きを柔軟に表現することができます.メガネを増やすと,それぞれのメガネが等確率で選択されるようになります.もし,特定の動きの頻度を上げたければ,その動きのメガネを2つ,3つ作ればよいのです.乱数と数の比較で,4つの動きをランダムに出現させたい,このときある一つの動きだけは2倍の頻度にしたい,というのを作るのがどれくらい難しいか.

ここでも,プログラミングでコンピュータを自由自在に操るときに,昔のやり方を覚えないとコンピュータを操れないのか,プログラミング言語を進化させて,難しいことがわからなくても,人間が表現しやすい方法で操るのか,全く異なった方向性が現れる例です.

シェアする

  • このエントリーをはてなブックマークに追加

フォローする