今日は、ジョン・バッカスの誕生日(1924)
FORTRAN 開発の責任者であり、ALGOL の作者の一人であり、BNF記法の考案者の一人でもあります。
つまり、世の中の多くのコンピューター言語の基礎を作り上げた人。
Lisp なんかはまた違う潮流ですけどね。
以前の日記に、FORTRAN の誕生経緯を書いたことがあります。
バッカスの業績は、大体そこに書いてあるので、そちらをご覧ください。
ここでは、そちらに書かなかった話を書こうかと思います。
僕の認識では FORTRAN は世界最初の「高級言語」です。
高級言語の定義と言うのは非常に曖昧なのだけど、アセンブラではなくて、もう少し「文法」らしきものを持っている、ということね。
ただ、今日バッカスの誕生日なので調べたら、Wikipedia の日本語版には FORTRAN の前にバッカスが SpeedCoding という言語を作っている、となっている。
うーん、あれを言語と呼ぶか。…呼べなくはないけど、そう認識してなかった。
弁明するわけではないけど、FORTRAN が「世界最初」と以前に書いてしまった手前、SpeedCoding について解説しておく必要がありそうです。
FORTRAN が作られた IBM 704 は、701 の、互換性のない後継機です。
701 は IBM の作った最初の電子式デジタルコンピューターで、科学計算用でしたが固定小数点しか扱えませんでした。
(704 は浮動小数点を扱うハードを持っていて、これが世界初です)
しかし、科学計算では浮動小数点が無くては、精度が十分ではありません。
そこで、浮動小数点を含む科学演算を素早くプログラムするために、SpeedCoding が作られました。
その意味では、目的は FORTRAN と同じ。
でも、SpeedCoding は FORTRAN とは全く違うアプローチを使っています。
これは、IBM 701 の中に作られた「仮想コンピューター」なのです。
この仮想コンピューターでは、浮動小数点を扱う命令を持っていますし、主要な数学関数を扱う命令も持っています。
それらの命令は全て、仮想コンピューターの「機械語」として用意されています。
SpeedCoding システムは、この仮想コンピューターの命令を解釈できます。
…内部的には、命令語(数値)を拾ってきて、その数値に対応するルーチンを呼び出す、というのをひたすら繰り返すだけです。
ひたすらルーチンを呼び出し続けるだけなので、遅いです。
命令の中には、IBM 701 に処理を戻す命令もあります。
なので、IBM 701 の命令で前処理を行い、SpeedCoding システムで浮動小数点計算を行い、終了後は IBM 701 命令で結果出力を行う、という使い方になります。
(判る人にだけ:Apple ][ の ROM にある、Sweet16 と全く同じような動作です)
まさかこれが「FORTRAN の前に作られていた言語」と言われるとは思いませんでした。
言語と言えなくはないですが、完全に機械語で、この時代なのでおそらくハンドアセンブル。
まぁ、どう捉えるかは人それぞれでもあるのですが、英語版 Wikipedia でも「世界初の高級言語」というような紹介をされていて、それはちょっとどうかと思う。
日本語版はその翻訳に過ぎないのですが、「世界初の高級言語」は流石に違うと思ったのか、「先に作られた言語」みたいにトーンダウンしてる。
ただ、SpeedCoding が FORTRAN に影響を与えているのは事実です。
SpeedCoding は、結局のところ機械語だったので「誰でも使える」とは言い難いものでした。
また、インタプリタ実行だったので、非常に遅く、機械の高速性を殺してしまうものでした。
そこで、FORTRAN は「英語のような文法」を持つ言語として設計され、下手なアセンブラプログラマが組むよりはずっと速い実行速度を持つコードを生成することが目標とされました。
最初の FORTRAN では、すでに局所最適化などのテクニックが駆使されています。
言語構造は実のところ、英語の文法に近づけただけで、IBM 704 の機械語の影響を強く受けています。
…つまるところ、アセンブラと大して変わらなかった、ということ。
でも、生成されるコードの品質に関しては、いきなり高いレベルを狙っているのです。
冒頭でリンクした FORTRAN の誕生経緯を書いた際に、「FORTRAN はよく出来ているから、最初の言語だとは思わなかった」と言っている方がいました。
多分、その方は 現代の FORTRAN や、FORTRAN の各種バージョンの中でも特に普及した FORTRAN 77 を想定していたのではないかな、と思います。
最初の FORTRAN は、「文法を変えただけのアセンブラ」と言う感じが残っているのですが、FORTRAN 77 の頃にはそのような部分は無くなっていて、よく出来た高級言語です。
でも、上に書いたような経緯で、最初の言語であるにもかかわらず、「過去の反省」が活かされてもいます。
最初の FORTRAN を知ったうえでの「よく出来ている」発言だったとすれば、その理由は上記のようなものでした、
最初の言語、ではありますが、過去のプログラムの反省を踏まえ、高いレベルで作り上げられていたのです。
同じテーマの日記(最近の一覧)
関連ページ
ジョン・バッカスの命日(2007)【日記 15/03/17】
ジョン・バッカスの命日(2007)【日記 15/03/17】
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |