BASIC

概要

いくつかの点でFORTRANに似ている。構文は、FORTRANの文法が基になっているとしばしば解説されている。初心者向けのプログラミング言語として、1970年代以降のコンピュータ（特にパソコン）で広く使われた。標準規格であるFull BASICの仕様は、よく知られているBASICとは異なり構造化などがきちんとしており、また Microsoft Visual Basic .NET の仕様はよく知られているBASICとは全く異なりむしろFull BASICに近い、現代における有力な言語環境のひとつである。

プログラム例と出力例

画面に次のように入力したとする。
 10 REM 5つ数える 20 FOR I = 1 TO 5 30 PRINT I 40 NEXT RUN
RUN命令を入力すると、それ以前に入力されたプログラムが実行される。この場合の出力は次のとおり。
1
2
3
4
5
また、プログラムに編集を加えたい場合、続いて例えば次のように入力する。
 10 REM 5つ数える(“3”だけ飛ばす) 25 IF I = 3 THEN GOTO 40 RUN
このように入力すると、10で始まる行が書き換えられ、20行目と30行目の間に25行目が挿入される。この場合の出力は次のとおり。
1
2
4
5

歴史

1964年、米国ダートマス大学にて、数学者ジョン・ケメニー（1926年-1992年）とトーマス・カーツ（1928年-）により、教育用などを目的としてダートマスBASICが開発された。これは同時期にともに開発された、タイムシェアリングシステムDTSS上のラインエディタ（テレタイプ端末環境）で利用されるよう設計されていた。
BASICは、GEとの提携を経て、学外にも普及した。ダートマス大学のオリジナルはコンパイラだったが（ただし、完全オンメモリ動作・1パスという、きわめて軽く動作するものであり、言語仕様もそのような「軽い」コンパイルのために設計されている）パソコンなどの商用版では基本機能を最小限にしたうえでインタプリタとして実装されることが多く、独自の発展を遂げた。

8ビットパソコンの普及とBASIC

1970年代末から1980年代初頭にかけて、8ビットCPUを使った自作コンピュータでTiny BASICを動かし、その上でゲームを実行させる（スタートレックゲーム等）のがホビーストの目標となった。
同時に、メーカー製のターンキーシステムにBASICインタプリタがROMの形で搭載されはじめ、一気に当時のマイコンにおける標準言語の立場を獲得した。この時に搭載されたBASICインタプリタはほとんどがマイクロソフト製で、同社躍進のきっかけとなった。また、マイクロソフト製BASICは、中間コードを使用する構造になっており、また汎用機を再現した極めてエミュレータに近いランタイム形式の実行環境だったため、当時の互換性が皆無なコンピュータ事情の中でも、スクリプト自体の移植は容易だった。
その後、（MS-DOS発表以前の）パソコンに、操作を提供するのにも使われ、しばしばROM-BASICとしてハードウェアに組み込まれた。
電源投入後にエディタ込みで利用できることから、現在における、シェル、インタフェースとしての役割ももち、ローダなどの役割も担った。
入力の効率化のため、省略形式での入力や、1980年代後半には、漢字の利用や、ラベル、インデントへの内部的な対応、C言語への橋渡しなど、様々な機種ごとの独自の発展を遂げた。
他の言語の進化に伴いBASICはあくまで初心者向けの言語でありプロにとっては論外のものということになった。しかし一方でプログラミングの専門家以外の人がプログラミングをするのにBASICが重宝されることも依然多い。例えばUBASICや十進BASICはいずれも数学者が開発したものである。
また、当時のPCの処理速度から、処理の高速化が必要な部分はデータ形式でアセンブリ言語による処理を呼び出すなどの手法もとられた。

互換性とBASIC

各メーカーのパソコンに標準搭載されたBASICは、機種ごとに画面操作やI/O直接操作などの独自拡張が行われた。マイクロソフト製（MS-BASIC、BASICA、G-BASIC、GW-BASICの移植版）のものや、その命令体系を引継ぎ実装したものである、F-BASIC、Hu-BASIC、カタカナで表現するG-BASIC（前述のマイクロソフトの物とは異なる）、PETに由来するS-BASIC、SEGAのベーシックカートリッジ、Cを意識したX-BASICなど各社が独自にBASICを開発し、いわゆる「方言」が生まれた。この結果、たとえBASICのメーカーが同じでも「あるパソコンで作ったBASICプログラムは、他のパソコンではそのままでは動かすことができない」ことの方がずっと多かった。
もっとも当時は群雄割拠の時代でもあり、特に市販ソフトが満足に出なくなったパソコンにおいては、BASICは重要な役割を果たした。

