OL
ご近所のOLさんは、
先端に腰掛けていた。

vol.5 - Welcome to the klic world No.1 -

こんにちは。
寒いですが、お元気ですか?
今朝は、昨日観たオフブロードウエイミュージカル
「フォーエバープラッド」(@アートスフィア)
(アメリカのショービジネスって底力ありますね。)
の歌を歌って氷が張った道をつるつるすべり、
「先端」に到着です。

今日は少しミクロな話に潜入します。

「先端」なところには実は前身がありました。
そこでは世界的に注目を集めた壮大な国家プロジェクトが
進められていました。
そこで誕生した大切なものの中に、
KL1 というプログラミング言語と
その処理系KLIC があります。

KLIC は開発者やユーザの間で大事に育てられ、
現在もフリーウエアとして
日夜バージョンアップが進んでいます。
4月からは「KLIC 協会」なるものがスタートして
そこが開発基地になるみたいです。

今回は、KLIC 開発の主要メンバーの一人でもあり
また私のプログラミングの師匠でもある
「教授」が登場です。

私にとってプログラミングというのは
まるで深海に潜るような感覚があって
(なんちゃってダイバーなのです、私。)
「おもしろそうだけど、恐いよ」という
まったくの未知の世界でした。
だけど、優れた師匠に出逢って
脳の今まで使わなかった部分をシャッフルしているうちに
これがちゃんとおもしろいと感じてきちゃうのです。

宇宙人のように●×△□のような言語をさらさらとあやつる
研究者たちが出入りしている「先端」ですが
本日登場の「教授」は
私なんかのレベルにトコトコ降りてきて
難解な世界をやさしく教えてくれる
かなり忍耐強いレアな先生です。

今回は「教授」に KLIC 誕生前夜のお話をしてもらいました。
テーマは「並列処理プログラミングとは?」です。

タンクチェック、おーけー?(おっけー。)
ゴーグル、足ヒレ、おーけー?(おっけー。)
ではみなさん、手に手をとって KLIC の海へ潜りましょう。

KL1+C=KL"1"C=KLIC

教授、KLICの生い立ちの話をして下さい。

オーケー。その前にまず klic が生まれる大昔には、
こんなことがあったんだ。

我々の住んでいる地球上では、毎日たくさんの人々が、
星の数ほどの言葉を使っている。
お互いが理解できる言葉を使って意思を伝えあい、
言葉を使って考えたりしている。
そういう言葉なら、どんな言葉を使っても、
人間はだいたい同じように、
行動したり考えたりすることができる。
英語を喋ろうが、日本語を喋ろうが、
皆、ちゃんと日々生活ができているでしょ。
道具であるところのコンピュータに意思を伝える時にも
言葉を使います。
コンピュータ同士の会話にも言葉を使います。
これが広い意味でのプログラミング言語。
コンピュータにやって欲しいことをちゃんと伝えるのは、
思っているほど簡単じゃない。
コンピュータを操るためのプログラミング言語は、
どれを使っても同じという訳にはいかない。

なぜですか?

それは、
コンピュータという道具が理解できる命令なんて、
本当に単純なことしかないから。

できることは、
小学校低学年で習う足し算引き算に、
計算の途中結果をメモ帳にメモることくらい。
こんなことしかできない道具に、ゲームを組み込んだり、
インターネットさせたり、
ワープロさせたりするには、それこそ気が遠くなるような
個数の命令列を組み上げて、憶えこませないといけない。
この命令列っていうのがプログラムで、
その組み上げをするのがプログラマ。

つまり人間ですね。

そう、人間のやることだから、もちろん間違いもある。
するとコンピュータも間違った動作をする。
これがバグというもんです。

2000 年になるとコンピュータが暴走する 2000 年問題
というのが、最近新聞でも取り上げられてますが、
もとを辿れば、すべての原因は
そのプログラムを作った人間のせいだったんですね。

そのとおり、すごいじゃない。

いや、実はカンペ読んでしまってたんです(ぽりぽり)。

やれやれ。
で、プログラミング言語の進歩の歴史は、
人間のやりたいことをコンピュータに伝える時、
いかに楽をして伝えるか、いかに間違わないようにするか、
という工夫の積み重ねの歴史です。
Fortran, Pascal, Basic, C, Lisp, Prolog, Smalltalk, Java と、
さまざまなプログラミング言語が生まれてきた。

ここで、ちょっと話が飛ぶけど、
コンピュータに与えられた仕事を速く処理する方法の一つに
「並列処理」というワザがある。
発想は単純で、一人でやるより皆でやった方が
早く終わる、ってこと。

ところが、
監督がダメなチームは弱かったり、
社長がダメな会社は倒産したり、
マネージメントというか、統率というか、
全体をうまく協調連携させながら
一つの目標に進んで行くことが重要になってくる。
そうでないと、結局、皆でやるより一人でやった方が
良かったりして。 並列処理をプログラミングする時も全く同じ。
大切なのは、与えられた仕事をどう切り分けるのかと、
切り分けた小さい仕事を
処理する人にどう割り振るかということ。プログラマの考える
切り分け方と割り振り方を、うまく表現できる
プログラミング言語が、良い並列処理言語。
将来は、この面倒な切り分け方と割り振り方こそ、
コンピュータに考えて貰うべきだと、
研究者は思っているんだけど、これがなかなか難しい。

