BASICはダートマス大学にて開発された手続き型言語です。本来は、TSS処理用にFortranより易しくプログラミングできるように開発されました。BASICの由来はBeginner's All purpose Symbolic Instruction Codeの略であると言われています。
当時のBASICはコンパイラ(人間が書いたプログラム命令文すべてをあらかじめ機械語に翻訳しておいて、実行時には翻訳済みの機械語を実行する方式の言語処理系の総称)で、マトリクス(行列)計算用にMAT文を装備するなど、Fortranによってされるべき科学技術分野の計算プロセスをより簡易に作成・実行できるように設計されたものでした。
しかし、プログラム言語としては、パソコン用として知られるようになりました。初期の頃のパソコンはエンドユーザー用のプログラム言語として標準でBASIC処理系を搭載しているものが多かったのです。ただ、これらのBASIC処理系は、ほぼ例外なしにインタプリタ(人間が書いたプログラム命令文を実行時に一つ一つ、逐次に翻訳した上で指示を伝える方式の言語処理系の総称)でした。また、MAT命令なども装備しておりませんでした。それゆえ、BASICはインタプリタ型言語だというふうに認識されるようになっていますし、インタプリタ型ゆえ、処理が遅いという誤解すら生じておりますが、本来はコンパイラ型言語で、科学技術分野の計算用に設計されたものなのです。
当時のBASICの言語仕様の特徴としては、インタプリタが行番号によって管理するラインエディタを装備していることや、goto命令のラベルとしてその行番号は利用できるということ、複合文の概念はなくてIF文やFOR文などの構文においては行単位で制御されること、基本データ型として数値データ、文字列データの2種類あること、独立したサブルーチンの概念がないこと、多くのBASICでは固有のハードウェアにアクセスするために専用の命令文を装備していることなどが列挙できます。そしてこれらの特徴は、BASICの言語としての欠点となっていることでもあります。
その後、BASICのベンダーにより拡張が繰り返され、その結果、現在ではBASICはその本来の姿をとどめていません。行番号は不要となり、独立したサブルーチンがあり、そのサブルーチンへ引数を渡すことができ、データ型をユーザーが定義することもできるようになってきています。そのうえ、インタプリタでなしに、コンパイラとして動作するものがあります。MicrosoftのQuick BasicやVisual Basic、True Basicなどが、これにあたります。ただ、これらはコンパイラといっても似非コンパイラですが...。(コンパイラはソースプログラムを機械語に翻訳せず、中間語に翻訳するにとどめ、実行時にライブラリからその中間語に相当する命令を読み出し実行する、つまりそれ自体はネイティブコードを作成しないので)ネイティブコードを生成するコンパイラよりは遅いですが、インタプリタよりかは速いのです。それに最近の高速なコンピュータを使用すれば、簡単なプログラムはどれで作っても変わりありませんし。(円周率を1000万桁計算するんだとかいう場合をのぞく)
かつてNECより、PC−8801というパソコンが発売されました。当時はパソコンはディスクドライブという高価な機械はほとんど使われず、データの保存用にカセットテープを使っていたことを覚えております。従ってDOSはほとんど使われず(当時、Z80マシン用にCP/M80というDOSがあったが、家庭用の場合、ディスクドライブを購入することさえなく、また購入したとしても、ほとんどDOSを使うメリットがなかった:私の家にもディスクドライブはありましたが、現役で動いている間はDOSを入れることはありませんでした。)、PC88の電源をいれると決まって立ち上がるのが「N88BASIC」でした。PC88を含め、当時のパソコンはほとんど標準でBASICをROMに搭載しており、電源を入れるだけでBASICが立ち上がったのです。そのうえ、当時のアプリはほとんどといっていいほど、BASIC上で動いていました。そのN88BASICは、N88BASIC(86)として、インテル8086系のPC98にもROMに搭載され、PC9801DAまではディスクBASICも標準でついていました。ディスクBASICは残念ながら、PC9801FAより、付属しなくなりました。ただ、ROM BASICは互換性のため搭載されていました。他にN88BASICにはMS−DOS版というのがあります。MS−DOS上で動作するようにしたN88BASICです。
N88BASICは、比較的「古い」時代のBASICを踏襲していますので、上に述べたような(行番号不要とか独立サブルーチン定義などの)機能はもっておりません。オーソドックスなインタプリタ型BASICです。ただし、MS−DOS版はコンパイラがついており、DOS上で動作可能なEXEコードを生成できます。
高校で教えられている、数学A・B・Cや、大学入試センター試験の数学A・BではこのN88BASICを使用することを前提にしてプログラムが書いてあります。
Quick Basic, Visual Basic
Quick Basicや、Visual Basicは、Microsoftから発売された新種のBASICです。Quick BasicはMS−DOS上で動作するEXEコードを生成します。また、Visual BasicはMS−Windows上で動作するEXEコードを生成します。最近では、Windowsアプリケーションの開発にVisual Basicが、その手軽さから、よく使われています。Windowsアプリを作成するのは結構面倒くさい(ただし、Delphi,C++ Builderを使用する場合をのぞく)ものですが、このVisual Basicによって楽にアプリが作れます。欠点としては似非コンパイラなので、ネイティブコードを作成するDelphiなどより多少処理が遅いことです。
ファミリーBASIC・サターンBASIC
これらはパソコンではなく、ゲーム専用機によるBASICです。以前はファミコンでプログラミングができるというファミリーBASICがありましたが、ついにセガサターンでプログラミングできるというサターンBASICが発売になるようです。これらのBASICはゲーム専用機という性格上、ゲーム製作に使えるようにいろいろ工夫をしぼってあるようで、今度のサターンBASICではポリゴン処理ができるようです。私は「ファミコン」も「サターン」ももっておりません。当然ながらこれらの上で動作する「BASIC」についても所持していません。したがってこれらのBASICの文法説明はしません。今時ファミリーBASICについて説明しても意味がないと思いますし。サターンBASICの文法説明は、要望が多かったら対処するかもしれません。必要ないと思いますけど。
BASICは何をするためにあるのか
コンピュータは、洗濯機などの家電とは異なり、スイッチオンですぐ自分の思い通りになるというわけではありません。コンピュータを思い通りに動かすには、命令を与えてやる必要があります。その思い通りに動かすための一連の命令を、プログラムといいます。
ところで、コンピュータは直接には電圧の高低に起因する0か1かの2進数しか判断できません。そのためコンピュータが理解できるように2進数で表記した命令を機械語といいます。この機械語によって直接プログラムをつくることはもちろんのこと可能です。実際、一昔前まではそのようなこともありました。ですが、コンピュータのための機械語であるがゆえに、人間には(直感的に見て)わかりづらいものとなる上に、高度なハードウェアの知識が必要とされます。そのうえ、コンピュータのCPUメーカーによって機械語は異なります。
機械語を少しでもわかりやすく、そしてプログラムしやすくしようとした結果、アセンブリ言語が考え出されました。機械語は特定の命令に対して、2進数表記の数字を与えています。それに対してアセンブリ言語では特定の命令に対して、その命令を短い英語文字列で表記し直したものです。ですが、このアセンブリ言語はやはり機械語と同じく、CPUメーカーなどによって命令が異なってくるのです。つまり機種依存性が高くて、生産性が低いのです。
そこで機種依存しない、つまりは移植しやすい言語が考え出されました。C言語とか、パスカル、フォートラン、コボル、そしてBASICです。これらを高級言語といいます。高級言語はアセンブリ言語や機械語と異なり、機種依存性が低く、我々が通常に話す言語に近い形式で(英語だけどね)命令が決めてあるので、理解しやすいのです。
インタプリタ/コンパイラ
高級言語で作成されたプログラムを機械語に翻訳する際、一行ずつ解釈して翻訳しながら実行していくか、一括して翻訳してしまってから実行するかの違いです。前者がインタプリタで後者がコンパイラと呼ばれます。当然、実行速度はコンパイラの方が速いです。BASICは歴史の節で述べたとおり、当初、ダートマス大学でフォートランをしのぐ言語としてコンパイラ型で開発されました。最初からBASICはインタプリタ型で開発されたと勘違いなさってるかたもいらっしゃるようですが、ほんとはコンパイラ型で開発されたのです。