世界最初のプログラマはエイダ・ラブレースとされています。彼女の時代からは2世紀が経ちました。最初は機械語で、その後アセンブラが使われるようになりましたが、機械的に置き換えただけでした。最初のパソコンと言われるPC8001にはbasicが入っていましたが、あまりにも遅かったので、クリティカルな個所には機械語を使えるようになっていました。今でもよく使う命令は覚えています。インデックスを進めるINC HLは23とか、RETURNはC9とか、アキュムレータをクリアするにはXOR Aを使うと1バイトで済むとか。これは機械語ではAFになります。あの頃は、それなりに楽しかったですね。

さて、仕事に使うにはこんな調子ではいけない。当然ながらコンパイラの出番です。歴史的には50年代のFORTRANの開発が大きなステップになりました。実用的に使われるようになると言語としての弱点が見えてきます。有名な例としてはDO 10 I=1,5という繰り返し命令がコンマを間違えてピリオドを打ってしまうと、DO10Iという変数に1.5という数値を代入するという意味になってしまう、というものがあります。

こんなんじゃいけないということで、まずプログラミング言語の文法定義をしっかりと決めようとなります。チョムスキーの提唱した生成文法から正規表現を使って字句解析を行い、文脈自由文法を使って構文解析を行います。これで先の例のような字句解析と構文解析をまたがった間違いからは逃れられるわけです。構文解析では数式の解釈に文脈自由文法は強力なパワーを発揮しました。たとえば、2+3*4=14ですし、2*3+4=14です。また(2+3)*4=20です。こうした処理を文脈自由文法はいとも簡単にやってのけるのです。いやあ、チョムスキーすごいなあと思います。

このような成果をもとにしてALGOLという言語が作られます。そして、その流れをくむCなどのALGOL系と呼ばれる諸言語がいまでは主流になっています。しかし、これでめでたしめでたしにはならなかったのです。


それから30年ほどたって、銀の弾丸などないという有名な論文が発表されます。銀の弾丸とは狼男の襲撃から身を守るための武器です。あるいは潜水艦の攻撃に例えることもできるでしょう。目的地に向かって進む輸送船団を潜水艦隊が襲います。平和だった海が一瞬にして地獄絵図に変わります。これは映画でも歴史でもなく、システム開発の現場で現実に起こっていることです。

何も打つ手はないのか。ALGOLの開発に抜かりがあったのか。残念なことに、ALGOLの開発のために世界中の叡知が結集したその時、チューリングはもはやこの世の人ではありませんでした。

ALGOLの成功は文脈自由文法の採用にあります。それは文脈を無視するということです。FORTRANがFormula Translatorの略とされるように、もともとの目的は計算式の処理にありました。文脈を無視するということは意味を気にしないということです。

算数の問題です。男の子が2人と女の子が3人います。合計で何人ですか。こたえは2+3=5で良いのでしょうか。男の子と女の子を一緒にしてもよいのか。それは文脈によるのです。もしバスの座席を予約するのならオーケーでしょうが、旅館の部屋を予約するのには問題があるでしょう。それでは、もし千円札が2枚と一万円札が3枚あります。合計で何枚でしょう。この質問にはどう答えますか。2+3=5という答えは、お金ではなく単なる紙切れとして認識しなければ意味がありません。たぶん、誰の常識とも一致しないでしょう。

チューリングは暗号の解読に全力を注ぎました。そこで求められるのは文脈からの意味の理解です。輸送船団は何をどこに運ぼうとしているのか。そして敵の潜水艦隊はどこにどのくらいいるのか。こうした文脈を前提として、暗号解読ははじめて意味を持つのです。


チューリングゲームは何を意図したものでしょうか。それは、機械が人間の役割を演じることができるかという問題提起ではないでしょうか。プログラミングとは、パソコンに仕事のやり方を教えることだと言えるのではないでしょうか。たとえばコンビニの店長がバイトを雇ってレジ係を任せるようなものです。

従来のプログラミング言語は手続き型と呼ばれています。手順を書いているからです。コンビニのレジ係で言えば、お金を受け取って商品とお釣りを渡すというような手順ですね。それでは電子マネーはというように、細かい手順を教えることが手続き型です。

しかし、求められているのは役割を教えることではないでしょうか。レジ係の役割は何か。それをきちんと理解できれば、新しい状況が起きても自分で適切に判断できると思います。

そういうわけで、現代に求められているのはまさにチューリングが目指した道、役割型プログラミング言語ではないでしょうか。ここではチューリング言語という名前で、これを提案していこうと考えています。