そうか、大変そうだな。

ははは。
ここで、再びちょっと話が飛ぶけど、
料理を作るレシピというものがありますね。
玉葱をみじんぎりにして、
たっぷりのオリーブ油で透き通るくらいになるまで
いためて、どーたらこーたら。

はい?

これ、料理を作る作業を
時間の順を追って書き下したものです。
コンピュータのプログラムも同じようなもんです。
コンピュータの実行する命令、
つまり足し算だとか引き算だとかメモ帳にメモれとか、
そういう命令を実際に実行する順に並べたものが
プログラム。レシピと同じ。
でもレシピと違うのは、その長さ。料理のレシピなら、
せいぜい手順の番号は 10 とか 20 でしょ。
ところが、ワープロやゲームなんていうと、
命令の個数たるや 100 万を越えることもザラ。

すごい数です。

こりゃ間違いの命令が紛れ込んでいてもしょうがないわな。
100 万個も並んだ命令を順番に追いかけて行くことなんて
普通の人ならできっこないです。
普通の人でなくたってできないか。

でも、人間がコンピュータにやらせたい仕事がどんどん
複雑になるにつれて、100 万でも全然足りないような仕事が
次から次へと出てくる。

ロケットを火星に飛ばすとか、
ロボットにサッカーをやらせるとか、 それこそいろいろ出てきますね。

そう。
そこで、研究者は考えた。
足し算引き算みたいな簡単な命令じゃなくて、
もっと、人が普通に使っているような言葉を
使えばいいのだと。とは言っても、人の言葉と
同じようにはいかないけど。
例えば、かけ算や割り算の命令ができたり、
メモ帳に書いてある数字がプラスの数なら、
こっちのレシピを使うという命令ができたり。
つまり、足し算引き算よりもっと高級な言葉を使って
指令を出すと。これで万事解決できるかと
思われた時代も、かつてはありました。

しかし、それでも、
人間がコンピュータにやらせたい仕事が
どんどん複雑になって行くのには追いつけません。結局、
高級な指令を 100 万行以上も並べないといけなくなる。
そもそも、こんなに長い命令列が人間に書ける筈はない。
もちろん、読んで理解できる筈もない。

どうしたらいいんですか?

またまた研究者は考えた。
ここで発想の転換をする訳です。
どういう順でこの仕事をやりなさいということを
プログラムで表現するのではなく、
どんな仕事をしたいということを
プログラムで表現するのです。例えば、10 個の数字を
大きい順に並べ直したいとしますね。

それだったら考えられる。

従来のプログラムなら、
一番大きい数を見つけてきて、それを一番左に置いてとか、
そういう手順を片っ端から書いて行く訳です。
ところが「どんな仕事をしたい」方式なら、
数字を大きい順に並べる、とだけ指示すれば足りる訳です。
あとはコンピュータが適当に並べ直してくれます。
これなら間違えようがない。とっても楽チンです。

「どういう順」でというのは、
プログラマが how をコンピュータに伝えているとすれば、
「どんな仕事」は what を伝えてると対比できましょうか。

研究者の間では、what っぽいことを、
宣言的と言っています。こんなうまい話があるもんかと、
お疑いの貴兄。あなたは正しい。人生経験豊富ですね。

はぁ。

そう、世の中、うまい話には常にウラが付きもの。
宣言的プログラミングも、その着想はすばらしいものの、
what だけ伝えて済むような処理の範囲がまだ狭い、
つまり簡単なことしかやらせられないということと、
速い処理を実現するのが難しいという欠点があるのも事実。

しかし、
いかに苦難の道が待っていようとも、
楽に長いプログラムを書くという崇高な目標に向かって、
この欠点を解消すべく研究者は日夜邁進しているのです。

あー、長かった。

並行論理型プログラミング言語とは、
この並列処理をうまく書けることと、
しかも宣言的に書こうという二つのことを同時に
満たそうという欲張りなプログラミング言語なんです。
まだ、ちょっと書き足りない部分があるけど、
ちょっと力尽きました。

お疲れさまでした。
で、教授、KLICの話は?

あ、そうだった。
じゃ、続きは次回ってことで。

なんとなく「並列処理」というプログラミングのことが
わかってきたような、こないような。

つまり、朝起きてお母さんに
「靴下を右の次に左をはいて
次にシャツの右手を通してから左手
ボタンは一番上から下まで順に止めなさい」。
といちいち細かく指示されて動ける子と
(従来のプログラム)

「靴下をはく、シャツを着る、ボタンをかける」
という3つの指示を出せば、彼なりのやり方で
どんな順序でもできる子(並列処理プログラム)
の違いかなと思います。

このあたりが KLIC のコンセプトの重要部分
のようです。

実はこの教授は「音楽とコンピュータ」が
専門の研究者なのです。
イベントもあったりしてお忙しいところを
来てもらったのですが。
これからがKLICの登場というところだから
また来てもらうことにします。
お楽しみに。


福嶋(まーしゃ)真砂代

1999-02-09-TUE

BACK
戻る