BASIC

BASIC（ベーシック）は手続き型プログラミング言語のひとつ。
名前は「」（「初心者向け汎用記号命令コード」を意味する）のバクロニムである。
概要.
誕生したのが1964年であり、当時普及していたプログラミング言語FORTRANにいくつかの点で似ている。構文は、FORTRANの文法が基になっているとしばしば解説されている。
BASICはインタープリタ方式で動くものと、コンパイラ方式で動くものに大別できる。現時点では、構文の様式が大きく異なる2種類のBASICが存在している。構造化前のBASICと、構造化後のBASICである。
したがって両者はかなり異なっており、しっかり区別して論じる必要がある。
構造化以前のBASICの行番号とGOTO文については、基本的な例を示しつつ#構造化以前のベーシックの節で解説する。また、BASICの基本的な予約語や、ステートメントとコマンドの区別（ステートメントはPRINT, FOR NEXT, IFなど、コマンドはRUN, LIST, SAVEなど）についても、同節で解説する。
最初のBASICは、1964年、米国ダートマス大学で、数学者ジョン・ケメニー（1926年-1992年）とトーマス・カーツ（1928年 - ）がもともと教育目的を想定して開発したものである。このBASICを「ダートマスBASIC」という。行番号の使用や構文は、当時主流だった言語FORTRANの影響を受けている。彼らはこれで金儲けをする気はなく特許なども取得せず、今風に言うと「パブリックドメイン」のようなものにしようと考えていたので普及することになった。このダートマスBASICはコンパイラだった。BASICはGEとの提携を経て大学の外にも普及してゆくことになり、1970年代後半や1980年代のマイコン、パーソナルコンピュータなどの多くの機種で次々と採用され、普及していった。1970年代後半～1980年代のBASICのほとんどはインタプリタ方式でマザーボード上のROM（Read Only Memory）にあらかじめ書き込まれた状態で供給されていた。一部のBASICはインタプリタ方式でもROMに書き込まれておらず補助記憶装置から読み込まれたり（たとえば日本ではシャープのMZ-80シリーズなど）、あるいはコンパイラ方式のBASICで高速で実行できるものも開発・供給された。
歴史.
1964年、米国ダートマス大学にて、数学者ジョン・ケメニー（1926年-1992年）とトーマス・カーツ（1928年 - ）により、教育用などを目的としてダートマスBASICが開発された。これは同時期にともに開発された、タイムシェアリングシステムDTSS上のラインエディタ（テレタイプ端末環境）で利用されるよう設計されていた。
BASICは、GEとの提携を経て、学外にも普及した。ダートマス大学のオリジナルはコンパイラだったが、パソコンなどの商用版では基本機能を最小限にしたうえでインタプリタとして実装されることが多く、独自の発展を遂げた。
詳しく説明すると、もっとも初期に使用したのはゼネラル・エレクトリック（GE）であり、GEはGE-225というマシンをダートマス大学に納入していたのである。
BASICの方言（異仕様）は、1970年ころ、GEがBASICの第4版を使っているころに現れ始めた。新しいバージョンを待たず、ver.5を用いたマシンをGEがリリースしたころからである。ダートマス大のケメニーとカーツの2人が「BASIC the Sixth（BASIC 第六版）」をリリースした1年後くらいに、ズレが生じはじめた。当時のBASICの異バージョンはGordon Eubanks（シマンテック社のCEO）によるもので、彼は1970年にBASIC-Cを開発した。（なお、BASIC-Eは現在のJavaのような技術を用いており、命令文は一種の中間コードに変換された後に機械語に変換されるものである。）Eubanksも彼の開発したBASIC-Eについては（ダートマス大の2人同様に）法的に保護せず、次のCBASICでそのような措置をとった。CBASICは彼の会社 Compiler Systems社から販売された。あまりにも次々とBASICの異バージョンが現れるので、ANSIも1974年にBASICの標準化の必要性を感じ始めた。ANSI内に標準化委員会が立ちあがり、BASICの2つの標準、つまり当時その委員会で「ミニマルBASIC（minimal BASIC）」つまり最小のBASICと呼ばれたものと、もう一方は「スタンダード BASIC（Standard BASIC）」と呼ばれたものを作成しようと取り組んだ。だがBASICの標準化は難しく、その委員会が長年かけて「標準化」の仕事をやっと完了したころには、とうにBASICは世界中で（さまざまな機種で、異仕様で、とっくにROMなどに実装されて）広く使われてしまっていた。そのようなわけで、（実際上）標準BASIC（Standard BASIC）というものは現れないことになったのである。
8ビットパソコンの普及とBASIC.
史上初の市販のパーソナルコンピュータとされているのはMITS社のAltair 8800であり、1975年、このAltair 8800向けにハーバード大のビル・ゲイツ、ポール・アレン、モンティ・ダヴィドゥフの3人が（マイクロソフトという設立したての法人の名のもとに）Altair BASICを開発し、MITS社との契約のもと配布された。1976年4月11日にはスティーブ・ウォズニアックによって開発されたパーソナルコンピュータ・キットApple Iがアップル社から発売され、このマシンのために同じくウォズニアックが開発したが供給され（当初はデータレコーダのカセットテープの形で供給され、後にApple IIが発売されてからROM版も供給された）、翌1977年6月にはキットタイプではない完成品タイプのApple IIが発売となり、それにもやはりINTEGER BASICが、だが今度は最初からROMに書き込まれた形で搭載された。
1970年代末から1980年代初頭にかけての一時期は、少数のエレクトロニクス好きのホビースト（趣味的にやっている人々）たちは、8ビットCPUのコンピュータをキットなどから自作しその上でTiny BASICを動かしたり、その上でスタートレックなどのゲームを動かすことなどを楽しんでいた。
だが大多数の人々はコンピュータを実務に使いたいと感じており、キットではなく最初から完成品の、動作することが確実なコンピュータを求めていた。メーカー側はそうした要望に応えてターンキーシステム（キット品ではない、最初から動く完成品）を開発しそれにBASICインタプリタをROMに書き込んだ形で搭載するようになり、BASICは一気に当時のマイクロコンピュータ（パーソナルコンピュータ）の標準言語の地位を獲得した。この時に搭載されたBASICインタプリタはほとんどがマイクロソフト製で、同社躍進のきっかけとなった。また、マイクロソフト製BASICは中間コードを使用する構造になっており、汎用機を再現した極めてエミュレータに近いランタイム形式の実行環境でもあったため、当時の互換性が皆無なコンピュータ事情の中でも、スクリプト自体の移植は容易だった。
その後、（MS-DOS発表以前の）パソコンに、操作を提供するのにも使われ、しばしばROM-BASICとしてハードウェアに組み込まれた。電源投入後にエディタ込みで利用できることから、現在における、シェル、インタフェースとしての役割ももち、ローダなどの役割も担った。入力の効率化のため、省略形式での入力や、1980年代後半には、ラベル、インデントへの内部的な対応、C言語への橋渡し、日本では漢字の利用など、様々な機種ごとの独自の発展を遂げた。当時のPCの処理速度は遅いので、処理の高速化が必要な部分はデータ形式でアセンブリ言語による処理を呼び出すなどの手法もとられた。
1980年代後半から1990年代前半ころにはC言語がパーソナルコンピュータのユーザにも少しずつ知られるようになり、早く知り、早くCコンパイラを入手した人から順に、（構造化以前の）BASICの代わりにC言語を使うことが増えていった。
一方で1990年代などでもプログラミングの専門家ではない数学者が、あいかわらず行番号を使用する数値計算用のBASICを開発するなどということ（UBASIC）も行われつづけた。
「方言」の乱立.
BASICは1970年代後半から1980年代にかけて、当時黎明期にあり、次々と各社が製造に乗り出したパーソナルコンピュータ（マイクロコンピュータ）の各機種に続々と搭載されてゆくことになり、パーソナルコンピュータ業界の発展にも貢献した。
だが、前述の「標準化できなかった経緯」の節で説明したように、BASICを最初に開発したダートマス大の2人は今で言う「パブリックドメイン」でいいと漠然と考えていて（つまり、うかつなことに、権利を確保しておいて世の中のBASICの仕様をコントロールしようともせず）、また標準化団体のANSIも後手にまわってしまったので、BASICには「方言」が乱立する状況になってしまった。（関係者を弁護するなら、最初から標準化をしておかないと普及してゆくプログラミング言語に一体どのようなことが起きてしまうかということについて、開発者の2人や当時のANSIに限らず、当時はまだ誰も経験しておらず、そもそも誰にも用心・警戒心が無かった。）
マイクロコンピュータやパーソナルコンピュータに標準搭載されたBASICは、たいてい各メーカーのひとつひとつの機種ごとに独自拡張が行われた（おもに画面操作やI/Oの直接操作などについて、その機種でしか通用しない、独自の仕様が次々と導入された）。コモドール社のPET 2001のCommodore BASICに類似したシャープのS-BASIC、SEGAのベーシックカートリッジ、次第にシェアを増やしたマイクロソフト製のBASIC（MBASIC、BASICA、G-BASIC、GW-BASICの移植版）や、その命令体系を引き継ぎ実装したものである、F-BASIC、Hu-BASIC、カタカナで表現するG-BASIC（前述のマイクロソフトの物とは異なる）以外にも、C言語を意識したX-BASICなど、さまざまなBASICを各社が独自に開発した。
この結果、「あるパソコンのBASICで書かれたプログラムは、他のパソコンではそのままでは動かすことができない」という、残念な状態になってしまった。たとえBASICの開発会社が同じでも、別の機種では動かない状況になってしまったのである。BASICを用いていては、開発者はせっかく苦労してコンピュータプログラムを開発しても、たいていはわずか1機種でしか動かず、また企業がソフトウェアをビジネス目的で開発・販売しようとする場合でもBASICでプログラムを開発しては、わずか1機種のユーザにしか売れず、それではあまり儲からないので、はじめから開発を躊躇しがちになる、という状況だったのである。
プログラミング言語で最初から標準化をしておかないと、どのような残念な状況になってしまうか、ということを人類は初めて経験したわけで、BASICで得られた苦い教訓が、後に開発されるさまざまな高級言語で活かされてゆくことになり、プログラミング言語で「方言」が乱立しないようにし、機種を超えてひとつのコンピュータプログラムが使えるようにする施策、「プラットフォーム・フリー」戦略へと繋がってゆくことになる。
メイン・メモリの制限による処理系の実装例.
初期のTiny BASICはともかくとしても、BASIC実装処理系のメイン・メモリの制限により言語仕様が極めて制限された実装が存在した。
中間コードサイズを小さくしたり処理を速くする、機種依存性のあるテクニックの例.
処理プログラムの大きさや速度の制限を改善あるいは回避するテクニックを紹介する。いくつかは、ソースの読みやすさを犠牲にするようなテクニックでもあった。
コンパイラ.
次のようなコンパイラがある。
しかし、パソコンに内蔵または標準添付されていたインタプリタと違い、コンパイラは別売であったり、高価であったり、実行にはランタイムライブラリを必要であったりする場合があった。このことから、BASICインタプリタによる開発に習熟したユーザーは、より高速で柔軟なプログラムを求めて、機械語（アセンブリ言語）や、C言語などに移行していった。
また、コンパイラと称していても、実際はインタプリタとソースコードを同梱した実行ファイルを作るだけ、というものもある。中間表現と、そのインタプリタ、という構成のものもある。
行番号とGOTO文への批判.
急速に広まったBASICだが、構造化機能の無いBASICは教育に使うな、などとコンピュータサイエンティストの一部から酷評されたりもした。1975年にはすでに、エドガー・ダイクストラから激しく批判されたなどが知られる。
行番号とGOTO文は特に激しく批判された。（構造化前の）BASICのIF文とGOTO文を組み合わせて使用する文（「IF ... THEN GOTO ...」）を頻発せざるをえず、IF + GOTO文を増やすほどスパゲティプログラムになってしまう、ということはしばしば指摘された。
実はBASICには他にも、局所変数が無いなど問題は多い（つまり、今風に言えば「グローバル変数しかない」や「ローカル変数が無い」というようなこと）。
「基本BASIC」という標準化、およびその失敗.
BASICの標準化が望まれたが、マイコン・パソコンの急激な普及で標準化は後手後手にまわり、各メーカーの独自拡張はすでに各機種のROMに書き込まれているわけで後から書き換えるわけにもいかず、各メーカーは競合関係にあり自社のものを標準に採用して他社のものは排除してくれと考えるわけで、後手にまわってしまった標準化団体も一部のメーカーだけを優遇するわけにもいかず、ともかく後手にまわってしまった標準化というのは非常に難しいので、
結局、「どの機種の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化の際に改訂として同じ番号を使うという形で旧規格として消滅した。
すでに多数の重要な機能は、各機種のBASICの「方言」として実装されてしまっていて後からそれを削るわけにもいかず、基本以外の高度な部分の標準化はされず乱立状態は放置されたので、結局、各社は高度な機能は方言で実装しつづけたわけで、実際上はBASICの標準化は失敗したままに終わった。
日本では1990年代後半から、高等学校や大学入試センター試験の数学に、標準化された基本BASICの範囲で書かれたプログラミングが扱われるようになった。つまり、「基本BASIC」は実機では「有名無実」だが、（特定メーカーに依らないので）試験問題に使うのに無難な題材として使われる。
構造化BASIC.
Full BASIC.
ダートマスBASICは、他のBASIC（ケメニーらは「ストリート」BASIC、と呼んだ）とは異なって既に1970年代後半から構造化などが進んでおり、ANSIでは新しい規格の策定も進んでいたが、これをパソコン向けにアレンジしたTrue BASICが、1984年に開発された（日本ではクレオから発売）。構造化の他、行列演算の機能など、学術的（特に数学的）な方面の拡張も特徴である。そしてTrue BASICとほぼ同一の構造化BASICであるFull BASICがISO/IEC 10279 (Information technology−Programming languages −Full BASIC)が1991年に INCITS/ISO/IEC JTC 1によって、JIS は JIS X 3003-1993『電子計算機プログラム言語 Full BASIC , The Programming Language Full BASIC』 が1993年に規格化された。
QuickBASIC.
マイクロソフトはFull BASIC規格の策定には参加しなかったが、1985年にFull BASICに類した構造化や特徴を追加した独自規格のQuickBASICを発売した。これは自社のMS-DOS用のGW-BASICの上位互換で、コンパイラ並に動作を高速にした上にコンパイルも出来るようにしたもので、Version4.5まで発売した後に1991年のVisual Basicへと繋がっていった。
QuickBASIC との互換性を考慮したフリーなBASICとしてやFreeBASICがある。
Windowsの普及とVisual Basicの普及.
Windowsが普及すると、WindowsのGUIプログラミング（つまり画面上の視覚的なボタンをマウスで操作することに反応して動作するプログラムを作成すること）をするためのプログラミング言語や開発環境が必要になるわけだが、マイクロソフトは構造化された言語を用いる RAD方式の開発環境を用意し、C++を用いる開発ツール（Visual C++）だけでなく、BASICを用いる開発ツール（Visual Basic）も提供した。Visual Basic (VB)はWindowsの開発環境、プログラミング言語の選択肢のひとつとなった。
Windows自体はC++やCで開発されたもので、マイクロソフトの開発エンジニアたちはC++やCに慣れていたわけだが、それでもBASICを見捨てることはしなかった。
もともとビル・ゲイツはAltair 8800向けのAltair BASICを最初の製品としてビジネスの道を切り開き、その後も多数の自社BASICを開発してマイクロソフトを大きくしたので、マイクロソフト社はBASICとともに大きくなってきたわけであり、簡単にBASICを捨ててしまうような選択はしなかったのである。また、マーケティング的（商売的）に見てもこの判断は賢かった。既存ユーザが受け入れやすい選択肢を提供することで、ユーザが他社に逃げてしまうことを防いだわけである。
Visual Basicでは、業務用のソフトウェア、プロフェッショナル用のソフトウェアなども多数開発されるようになった。Visual Basicは旧BASICとは異なり、もはや「初心者用」でも「ホビー用」でもなかった。C言語やC++同様に、プロでもその気になればまともに使える言語になったのである。
また、「PC/AT互換機とWindowsの組み合わせ」というプラットフォームが一般化したことで、1970年代や1980年代には起きていた「BASICの方言の乱立」の問題が解消されてゆくことになった。Windowsが走るマシンであれば、どのメーカーが製造したパソコンであろうが、MicrosoftのVisual Basicが「標準的なBasic」という位置づけになってゆき、いわば「標準語」のようなものがひとつに定まったのである。ただしVisual Basicは、Windowsというプラットフォームに依存する言語、開発環境にすぎなかった。Windowsプラットフォーム以外では使えないものであり、MacintoshやLinuxというプラットフォームでは使えないものであったのである。こんな状態では、プラットフォーム・フリーつまりプラットフォームを超えてWindowsでもMacintoshでもLinuxでも使えるJavaに比べて劣っていることは明らかで、Visual Basicが次第にJavaに負けてゆく原因のひとつとなった。
なお、VBのサブセットVisual Basic for Applications (VBA)もMS Office向けに提供され、事務仕事の効率アップやプログラミングの入門に使われることになり入門者をプログラミングの世界にいざなう役割も担った。
だが大学ではBASICの使用は構造化BASICも含めて減っていった。大学では、構造化言語の中でも、特定メーカーに依存せずプラットフォームを超えて使え、方言が乱立しなかったC言語を教えることが一般化した。また、やはりプラットフォーム・フリーで機種を超えて使え無料で使えるJavaなどの洗練された後発言語の普及により、Basicは開発環境としては選択肢のひとつでしかなくなり、数十年の時をかけて、順位（開発言語として使われる率の順位）が下がってきた。TIOBEが発表した2021年11月のプログラミング言語ランキングでは、トップ10は上から順に、Python、C、Java、C++、C#、Visual Basic、JavaScript、アセンブリ言語、 SQL、PHPとなっていて、つまり2021年11月時点でVisual Basicは6位だった。
なお、コンパイラで開発した場合、実行ファイルとは別に、巨大なランタイムライブラリが必要となる処理系が多い。このため配布に必要なファイルのサイズが大きくなり、敬遠されることもある。
その他の現代化BASIC.
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を発売した。
オブジェクト指向とBASIC.
現在、BASICもオブジェクト指向化が見受けられる。その代表例がVisual Basic.NETやREALbasicやActiveBasicやFreeBASIC等で、四者とも既に完全なオブジェクト指向言語になっていると言える。
構造化以前のベーシック.
構造化以前のBASICは、行番号とGOTO命令があることが特徴のひとつである。
ステートメントとコマンド.
BASICのエッセンスを説明し簡単なプログラム例を示すために、とりあえずBASICのステートメントとコマンドについて説明する。
本来のBASIC、ダートマスBASICではステートメントとコマンドをはっきり区別する。ダートマスBASICのルールを説明する。
プログラムの文の文中に書くキーワード（予約語）はステートメント（statement）と言う。
処理系に指示を与えるワード（プログラムの外の命令）はコマンド（命令）という。
プログラム例、実行法、出力例.
きわめてシンプルな例を挙げる。
画面に次のように入力したとする。
 10 REM 5つ数える
 20 FOR I = 1 TO 5
 30 PRINT I
 40 NEXT