構造化とBASIC

急速に広まったBASICだが、構造化機能の無いBASICは教育に使うな、などとコンピュータサイエンティストの一部から酷評されたりもした。BASIC批判の急先鋒としてはエドガー・ダイクストラの1975年の発言などが知られる（Apple IIなどのパソコンが普及する以前の発言であることに注意）。
局所変数が無いことなど問題は多いが、しばしばGOTOのような見た目にわかりやすい事柄ばかりが取り上げられがちである。

基本BASIC

BASICの標準化が望まれたが、マイコンの急激な発展と、各メーカーの独自拡張が魅力であったという事情により、結局どの機種のBASICでも変わりが無いようなごく基本的な機能に絞った仕様が標準として制定された。ANSI X3.60-1978「American National Standard for the Programming Language Minimal BASIC」は、日本では JIS C 6207-1982「電子計算機プログラム言語 基本BASIC」として規格化された。制定直後にJISの分類の再編があり、電気電子のCから情報のXに移動してJIS X 3003となったが、次節のFull BASICのJIS化の際に改訂として同じ番号を使うという形で旧規格として消滅した。
日本では1990年代後半から、高等学校や大学入試センター試験の数学に、標準化された基本BASICの範囲で書かれたプログラミングが扱われるようになった。

QuickBASIC

マイクロソフトはFull BASIC規格の策定には参加しなかったが、1985年にFull BASICに類した構造化や特徴を追加した独自規格のQuickBASICを発売した。これは自社のMS-DOS用のGW-BASICの上位互換で、コンパイラ並に動作を高速にした上にコンパイルも出来るようにしたもので、Version4.5まで発売した後に1991年のVisual Basicへと繋がっていった。
QuickBASIC との互換性を考慮したフリーなBASICとしてQB64やFreeBASICがある。

RATBAS

構造化ということを意識していなかったパソコン用のROM/Disk-Basic環境で、構造化プログラムを記述するために作られたプリプロセッサである。アスキーの書籍の形（アスキー書籍編集部編著「構造化BASIC RATBASのすすめ」 (ISBN 978-4-87148-152-6) ）で、1985年に公開された。
これは、独自の構造化された構文で記述されたソースプログラムを処理し、行番号やGOTO文を使うROM/Disk-Basicに変換するプログラムで、すべてBasicで記述されていた。RATBASという名前は構造化FortranのRatforなどに倣ったものである。
RATBASは、スタンドアローンのBasicプログラムと、μ-UXの外部コマンドとして作成されたサブセット版がある。μ-UXとは、年刊AhSKI!の1984年号に掲載された、Disk-Basicで記述されたUnix風のオペレーティング環境であるUni+を拡張したものである。

その他

海外ではボーランドが独自にALGOL風の拡張を施したTurbo Basicを発売した。

GUI時代とBASIC

近年ではマイクロソフトの独自拡張によるRAD環境Visual Basic (VB) や、MS Officeなどで動作するそのサブセットVisual Basic for Applications (VBA)がWindowsにおける代表的なプログラミング言語のひとつとして広く利用されている。もっともVisual Basicは、GUIに特化したRAD環境として大幅に拡張が施され、元のBASIC言語とは、かけ離れてしまっている。
BASICは依然として初心者向けの言語ではあるが、パソコンに添付されることはなくなった。プログラムの入門でもBASICを使わず、最初からC言語などで教える教育機関も多い。無料で使えるJavaなどの、洗練された後発言語の普及により、開発環境としては選択肢の一つでしかなくなった。
また、コンパイラで開発した場合、実行ファイルとは別に、巨大なランタイムライブラリが必要となる処理系が多い。このため配布に必要なファイルのサイズが大きくなり、敬遠されることがある。それでもBASICは、依然として使われているのも事実である。

オブジェクト指向とBASIC

現在、BASICもオブジェクト指向化が見受けられる。その代表例がVisual Basic.NETやREALbasicやActiveBasicやFreeBASIC等で、四者とも既に完全なオブジェクト指向言語になっていると言える。