[Squeak-ja: 4013] 非集中システムとScratchについて (was: Re: オープンソースカンファレンス 2008 Tokyo/Fall)

Kazuhiro ABE abee @ squeakland.jp
2008年 10月 11日 (土) 22:27:19 JST


こんにちは、阿部です。

2008/10/11 14:11 Koji Yokokawa <ykoubo2008 @ yengawa.com>:
> Scratchの資料は良くまとまっていて大変参考になりました。

ありがとうございます。

> P.23
> 情報教育用としては
> - 癖があるので注意
>  - 並列非集中システムを志向
>
> という部分はどういう意味なのでしょうか?

一般的なプログラミング教育では、中心となるメインルーチンを想定することが多いように思います。それをサブルーチンに分割、階層化したとしても、基本的にはフローチャートに書けるようなプログラムでしょう。

Scratchの場合、そもそも中心となるものが存在せず、独立したスプライト(オブジェクト。Etoysのモーフ)が複数個存在します。スプライトには名前がありますが、スクリプト(メソッド)からは参照できないため、特定のものを明示的に指定することはできません(いくつかの属性値参照を除く)。つまり、スプライト同士が直接やりとりすることはありません。
スクリプトにも名前がないので、特定のものを指して起動することもできません。スクリプトを起動するにはイベントや名前付きのブロードキャストを用いますが(Scratchはこの名前をメッセージと呼ぶ)、リスナ(依存物)にはすべてのスプライトが自動的に登録されるため、同じメッセージを待つスクリプトが無条件で同時に反応し並列で動きます。このメッセージは定数で変数を使うこともできません。また、行きっぱなしでリターンしないのでサブルーチンのようには使えません。

このような仕様から考えられるのは、そもそも中心がなく、均質で対等なオブジェクトが勝手に振舞っているように見えて、全体としては自己組織化されて機能するような非集中システムです。
Etoysにもこの傾向はあるのですが、モーフやスクリプトには名前、モーフには親子関係があり、階層的に作ることもできます。Scratchの作者であるレズニックさんはStarLogoの作者でもあり、そのあたりがさら推し進められているように感じました(ただし、扱えるスプライト数は実用上数十個で、スクリプトからスプライトの生成消滅を制御できない)。
がんばれば中央集権的で階層的なプログラムも書けなくはないのですが(たとえば、ステージ(Etoysのワールド)は例外的な存在)、かなり不自然になります。以上のようなことから、従来のような情報教育にScratchを使うときは注意が必要だろうという意味で書きました。これは制御構造にwhileがあるとかとは別の話です。

もちろん、レズニックさんやアランさんは、本来は非集中的なプログラミングこそが自然なのであって、子供にも分かりやすいと考えていると思います。

非集中システム, Mitchel Resnick (著), 山本 順人 (翻訳), 西岡 知之 (翻訳), コロナ社, 2001/08,
ISBN 4339023868

アラン・ケイの「Is "Software Engineering" an Oxymoron?」
▼ What is it like to learn the new ideas?
http://d.hatena.ne.jp/sumim/20080806/p1

 //abee
--
阿部 和広  EMAIL abee @ squeakland.jp


Squeak-ja メーリングリストの案内