ダートマス
BASICは、1960年代初頭にアメリカ合衆国の
ダートマス大学で、ジョン・ケメニー教授とトーマス・カーツ教授を中心に開発された
プログラミング言語BASICの草分けとなる処理系です。その名称は開発された大学に由来します。この言語は、当時の多くのコンピュータシステムと異なり、利用者がコンピュータと直接対話しながらプログラミングを行えるよう設計された、初期の対話型
プログラミング言語の一つです。
開発にあたっては、
ダートマス大学で稼働していた時分割システム(DTSS: Dartmouth Time Sharing System)の一部として位置づけられました。設計思想としては、プログラムを機械語に翻訳する
コンパイラがコンピュータの主記憶(オンメモリ)上で効率良く動作し、かつプログラムのソースコードを一度読み込むだけで変換を完了する「1パスコンパイル」を可能にすることを目指しました。これにより、ユーザーが書いたプログラムは迅速にコンパイルされ、即座に実行することができました。この素早い応答性は、あたかもプログラムを一行ずつ解釈・実行する
インタプリタを使っているかのような感覚をユーザーに与え、プログラミング学習の敷居を大きく下げました。
歴史
ダートマス大学では、数年間にわたってこの
BASIC処理系の改良が重ねられ、いくつかのバージョンが発表されました。
プログラム
コンパイラの開発は、基盤となるDTSSの開発と並行して進められました。最初の
BASIC処理系は、1964年の早い段階で完成しましたが、これは対話型システムがまだ実用段階ではなかったため、
パンチカードを使ってプログラムを入力する標準的な
バッチ処理環境で利用されました。この初期バージョンは「Card
BASIC」とも呼ばれました。後続のバージョンと同様に、Card
BASICの
実装もケメニーとカーツ両教授の指導のもと、学部学生のチームによって行われました。
一般ユーザーが初めて対話型の
BASICを利用できるようになったのは、1964年6月のことです。その後も開発は継続され、1964年10月には第2版、1966年に第3版、1969年に第4版、1970年に第5版、1971年に第6版、そして最後のバージョンとなる第7版が1979年にリリースされました。
特に、対話型バージョンの歴史的な瞬間として、1964年5月1日午前4時(
東部標準時)にジョン・ケメニーとジョン・マクゲシーがDTSSの端末から初めて
BASICプログラムの実行に成功したことが挙げられます。最初のプログラムが具体的にどのような内容だったかについては諸説ありますが、最も単純な例として `PRINT 2 + 2` という1行のみのプログラムであったという説や、素数を探索する「
エラトステネスの篩」を
実装したものであったという説などが伝えられています。
各バージョンでは機能強化が図られました。
第2版:`PRINT` 文での出力項目の区切りにセミコロンを使用する機能や、配列の添え字にゼロを使えるようになりました。
第3版:端末からデータを直接入力する `INPUT` 文、強力な行列演算を行う `MAT` 文、`DATA` 文から読み込むデータを最初に戻す `RESTORE` 文が追加されました。
第4版:文字列を操作する機能と文字列を格納する変数(文字列変数)が導入されました。
第5版:プログラムから外部ファイルにアクセスし、操作する機能が追加されました。
1960年代末には、
ゼネラル・エレクトリック(GE)が開発したGE版
BASICが、ダートマス
BASICから派生し、広く普及し始めました。これは、DTSSプロジェクトでGE製のハードウェアが使用されていたことが関係しています。
1970年代に入ると、1971年9月にリリースされた第6版では、複数のプログラムファイルに分割して、それぞれを個別にコンパイルできる(引数付きプロシージャ)機能が追加されました。この第6版は、後の様々な
BASIC方言の基盤となりました。1976年には、スティーブ・ガーランドが
構造化プログラミングの要素を取り入れたS
BASICを設計しました。S
BASICは、ソースコードを第6版ダートマス
BASICのコードに変換するプリ
コンパイラとして
実装され、その構文は後のANSI Full
BASIC標準の基礎となりました。
ダートマス大学での開発は、ケメニーとカーツによって1979年にリリースされた第7版をもって一区切りとなりました。その後、両教授は大学を離れ、ANSI Full
BASIC標準に準拠した商用製品であるTrue
BASICを開発・販売しました。
ユーザーインターフェース
ダートマス
BASICは、現代でいうところの
統合開発環境(IDE)の初期の
実装と見なすことができます。ユーザーはコマンドラインインターフェースを通じてシステムと対話しました。当時主流だった
テレタイプ端末での利用を想定しており、独自の編集方式を採用していました。ユーザーが入力する行の先頭に行番号をつけると、それはプログラムの一部として扱われ、プログラムに追加されるか、既にある同じ行番号の内容を置き換えました。一方、行番号をつけずに入力された内容は、即座に実行される「命令(コマンド)」として解釈されました。また、行番号だけを入力すると、その番号のプログラム行が削除される仕組みでした。当時のダートマス
BASICでは、プログラム中に記述されるものを「文(ステートメント)」、対話的に入力されすぐに実行されるものを「命令(コマンド)」として明確に区別していましたが、この区分は後の多くの
BASICインタプリタでは曖昧になっていきました。
ユーザーが利用できる代表的なコマンドには、システムへのログイン(`HELLO`)やログオフ(`BYE`)、
BASICモードの開始(`
BASIC`)、新しいプログラムの作成(`NEW`)、既存プログラムの読み込み(`OLD`)、プログラムリストの表示(`LIST`)、プログラムの保存(`SAVE`)や削除(`UNSAVE`)、保存されているプログラムの一覧表示(`CATALOG`)、プログラム内容の消去(`SCRATCH`)、プログラム名の変更(`RENAME`)、プログラムの実行(`RUN`)、実行中の停止(`STOP`)などがありました。これらのコマンドの一部は、DTSSシステム共通のもので、
BASIC以外の言語(
ALGOLやFORTRANなど)でも使用されました。
言語機能
最初の対話型バージョンから、既に基本的なプログラミングに必要な機能が
実装されていました。一部の演算子やキーワードの設計には、当時のFORTRAN IIや
ALGOL 60といった他の主要言語の影響が見られます。
ダートマス
BASICで利用できた主な「文(ステートメント)」は以下の通りです。
`DEF`: 1行の関数を定義します。
`DIM`: 配列の大きさを宣言します。
`END`: プログラムの終わりを示します。
`STOP`: プログラムの実行を途中で停止させます。
`FOR ... TO ... STEP` と `NEXT`: ループ処理を記述します。
`GOSUB` と `RETURN`: サブルーチン(プログラムの一部を呼び出して実行し、元の場所に戻る機能)を利用します。
`GOTO`: プログラムの指定した行に無条件でジャンプします。
`IF ... THEN`: 条件分岐を行います。
`LET` または `=`: 式の計算結果を変数に代入します。
`PRINT`: 計算結果や文字列を画面に出力します。
`DATA` と `READ`: プログラム内に静的なデータを保持し、それを読み込みます。
`REM`: プログラムの説明や注釈(コメント)を記述します。
変数は基本的に浮動小数点数を扱いました。変数名としては、アルファベット1文字(AからZ)と、アルファベット1文字の後ろに数字1文字が続く形(A0からZ9まで)が使用でき、合計で286個の変数が利用可能でした。配列名はアルファベット1文字に限定されますが、`DIM` 文で大きさを指定しない場合でもデフォルトで10要素(添え字1から10)を持つ配列として使用できました。
組み込み関数としては、絶対値(`ABS`)、逆正接(`ATN`)、余弦(`COS`)、指数関数(`EXP`)、整数値(`INT`)、自然対数(`LOG`)、乱数(`RND`)、正弦(`SIN`)、平方根(`SQR`)、正接(`TAN`)などが用意されていました。
ダートマス
BASICは、その設計思想と対話的な操作性により、コンピュータサイエンスの教育に革命をもたらし、その後の多くの
BASIC処理系や開発環境に大きな影響を与えた画期的なシステムでした。