今日は、BASIC の生まれた日(1964)。
厳密に言えば、ちょっと違うかな。
いわゆる「BASIC」としてなじまれた環境が、最初に動くようになった日と言うべきか。
1964年の早いうちに、ダートマス大学で、BASIC という「言語処理系」は完成していたのだそうです。
パンチカードにプログラムを打ち込み、バッチ処理でコンパイルを行い、コンパイル済みのバイナリを実行できる環境として。
この点では、FORTRAN とそれほど変わりませんね。
でも、BASIC の目標点はそこではなかった。
この、バッチ処理コンパイル版の BASIC を元として、「対話処理」が組み込まれ、はじめて稼働したのが今日、5月1日とされているのです。
対話型というのはどういうことか?
パンチカードにプログラムを打ち込むのではなくて、テレタイプライターでタイプすると、即座に動作するのです。
PRINT 2 + 2
と打ち込むと、その瞬間に「PRINT 2 + 2」をコンパイルし、完成したバイナリを即座に実行します。
結果、「4」とタイプライターに出力されます。
この時点では、まだ BASIC 言語の処理部分はコンパイラのままでした。
入力が数字から始まる場合…つまり
10 PRINT 2 + 2
という形式である場合、一連のプログラムの、行番号「10」番目の断片だと見做し、内部メモリに格納します。
どのような順序でプログラムを入力しても、内部では行番号順に並び替えられます。
同じ行番号を上書きすれば前のものは消去されますし、行番号だけ入れれば、その行自体が削除されます。
そして、RUN という命令が実行されると、即座にプログラム全体がコンパイルされ、動き始めます。
80年代の BASIC を使った人にも、BASIC に行番号は必須だと思っている人が多いのだけど、そんなことは無いです。
行番号は、あくまでも「編集に」必要なだけ。
もちろん、GOTO などで行番号使いますよ。
だけど、これだってラベルが使える BASIC 環境だってあった。
行番号でジャンプする FORTRAN でも、とび先以外の行には行番号を付けなくていい。
行番号がなくたって何とかなる。
でも、BASIC が作られた当時はテレタイプで、ディスプレイはありません。カーソルを動かすことはできないのです。
その環境でプログラムをしようと思ったら、編集する位置をすぐに指定できる方法が必要。
行番号は、主にそのためのものです。
#FORTRAN はパンチカードなので、正しく並べることを前提に、行番号が不要だっただけ。
でも、この行番号による編集が、BASIC を大成功に導いたように思います。
行番号があれば、それを内部メモリに格納する。
行番号が無ければ、直接実行する。
この単純な規則で、意識せずにモードを使い分けられます。
ちょっと実験したいときは直接命令を動かしてみて、動作を確認してからプログラムに組み込む。
BASIC は元々「プログラムの学習用」でしたから、こうした、コンピューターになじめる環境全体を作り出すことが重要だったのです。
ダートマス大学で BASIC はどんどん改良されます。
ダートマス BASIC は、行列を扱う計算も出来ました。
この当時は、ダートマス BASIC を元に、別実装された BASIC でも行列計算が当たり前についています。
1970年代には、低価格で大ヒットした PDP-8 にも BASIC が作られていますし、PDP-11 ではグラフィックが扱えるものや、命令を非常に増やしたものなど、多数の BASIC が作られています。
そして、コンピューターの時間貸しサービスでよく使われた PDP-10 にも、BASIC はありました。
これらのマニュアルを読む限りでは、内部的にはダートマス BASIC と同じように「即時コンパイル」だったようです。
コマンドによって、コンパイル結果をファイルに書き出したりもできました。
BASIC で作っていても、コンパイル結果は BASIC 環境無しに動かすことができます。
PDP-10 で BASIC を学んだ人と言えば…後にマイクロソフトを設立する、ビル・ゲイツもその一人でした。
彼は中学校にあった PDP-10 の時間貸し端末を使って BASIC を遊び倒し…一人で、1年間分の「時間貸し」の料金をあっという間に使い果たし、怒られています。
仕方がないので、時間貸しサービスを「ハッキング」して無料で使って、サービス提供会社にまた怒られ、接続を無料にする条件として、その会社でソフトのバグを見つけるアルバイトを始めます。
#その会社では、PDP-10 を DEC から購入した時に「バグが見つかり続けている間は支払いを猶予する」という条件を貰っていたのだそうです。
ゲイツたちが各種ソフトのバグを探してくれれば金を払わないで済む、というメリットがありました。
この頃、ビル・ゲイツは BASIC 自体を自分でも作ってみているのだそうです。
そして、それが Altair 8800 発売時に、作ってもいないのに「BASIC を作った」とハッタリをかました自信へと繋がります。
Altair 8800 は…実際には入手困難だったので、互換機の IMSAI 8080 などは、多くの人にとって「初めて触るコンピューター」でした。
しかし、これらのコンピューターは2進数でプログラムを組むようになっていて、非常に使いにくいものでした。
ゲイツは Altair の製造元である MITS 社に BASIC を提供しながら、「マイクロソフト」名義の会社を設立して、同じ BASIC を IMSAI などにも販売しました。
マイクロソフトが作った BASIC は、コンパイラではなく、インタプリタでした。
命令をひとつづつ解釈し、その命令を動作させるためのサブルーチンにジャンプします。
コンパイラと違って動作が遅いのですが、マイクロソフト BASIC の場合は、プログラム格納時点で命令解釈を半分終わらせることで、高速に動作するようにしてありました。
#字句解析までは終わらせ、単語単位で「中間コード」に変換しています。
マイクロソフトの BASIC では、行列演算の機能が削除されていました。
それ以降…家庭用パソコン向けの BASIC では、みんな Altair 8800 の BASIC に倣ったようで、行列演算機能は基本的にないものとして扱われました。
一方で、マイクロソフトの BASIC では、「?」は PRINT と同じ中間コードに変換されるようになっていました。
このため PRINT 2 + 2 の代わりに ? 2 + 2 と書くことができます。
これが…地味に便利です。
ちょっとした計算をしたいときに、? の1文字だけで、後は計算式を入れれば結果を教えてくれるのですから。
現状では ? は Altair 8800 用の BASIC に存在したのは確認されていますが、マイクロソフト以前にあったのかどうかは不明です。
(PDP の BASIC には存在していません)
現在でも、BASIC には根強い人気があり、マイクロソフトも Visual BASIC を作り続けていますし、プチコンや IchigoJAM のような環境もあります。
僕自身は今では BASIC を使いたいとはあまり思わないのですが、初心者や、サンデープログラマ向けとしては今でも良い環境だと思ってます。
構造化なんて、職業プログラマの発想で、最初は難しすぎてついてけないよ。
最初は BASIC で初めて、必要なら後で「卒業」すればいい。
もちろん、卒業しないで万年初心者だってかまわないと思います。
仕事では使えないかもしれないけど、十分楽しい言語。
まぁ、「後で卒業すればいい」という意味では、BASIC にもこだわらないのだけどね。
子供には Scratch 薦めてます。
#Scratch も、コマンド単位でダイレクト実行できたりする「対話環境」で、BASIC と考え方が非常に似ています。
もちろん、初心者向けに何が重要かを研究したうえで作っているのだろうけどね。
同じテーマの日記(最近の一覧)
関連ページ
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |