日本でハリウッドVFXを制作! 「経産省アイディアボックス」 結果:  
●まとめエントリはこちら ●FAQ ●お問い合わせは左のメールフォームから

2009年2月4日水曜日

フロー (流れ)

フローチャート、フロー制御と、プログラミングの基本に触れる重要な言葉として「フロー」=「流れ」という言葉がある。

なぜフローなのか?

もちろんプログラムが進行していく流れなのでフローと理解しておいて間違いではない。

でも物理的な流れと何か関係しているのか?


コンピュータのハードウエアの歴史から推測してみる。
6年ほど前に、コンピュータを本格的に勉強するために、
まず「コンピュータとは何か?」を自分なりに理解するために図書館に通い、独学をしたことがある。
目的は、「コンピュータに対するストレスを軽減するためにコンピュータを理解すること。」
そのために、「ブラックボックス的なCPU内部での働きを物理現象として理解する」ことが
大切だと思って、歴史から調べていったことがある。
以下はそのときの知識をもとに書いてみた。

コンピュータは、石や木を数えることから、そろばん、歯車をつかった計算機へ、そして
リレー回路を使ったものから電気を使い始め、真空管、トランジスタ、IC、CPUへと
進化してきた。

参考:私のコンピュータ開発史、三輪 修

微分解析機

インターネットサイエンスの歴史

BRAINS コンピュータに掛けた男たち


パスカルの歯車式計算機、解析機関、微分解析機は
いずれも歯車や回転軸を使った計算機で、
電気ではなく、機械的な回転力が、ある軸から次の軸へと伝達していくしくみを利用している

またリレー回路や真空管をつかったもの、微弱電流をつかった現在のCPUにいたるまで
電気の流れをある回路から次の回路へと伝えるしくみを利用している。

現在のコンピュータはCPUがその中心部となっている。
そのCPUとは、トランジスタを集めて作られた物である。
トランジスタとは簡単に言うとスイッチング回路。
AからBへ電流がながれる線があるとして、その線を切ったりつないだりできる装置である。
その切ったりつないだりは、通常のスイッチでは、人間が行うが、トランジスタの場合は電圧の変化で行う。

あるトランジスタがONになり電流がながれる、その出力側からの電気が他のトランジスタのスイッチをONにするようにつないでおけば、そこからの出力がさらに他のトランジスタをONにする。

もしその出力が二つに分かれているなら、二つのトランジスタをONにすることができる。


この性質から、On/Offの二値をとることができる。
それは、論理式の基本でもあり、論理回路はその性質を利用した物である。

論理回路は、このようにOn/Offの二値をとることが可能で、理論的にトランジスタやスイッチでなくても作ることができる。

その一例として、アポロ計画の時に宇宙空間で放射線の影響をうけない、回路としてロケットエンジンの噴射ガスを利用した、流体素子による制御回路が研究された。


考えようによっては、
水の流れを利用した流体素子によるコンピュータ、もしかすると木でてこの原理を利用した、
原始的なコンピュータなども作ることができる。
サイバーパンク的だが、解析機関のように歯車を動かすコンピュータはもしかしたら
蒸気機関で早く動くことができたかもしれない。(動作原理を知らないのであくまで想像)

いずれも人間が電源をいれるなどの初期動作が必要だが。
その後は自動的に決められた順序で
流体、力、電気がある部分から次の部分へと受け継がれていくことによってコンピュータは動作していると考えることができる。

これをある一点のエネルギーに注目すると、それが次々に受け継がれ、流れていくように見える。
まるでピタゴラススイッチのように、どんどん、継続されて反応がおきていくのである。

これがコンピュータのハードウエアの基本である。

そして、これは推測だが、世界初のプログラムとされる、「解析機関用のプログラム」は、
「ある計算をするために、歯車による力の伝達経路と順番を決めるために、いくつかある設定装置(おそらくレバーか、回転式の設定用歯車のようなもの)の設定情報をきめたもの」だと思われる。
設定情報とは、時間軸でみたときに、それぞれの時点でのレバーなり回転部分の位置情報。

ここからするとプログラミングとは、力の伝達=流れを非常に意識した物であり切っても切り離せないものだといえる。

そしてそれは現在のCPUにも言える。
基本的には電気の流れを、どこに流れるのかどこに流れないかを制御している。
プログラミング言語からはそれを知ることはできないが、CPUの中では厳密に処理された順序で電気がながれているのである。

最初にどのスイッチをオンにして、次に、どのスイッチをONにするのかを決めている。

マシン語はまだCPUの働きを意識した物なので、それに近い。

ベーシックやJava,C言語といったプログラミング言語は、そこからは離れているが、
結局は、「CPUの処理の流れを意識したマシン語に変換され、電気信号に帰着する」ことを
考えると、「流れ」という呪縛からはなれているものではないということがわかる。


ここでいう流れだが処理の「順番」ということであり、時計ではかることのできる
時間の流れと違い、速度に縛られることはない。

0 件のコメント:

コメントを投稿