するとBASICの処理系は、行番号10から40までの文をプログラムとして扱う。次にcodice_47と入力し（すると「40 NEXT」の次の行に「RUN」と表示され）リターンキーなどを押すと、行番号10の行すなわち「10 REM 5つ数える」から順に実行され、行番号20から行番号40まではループとして扱い5回繰り返す。この場合の出力は次のとおり。
 1
 2
 3
 4
 5
なお、「REM」はステートメントであり、ソースコードを読む人のための注釈文（英:remark）の文頭に置かれる。REMで始まる行はプログラムの実行結果に何ら影響を与えない。
また、前述のプログラムに編集を加えたい場合は、続いて例えば次のように入力する。
 10 REM 5つ数える(“3”だけ飛ばす)
 25 IF I = 3 THEN GOTO 40
このように入力すると、行番号codice_48の文は書き換えられ（つまり上書きされ、以前のものは消え）、20行目と30行目の間に行番号25の「 25 IF I = 3 THEN GOTO 40」が挿入された、とBASICの処理系は判断する。 そしてRUNと入力すると、やはり行番号10から実行し、出力は次のとおり。
 1
 2
 4
 5
具体例.
Web上で動くBASIC.
当百科事典の読者で一度もBASICに触れたことが無い人が、とりあえず最低限でも雰囲気を理解するためにはWeb版（ブラウザで試せるもの）が一番手軽なので、それから紹介する。
構造化以前のBASICの具体例.
構造化以前のBASICが動いていたマシンの新品販売はほとんどは終了となっている。とはいえ、ありとあらゆる機種は中古で入手可能で、たとえばeBay、メルカリ、ヤフオクなどで広く流通しているので、今日でも入手して、現在も目の前で動くBASICとして使うことができる。
ゲーム機.
すでに新品販売されていないゲーム機のBASICは以下のとおり。
現在販売されているマシンで動くBASIC.
現在新品で販売されている復刻機のBASIC.
最近、復刻パソコン、つまり1980年代などのパソコンが、ほぼ以前どおりのシステム内容で（しかも端子類はHDMIやUSBに変更したり、SDメモリ用スロットなども加えるなど、最近の仕様に改良されて）、新品で販売されるようになっている。それらのほとんどでBASICが動き、ユーザはBASICプログラミングを楽しむことができ、それらを差別する理由は全く無いので、それらについても記述する。
現行パソコンで動くBASIC.
現在、新品で販売されているパソコン上で動くBASIC
Android OS用のBASIC.
Android OS上で動くBASIC、つまりスマホOS世界シェアNo.1のAndroidスマートフォン群やAndroidタブレット群などで動くBASICは以下のとおり。
iOS用のBASIC.
iOS上で動く（つまりiPhoneやiPadで動く）BASICは以下のとおり。
現行ゲーム機などのBASIC.
現在新品で販売されている（子供向けの）ゲーム機のBASIC