コンピュータ言語と英語の発想
ボブ・ディランの 'I Want You' の聖書との関りを考えたときに、「ポインタ」という言葉を使った ([英詩]ディランと聖書(5) ('I Want You'))。知る限りでは、ディランを論じる際にコンピュータ用語を使うひとはいない。
*
そこで、今回は、わたしが英語について考えるときのコンピュータのことを少し語ろう。
以下、自伝的な要素が大きくなり、関心のないひとには退屈なだけと思うので、「ポインタ」だけ、まず説明する。
ポインタ (pointer)
プログラミングを行うときに、データそのものを使う方法ももちろんある。だが、データ(の所在)を指し示すものを使ったほうが便利なことも多い。その指し示すものを、プログラミングで「ポインタ」と呼ぶ。
地図や黒板上の箇所を示すのに指示棒を用いるが、あれも英語で pointer と言う。
ただ、プログラミングの場合は、指し示されるものが具体的なものでなく、プログラミング言語で定義されたものになるのが違う。いわば論理的に〈こういうもの〉と、属性が決められたものを指すしくみだ。実際には、目的とするデータ、表、サブルーチンなどの、記憶装置の中の記憶位置(location)を示す識別子のことである。
データの所在地を示す変数 (variable) であることが大きな特徴である。つまり、値の変わらない定数 (constant) とは対照的な量である。
*
ディランの 'I Want You' の場合は、データの所在地は旧約聖書のコヘレトの言葉 (伝道の書、Ecclesiastes) の12章1-7節であった。それを指し示す片言隻句が歌の中にちりばめられている。
その箇所は、「詩的比喩的表現」において世界文学に冠たる箇所であり、文学的にも有名なパッセジである。それを指し示していることは、知っているひとにはすぐ分る。
このように、あるパッセジを指すのに使えるということは、ある領域についても可能で、つまりはディランの場合によく出てくる各種のレジスタ(言語使用域)でも使えるということである。
コンピュータで使う英語
これは知っているひとには自明のことだが、コンピュータ言語は英語の文法に似通っている。これをきらって、日本語で書けるようにしたプログラミング言語というのも存在はするが、主流にはなっていない。
*
わたしがなぜそういうコンピュータ言語に親しんでいるかといえば、たまたま、そういうコンピュータとの接し方をしてきたからである。
最初にさわったコンピュータこそポケコンと呼ばれる小さなものだったが、その次は Apple IIe というコンピュータだった。このコンピュータ上で使えるソフトウェアや関連する雑誌などは、ほとんど英語のものだった。日本語のものは数えるほどしかなかった。英語でセンテンスを作ると、その通りにアニメーションが動くソフトまであった。
Apple IIe のディスク装置で読める電子雑誌も購読していたが、非常に奇妙な話が多く掲載されていた。コンピュータの草創期は、サイエンスとオカルティズムとの境界線が不分明な、おもしろい話がごろごろあった。
C
次に本格的に勉強を始めたのが UNIX のミニコンだった。システムの言語に加え、その上でコンパイルできるプログラムを C 言語で書き始めた。C というのは、とてつもなくおもしろく、カーニハン&リチーの本 (原書と和訳書) もあまりにもおもしろかった。C でプログラミングをするのが何よりも楽しかった。カーニハン&リチー (下) などを読めば、英語の文法と C 言語の書き方が自然に交流していることがよく分る。
C 言語というのは、ポインタをよく使う。ポインタを使わなければ、あまりおもしろいプログラムが書けない。
*
詩の研究のために、コンコーダンスをいくつか C で書いた。
自分の研究道具は自分で作るのがよいと思うが、それがわたしの場合は C 言語でプログラムを書くことであった。
Pournelle
一方で、米国のネットワークに接続することもおもしろかった。自分の書いたプログラムについて、CompuServe で XMODEM の開発者からコメントをもらったこともあるが、広がりがあったのが UNIX 上の研究者のネットワークだった (uucp を用いる)。日本では junet があった。
uucp を使ったネットワークは今はあまりない。今は TCP/IP が全盛だ。
*
Byte 誌で愛読していた 'Computing at Chaos Manor' というコラム (日経バイト誌では「混沌の館にて」) を書いていたのが SF 作家の Jerry Pournelle (下) だ。彼の文章は、コンピューティングを考えるうえでの私の基本のひとつとなった。
そのころ、プァネル (パーネル) が理想としていた執筆の形は、ひとつは CP/M 上の Write であり、もうひとつは CD-ROM を内蔵した携帯型コンピュータだった。前者はワープロとしてはおそらく史上最高のものだと思う。後者については、わたし自身の研究上の必要から、OED を内蔵した携帯型コンピュータが理想になったが、それは現在に至るまで実現していない。
*
Byte の関連では、bix というネットワークがあった。それの日本版が mix である。どちらも貴重な情報が多く流通していた。
*
また、IBM 関連では bitnet というネットワークがあり、これもおもしろかった。
*
さらに、IBM PC の AT 互換機を手に入れて、おもしろいプログラムをいろいろと楽しんでいた。
その頃、UNIX → CP/M → MS-DOS という経過をたどって MS-DOS を使うようになり、PC-9801で IBM PC 用のプログラムを動かす、PSH 氏の作った SIM というプログラムに夢中になった。その流れから DOS/V マシンに行き、DOS/V マガジンや AX マガジンで連載を書いていた。
その後、時代は Windows になり、世の中は Windows 一色になったかに思えたが、ネットワークを通じてマルウェアなどがブラウザに悪さをすることが多くなり、すっかり熱がさめて、今はわたしは元の Apple の環境に戻った。
copy A from B
英語的な感覚とコンピュータ言語の親近性について、もう一度ふれておこう。
英語では〈A を B からコピーする〉と言いたいとき、copy A from Bという言い方が自然だ。コンピュータ言語もそれに沿った形で書く。
例文: copy the exercise from the notebook「ノートから問題を写しとる」
一方、日本語では〈B から A にコピーする〉の言い方がふつうだ (上の日本語訳文もその順になっている)。元のところを最初に出し、そこから目的地を述べるという、ある意味で合理的な語順になる。この日本語的な感覚をそのまま英語で表すと 'copy B to A'* とでもなるだろうが、そうは言わない (* は非文)。どうしても B を先に出したければ、例えば copy B into A などの言い方は可能だ。into や in ならあり得るが、たぶん to とは言わない。
例文: copy the exercise in/into the notebook「ノートに問題を写しとる」; copy one's messages into a word processing file and save them to one's hard disk「文書をワープロのファイルにコピーしてハードディスクに保存する」
*
英語では、そこから取り出すものを先に出し、その後に、取ってくる場所のことを言う。
つまり、動作の目的/対象や結果のほうに焦点があり、動作の起源や動機のほうは附加的な情報として扱われる。
これは大きな発想法の違いだ。
代入演算子
最後に、C 言語の代入演算子 (assignment operator) を例に見ておこう。
C では変数に値を代入するのに等号 (=) を用いる。
x = y
と書けば、 y の値を x に代入する意味になる。
つまり、右辺の内容を左辺に入れることになる。この感覚は、わたしの解釈では、英語の copy x from y から来ていると思う。
*
なお、イコールの意味は、C 言語では2つ重ねの等号 (==) で表す。
*
この代入演算子を使ったプログラムの例が上記のカーニハン&リチーのC言語の本の最初のほうに出てくる。温度の華氏・摂氏の変換式 °C=(5/9)(°F-32) を用いて、華氏・摂氏の対応表 (下) を表示するプログラムだ。
1 -17
20 -6
40 4
60 15
80 26
100 37
120 48
140 60
160 71
180 82
200 93
220 104
240 115
260 126
280 137
300 148
このプログラムは次のようになる。
ここで、華氏から摂氏への変換を実行する文 (下から5行め)
celsius = 5 * (fahr-32) / 9;
について、英語で次のように説明される。
The Celsius temperature is computed and assigned to the variable celsius by the statement.
この文 (statement) により、摂氏温度が (右辺において) 計算され、変数 celsius に代入される。
つまり、右から左への動きなのである。矢印で表せば
左辺 ← 右辺
となる。
この矢印の感覚が英語の copy x from y から来ていると思うのである。