BASIC

プログラミング言語 >>他のプログラミング言語 ■カテゴリ / ■テンプレート BASIC（ベーシック）は手続き型プログラミング言語のひとつ。 名前は「beginners' all-purpose symbolic instruction code」のバクロニムである。日本語では「初心者向け汎用記号命令コード」を意味する。 誕生したのが1964年であり、当時普及していたプログラミング言語FORTRANにいくつかの点で似ている。構文は、FORTRANの文法が基になっているとしばしば解説されている。 BASICはインタープリタ方式で動くものと、コンパイラ方式で動くものに大別できる。現時点[いつ?]では、構文の様式が大きく異なる2種類のBASICが存在している。構造化前のBASICと、構造化後のBASICである。 構造化されていないBASIC (Unstructured BASIC) 1970年代 - 1980年代のコンピュータ（マイクロコンピュータやパソコン）で初心者向け・教育用のプログラミング言語として、非常に広く使われたものである。行番号とGOTO文（大域ジャンプ）を用いる原始的なBASICであり、分岐やループでは常にジャンプ先の行番号を意識しなければならず、構造化プログラミングが不可能である。行番号とGOTOを用いたプログラミングは、まるでスパゲティが絡み合ったような複雑なコード（スパゲティプログラム）となりがちで、コードの再利用性が低いうえにバグを誘発しやすく、熟練したプログラマにとってもプログラムのデバッグや安全な機能拡張は困難だった。のちに構造化プログラミングに対応したPascalやC言語が登場・普及して比較されるようになると、BASICは激しい批判を浴びるようになり、実用的なプログラミング用途ではC言語などに負けて廃れていった。 構造化されたBASIC (Structured BASIC) 順次実行・選択・反復といった制御構造を利用する構造化プログラミングを実現できるように、行番号およびGOTO文を廃止したものである。構造化BASICとも呼ばれる。いくつかの流派で成立したが、特に1991 - 1993年頃に正式に規格として制定されたFull BASICの仕様は構造化がしっかりしてあり、他の点でも改良が加えられてある。このFull BASICの仕様とは互換性がないものの、別の構造化BASICとしての発展を遂げたVisual Basic（VB）をベースに、オブジェクト指向にも完全対応したモダンな言語のひとつとしてVisual Basic .NET（VB.NET）がある。 したがって両者はかなり異なっており、明確に区別して論じる必要がある。 構造化以前のBASICの行番号とGOTO文については、基本的な例を示しつつ#構造化以前のBASICの節で解説する。また、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）というものは現れないことになったのである。 史上初の市販のパーソナルコンピュータとされているのはMITS社のAltair 8800であり、1975年、このAltair 8800向けにハーバード大のビル・ゲイツ、ポール・アレン、モンティ・ダヴィドゥフの3人が（マイクロソフトという設立したての法人の名のもとに）Altair BASICを開発し、MITS社との契約のもと配布された。1976年4月11日にはスティーブ・ウォズニアックによって開発されたパーソナルコンピュータ・キットApple Iがアップル社から発売され、このマシンのために同じくウォズニアックが開発したen:Integer BASICが供給され（当初はデータレコーダのカセットテープの形で供給され、後に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で得られた苦い教訓が、後に開発されるさまざまな高級言語で活かされていくことになり、プログラミング言語で「方言」が乱立しないようにし、機種を超えてひとつのコンピュータプログラムが使えるようにする施策、「プラットフォーム・フリー」戦略へと繋がっていくことになる。[独自研究?] カーソル位置を指定するLOCATE文は、別の処理系ではCURSOR文 音楽を演奏するPLAY文、MUSIC文とそれらに記述されるMML 画面モードを指定するCONSOLE文 スプライト機能を使用する命令 VRAMと配列変数の内容をやりとりする命令 条件付きループを実現するWHILE〜WEND GOTO, GOSUB文の飛び先を指定するラベル CALL, CMD, SETなどで始まる命令文 初期のTiny BASICはともかくとしても、BASIC実装処理系のメイン・メモリの制限により言語仕様が極めて制限された実装が存在した。 数値型は整数型のみ、また数値演算は整数演算のみう 変数名は頭文字1文字または2文字程度しか認識しない 文字列の長さが限られる（255文字など） 配列の大きさ（添字の最大値）が限られる 処理プログラムの大きさや速度の制限を改善あるいは回避するテクニックを紹介する。いくつかは、ソースの読みやすさを犠牲にするようなテクニックでもあった。 プログラムの初めに全ての変数のデフォルトを整数だと宣言する（DEFINT A-Z）。これはきちんと%などを付けて整数変数として書いてあるプログラムでは意味がないし、小数演算があるプログラムなのにこれを書くとまともに動かなくなる。整数の範囲の演算しかしていないが、%を付けずに書かれているプログラムを後から改善する場合だけに意味のあるテクニック。 命令を省略形で書く（PRINT→?、LET A=B→A=B、REM→' など） ただし、中間コードを採用している処理系では、?と入力してもPRINTに展開されるので、結果は変わらない。また、REMを'と書くのはかえってサイズが増える。 余白やコメントを入れない NEXTの変数名を省略する（可能な処理系のみ） 一行に複数の文を詰め込んで（マルチステートメント）を使用して行の制限一杯に命令文を詰め込む よく使う変数は早めに確保する（実行時に毎回変数領域の先頭から検索されるため） よく呼び出すサブルーチンは先頭に配置する（同じような理由。なお、一度通過したGOTO/GOSUB命令のオペランドを内部で行番号からメモリアドレスに書き換える処理系ではあまり効果がない） キャラクタコードをバイナリと見立て、バイナリに相当するデータを直接プログラムに記述する 次のようなコンパイラがある。 BASCOM（マイクロソフト BASIC-80 CP/M用インタプリタ） MS-DOS用N88-BASICコンパイラ（日本電気 PC-9800シリーズ） F-BASIC386コンパイラ（富士通 FM TOWNS） MSXべーしっ君（アスキー MSX） 実行ファイルは生成しない X-BASICコンバーター（シャープ X68000） C言語に変換した上でのコンパイル FreeBASICコンパイラ（Microsoft Windows、Linux、DOSエクステンダ、Xbox） フリーでGPL形式の80386向けコンパイラで、現代向けに多数の機能追加が行われているが、QuickBASICとの互換性もある。 しかし、パソコンに内蔵または標準添付されていたインタプリタと違い、コンパイラは別売であったり、高価であったり、実行にはランタイムライブラリを必要であったりする場合があった。このことから、BASICインタプリタによる開発に習熟したユーザーは、より高速で柔軟なプログラムを求めて、機械語（アセンブリ言語）や、C言語などに移行していった。 また、コンパイラと称していても、実際はインタプリタとソースコードを同梱した実行ファイルを作るだけ、というものもある。中間表現と、そのインタプリタ、という構成のものもある。 急速に広まったBASICだが、構造化機能の無いBASICは教育に使うな、などとコンピュータサイエンティストの一部から酷評されたりもした。1975年にはすでに、エドガー・ダイクストラから激しく批判された"How do we tell truths that might hurt?"などが知られる。 行番号とGOTO文は特に激しく批判された。（構造化前の）BASICのIF文とGOTO文を組み合わせて使用する文（「IF .... THEN GOTO ...」）を頻発せざるを得ず、IF + GOTO文を増やすほどスパゲティプログラムになってしまう、ということはしばしば指摘された。 さらに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は、他のBASIC（ケメニーらは「ストリート」BASIC、と呼んだ）とは異なって既に1970年代後半から構造化などが進んでおり、ANSIでは新しい規格の策定も進んでいたが、これをパソコン向けにアレンジしたTrue BASICが、1984年に開発された（日本ではクレオから発売）。構造化の他、行列演算の機能など、学術的（特に数学的）な方面の拡張も特徴である。そしてTrue BASICとほぼ同一の構造化BASICであるFull BASICがISO/IEC 10279 (Information technology−Programming languages−Full BASIC) がINCITS/ISO/IEC JTC 1によって1991年に規格化された。また日本でもJISによる翻訳として、JIS X 3003-1993『電子計算機プログラム言語 Full BASIC (The Programming Language Full BASIC)』が1993年に規格化された。 Full BASICの主な特徴 構造化に対応する制御文を追加した（DO〜LOOP、DO WHILE〜LOOP WHILEなど） IF文が多行に渡るブロックIF（IF〜THEN〜ELSE〜ENDIF）も可能となった LETを省略できないようにした（True BASICではOPTION NOLETまたはNOLETを実行すると省略可能） スコープの概念を取り入れた 外部副プログラム（EXTERNAL SUB〜END SUB）や外部関数（EXTERNAL FUNCTION〜END FUNCTION）の中でローカル変数が使用できるようになった 副プログラムと関数は戻り値を戻すかどうかで区別される 再帰処理の実装が容易になった 計算精度や丸めの方法を規定した 配列の添字を1から始めるようにした（OPTION BASE命令で0から始まるようにすることも可能） 行列演算機能 構文のアドホックな所などを極力排除した 予約語を極力少なくした I/Oを直接操作するなどシステムに干渉する命令は持たないようにした（True BASICでは拡張ライブラリとして提供） グラフィック命令を規定した。なお、(0, 0) が、デフォルトでは、コンピュータ系に多い左上ではなく数学などで伝統的な左下である（変更できる。高機能なBASICに多かった、任意にスクリーンとウインドウのそれぞれの座標を設定できるタイプである） Minimal BASICの上位互換である パソコン向けのそれまでのBASICとは命令の互換性が低い サブルーチン（GOSUB〜RETURN）は規格として残ってはいるが、使用は推奨されない マイクロソフトはFull BASIC規格の策定には参加しなかったが、1985年にFull BASICに類した構造化や特徴を追加した独自規格のQuickBASICを発売した。これは自社のMS-DOS用のGW-BASICの上位互換で、コンパイラ並に動作を高速にした上にコンパイルもできるようにしたもので、Version4.5まで発売した後に1991年のVisual Basicへと繋がっていった。 QuickBASICとの互換性を考慮したフリーなBASICとしてQB64（英語版）やFreeBASICがある。 MS-DOS上で動作するGUI拡張環境として、1985年にMicrosoft Windows 1.0が登場し、のちに独立したオペレーティングシステム (OS) としても普及を始めた。GUIオペレーティング環境はコンピュータの操作に直感性をもたらしたが、Windows上で動作するGUIアプリケーションソフトウェアは、ボタンのような画面上に表示された視覚的なGUI部品（ウィジェット、コントロール）をユーザーがマウスで操作することに反応して動作する、イベント駆動型のプログラムである。Windowsアプリケーション向けのプログラミング言語や開発環境として、マイクロソフトはC/C++を用いた開発ツール（Microsoft C/C++、のちのMicrosoft Visual C++）だけでなく、構造化BASICを用いた開発ツールとして「Visual Basic」(VB) も提供した。VBは前述のQuickBASICから発展したもので、Rapid Application Development (RAD) 方式の本格的な統合開発環境 (IDE) でもあり、生産性と直感性に優れていた。 Windows自体はC/C++を使って開発されており、マイクロソフトの開発エンジニアたちはC/C++に慣れていたわけだが、それでもBASICを見捨てることはしなかった。 もともとビル・ゲイツはAltair 8800向けのAltair BASICを最初の製品としてビジネスの道を切り開き、その後も多数の自社BASICを開発してマイクロソフトを大きくしたので、マイクロソフト社はBASICとともに大きくなってきたわけであり、簡単にBASICを捨ててしまうような選択はしなかったのである。また、マーケティング的（商売的）に見てもこの判断は賢かった。既存ユーザが受け入れやすい選択肢を提供することで、ユーザが他社に逃げてしまうことを防いだわけである。 Visual Basicでは、業務用のソフトウェア、プロフェッショナル用のソフトウェアなども多数開発されるようになった。Visual Basicは旧BASICとは異なり、もはや「初心者用」でも「ホビー用」でもなかった。C言語やC++同様に、プロでもその気になればまともに使える言語になったのである。なお、C/C++は言語仕様上、そもそもGUIプログラミングや統合開発環境との親和性、コンパイル速度などに問題があった。プロパティなどの便利な機能をサポートし、またシンプルな言語仕様を持つVBのほうがGUIプログラミングに向いていた、という側面もある。VBは後発のDelphiやC++Builderの設計思想にも影響を与えている。 また、「PC/AT互換機とWindowsの組み合わせ」というプラットフォームが一般化したことで、1970年代や1980年代には起きていた「BASICの方言の乱立」の問題が解消されていくことになった。Windowsが走るマシンであれば、どのメーカーが製造したパソコンであろうが、MicrosoftのVisual Basicが「標準的なBasic」という位置づけになっていき、いわば「標準語」のようなものがひとつに定まったのである。ただしVisual Basicは、Windowsというプラットフォームに依存する言語、開発環境にすぎなかった。Windows以外のMacintoshやLinuxといったプラットフォームでは使えないものであった。 なお、VBのサブセットであり、アプリケーションを制御するためのドメイン固有言語・マクロ記述言語としてVisual Basic for Applications (VBA) も登場し、主にMicrosoft Office (MS Office) 向けに提供されている。Officeに統合開発環境が標準的に組み込まれており、専業のアプリケーション開発者以外の一般ユーザーにも利用可能であることからエンドユーザー・コンピューティングの普及に寄与し、事務作業の効率アップやプログラミングの入門にも使われることになり、入門者をプログラミングの世界にいざなう役割も担った。ただし、VBAのマクロ機能を悪用したコンピュータウイルスも出現し、利便性と引き換えにセキュリティホールの温床にもなったことから、Office 2007以降の既定のファイル形式ではVBAは使えなくなっており、また既定でVBAは無効化されている。 VBから発展したVB.NETは、C#とともに登場したモダンなオブジェクト指向言語であり、アプリケーションの開発および実行に.NET Framework環境を必要とする。のちにMonoや.NET Coreにも移植され、WindowsだけでなくLinuxやmacOSでも利用可能なクロスプラットフォームな言語となった。Xamarinを利用することでAndroidやiOSで動作するアプリケーションも開発することができる。 地位の低下 だが大学ではBASICの使用は構造化BASICも含めて減っていった。大学では、構造化言語の中でも、特定メーカーに依存せずプラットフォームを超えて使え、方言が乱立しなかったC言語を教えることが一般化した。また、特定のOSやCPUアーキテクチャに依存せず、無料で使えるJavaなどの洗練された後発言語の普及により、BASICは開発環境としては選択肢のひとつでしかなくなっていった。 なお、コンパイラで開発した場合、実行ファイルとは別に、巨大なランタイムライブラリが必要となる処理系が多い。このため配布に必要なファイルのサイズが大きくなり、敬遠されることもある。 もともとVB.NETは姉妹言語のC#やF#と比べて、新しい言語機能のサポートが遅れる傾向にあったが、マイクロソフトは2023年2月、VB.NETには今後新しい言語構文を追加せず、安定性に重きを置く方針であることを発表した。VB.NETのサポート自体は継続されるが、言語の進化は止まっている。 プログラミング言語の人気度 (popularity) を示す指標のひとつとしてTIOBEインデックスが存在する。この指標は実際の言語利用状況とはやや異なるが、2023年9月現在、PythonやC系統の言語が上位を独占する中、Visual Basicは一定の地位を維持している。TIOBEが発表した2021年11月のランキングでは、トップ10は上から順に、Python、C、Java、C++、C#、Visual Basic、JavaScript、アセンブリ言語、 SQL、PHPとなっていて、つまり2021年11月時点でVisual Basicは6位だった。一方、RedMonkによる2021年6月のランキングでは、VBは20位以内にも入っておらず圏外だった。 十進BASIC - 日本人数学者が開発した数値計算用FullBASIC 構造化ということを意識していなかったパソコン用の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もオブジェクト指向化が見受けられる。その代表例がVisual Basic .NETやREALbasicやActiveBasicやFreeBASIC等で、四者とも既に完全なオブジェクト指向言語になっていると言える。 構造化以前のBASICは、行番号とGOTO文があることが特徴のひとつである。 BASICのエッセンスを説明し簡単なプログラム例を示すために、BASICのステートメントとコマンドについて説明する。 本来のBASIC、ダートマスBASICではステートメントとコマンドを明確に区別する。ダートマスBASICのルールを説明する。 行番号を持ち、プログラム本文の中に書かれるコード行はステートメント（文、statement）と呼ぶ。 たとえば次のようなキーワード（予約語）から始まるものがステートメントである。 PRINT - 出力（印字）する。たとえば「PRINT A」と書くと、変数 A の値を画面などに出力する。 FORとNEXT - 両者を前後に組み合わせて使うことで、FORの文からNEXTの文までがループ（繰り返し処理）となる。 GOTO - 「GOTO <行番号>」という書式で、指定された行番号へジャンプする。 GOSUBおよびRETURN - 「GOSUB + <行番号>」という書式。GOSUB文で指定された行番号へジャンプするが、ジャンプ先で行番号の順に実行していき、RETURNというワードに到達するとジャンプ元の位置に戻る。 END - ダートマスBASICではプログラムの最終行に書かなければいけない。（実装によってはENDを書かないとコンピュータが暴走するものもあった。ENDを省略できる実装が次第に増えた。） 処理系に指示を与えるワード（プログラムの外の命令）はコマンド（命令、command）と呼ぶ。 たとえば次のようなワードである。 RUN - プログラムを実行する。 LIST - プログラムを行番号の小さいほうから順に、リスト状に画面に表示する。 SAVE - 現在のプログラムをストレージに保存する。 きわめてシンプルな例を挙げる。 画面に次のように入力したとする。 10 REM 5つ数える 20 FOR I = 1 TO 5 30 PRINT I 40 NEXT するとBASICの処理系は、行番号10から40までの文をプログラムとして扱う。次にRUNと入力し（すると「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 このように入力すると、行番号10の文は書き換えられ（つまり上書きされ、以前のものは消え）、20行目と30行目の間に行番号25の「 25 IF I = 3 THEN GOTO 40」が挿入された、とBASICの処理系は判断する。 そしてRUNと入力すると、やはり行番号10から実行し、出力は次のとおり。 1 2 4 5 高水準言語である。 BASICはFORTRANの影響を受けており、いくつか似た特徴がある。ALGOLを始祖とするPascalやC言語とは系統が大きく異なる。ただし、演算子のスタイルや、大文字と小文字を区別しないなどの点で、Pascalとの類似性は見られる。 ダートマスBASICはコンパイラだが、他のBASICはインタプリタとして実装された処理系が多い。 構造化以前のBASICでは、すべての行頭に行番号を必要とする。 基本的に先頭行（行番号が一番小さい行）から1行ずつ実行される。 GOTO文（GOTO <行番号>）があると、<行番号>で指定された行番号にジャンプしてその行を実行する。たとえば「GOTO 250」と書かれていたら、行番号250にジャンプする。行番号は、テレタイプ端末時代に処理系と一体の行指向テキストエディタで扱うのに便利であったので採用されてしまった。ジャンプ先をただの数字（行番号）で示すので、ある程度以上の行数を書くとGOTO文が増え、直観的には分かりづらい行だらけになる。アルファベットなども使って意味付けされた単語（ラベル）で行き先を指定するジャンプではないので、一行ずつ焦点を当てると、どういう意図で書かれたコードなのかが不明瞭な行ばかりになってしまう。また、通常ある程度以上の規模のプログラムは分岐判断が多数含まれるので、IFとGOTOを組み合わせた文を多数使うことになり、ある程度の行数以上のプログラムを書くとスパゲティプログラムになりやすい。だが現在[いつ?]でも互換性のために両者を残している処理系もある。ラベルを用いて「GOTO *LABEL」のように指定できる実装もある。 プログラム中の予約語（キーワード）にはステートメントやコマンドの他に関数がある。それらと同じ文字並びを変数名として使うことはできない。 文字列変数の内容等を除いて、大文字と小文字を区別しない。入力の時点で全て大文字に変換される処理系もあった。 算術演算子以外の記号は極力使わない。論理演算子はAND、OR、XOR、NOTである。括弧は演算の優先順位も、サブルーチンの引数も、配列もすべて「()」のみを用いる。ブロックも「{}」のような括弧ではなく「FOR文からNEXT文までの間」といった構文により指定する。 代入と比較はどちらも「=」である。代入はLET文（たとえば「LET A = 10」など）とするのが本来の書式だが、キーワード「LET」を省略した構文も許される方言ばかりになったので、結局「A = 1」のような、代入文なのか比較文なのか見た目の印象が非常に紛らわしいものばかりになり、バグ頻発の原因ともなった。 明示的な変数宣言を必要とせず、変数を使用し始めたところで宣言したものと解釈される。 使ったことのない変数を使うと変数が作られ、また中身は自動的に初期化される（数値型は0、文字列型は空文字列）。 ファーストクラスの型は数値型と文字列型である。数値は浮動小数点数だけのものもあるが、整数型などがあるものもある。文字列型の変数名は末尾に「$」を付ける、といった規則のものもある。 LEFT$, MID$, RIGHT$など、文字列操作関数もそれなりの数備えていることが多い。 編集環境を兼ねたコマンドラインインタプリタを持つものもある。（一種のシェルのようなもの。LISPのREPLとはやや異なる。） Webブラウザ上でBASICの動作をエミュレートするWebサイト・Webサービスが公開されている。手軽に最低限の雰囲気を理解することができる。 Quite BASIC (外部リンク) - ブラウザ上でBASICコードを書いてWeb上で実行できるサービス USO 800 BASIC (外部リンク) - N88-BASICのように利用可能なBASICコード実行サービス。Web上で動作し、サイトの外観も当時のN88-BASICさながらである。 構造化以前のBASICが動作していたコンピュータ実機の新品販売は、ほとんどは終了となっている。そのためインターネットオークションなどを利用して、中古品を入手するしかない。 ダートマスBASIC（1964年 - ） BASIC-PLUS（英語版）（1970年 - 。DECがPDP-11のタイムシェアリングシステムRSTS/E用に開発したものであり、1970年代から1980年代にかけて使われた） Tiny BASIC （1976年 - 。黎明期のマイコン用など） Apple 6K BASIC 別名Integer BASIC（英語版）（1976年 - 。スティーブ・ウォズニアックが独力でApple IやApple II用に開発したもの） Level I BASIC（英語版）（1977年 - 。TRS-80向けBASIC） Commodore BASIC（英語版） - コモドールPET 2001（1977年 - ）に搭載されていたBASIC 以下、シャープのBASICは「コモドール系」と呼ぶことも可能ではある S-BASIC - （1978年 -。シャープ MZ-80用BASIC。シャープ純正BASIC。MZ-80はCommodore PETの影響を受けておりBASICもPETに似ているが、それでもシャープが自力開発したもの。命令セットは互換性のため後継製品もそれに準拠して独自拡張した物となっている。 SP-5030 （1978年12月 -。MZ-80K, Cなど用BASIC。データレコーダ用のカセットテープで供給された）。「SP-5030」が言語の品番かカセットの品番かはやや曖昧。「MZ-80 SERIES BASIC解説」が付属した。 SB-5520 （MZ-80B用など） BASIC-S25 （シャープMZ-2500） BASIC LEVEL II他（SEGAのSC-3000/SG-1000等のためのBASIC） WICS （1981年-。MZ-80K及びMZ-80Bシリーズ用のBASICに極力似せた表記方法を採用した、インタープリタ兼コンパイラ 整数型プログラミング言語） Hu-BASIC （1982年 -） - シャープ MZ-80シリーズ用だが、ハドソン社が開発したものでMicrosoftのBASICに似せたもの。 en:BBC BASIC（1981年 - ） - イギリスのBBC Microに搭載されたBASIC。Locomotive Softwareが開発。 en:Locomotive BASIC（1984年 - ） - アムストラッドCPCなどに搭載されたBASIC。上述のBBC BASICをLocomotive Softwareが改良したもの。 G-BASIC （1982年 -。トミーぴゅう太用BASIC、命令語を日本語に置き換えてある。同機には別売のBASIC 1もあり） ※同機とは関係ない、マイクロソフト製の同名のBASICがある MW-BASIC （BASIC-09 OS-9用） BASIC-G （ソードのM5のBASIC、整数型しか使えないが高速だった。同機には実数用のBASIC-Fもあり） Casio Basic（CFX-9850G: 1996年 - 。カシオFPシリーズ用のBASICで10進演算による精度の高い計算を得意とした。8ビット用のC82-BASICと16ビット用C86-BASICがある） SHARP BASIC （ポケコン用のBASIC） X-BASIC （X68000のC言語ライクなBASIC、ハドソン製。） Altair BASIC（1975年 -。Altair 8800用。マイクロソフトの最初の製品であり、その後のMicrosoft BASICの起源となった。） MBASIC （CP/M用のBASIC） QuickBASIC （1985年 - 。Visual Basicの原型となった構造化BASIC） QBasic （QuickBASICの簡易版、Windows 95 / 98のCD-ROMに英語版が付属） Microsoft BASIC Professional Development System （QuickBASICの進化形で、標準でISAMデータベースが構築でき、MS-MASM、MS-C、Quick C、MS-FORTRAN等との言語混在開発が可能な、プロユースの構造化BASIC） Microsoft GW-BASIC - かつてMicrosoftが1983年頃出していたBASICで、2020年5月にオープンソース化された。ただし実行環境やバイナリは提供されていない。 MSX-BASIC （MSX用のマイクロソフトBASIC、スプライト機能などを拡張、N88などより原型に近い） N-BASIC （PC-8000シリーズなどのBASIC） N88-BASIC （PC-8800シリーズ（マイクロソフト製）、PC-9800シリーズ（日本電気製）のBASIC、PC-9800シリーズ用は別途コンパイラもあり） Apple 10K BASIC （Apple Computer製、Apple II+以降） BASCOM （CP/M用BASICコンパイラ） F-BASIC （FMシリーズのBASIC、富士通製） N80-BASIC （PC-8001mkIIなどのBASIC） N60-BASIC、N60m-BASIC、N66-BASIC、N66SR-BASIC （PC-6000シリーズ、PC-6600シリーズのBASIC） N100 BASIC （PC-100のBASIC） N82-BASIC （PC-8201のBASIC） Hu-BASIC （ハドソン製のマイクロソフト系命令セットのBASIC。固定のシステムをROMで持たないMZ-80Kで利用できるよう市販されたが、後にMZ-700やX1/turbo/turboZシリーズでは標準添付のシステムとなり、X1では名前を変えつつ標準のシステムとして最終機まで継承された） BASIC-M25 （シャープMZ-2500用の実装。コピーライトはシャープとなっているが、ハドソン製でもマイクロソフト製でも無い。日本語のラベルや、インデントのタブコード化、常駐プログラムとの併用など本体に合わせ高機能なBASICとなっている） BASIC-M28 （シャープMZ-2861） IchigoJam BASIC（IchigoJam用の実装。MSXの影響を強く受けているため、独自拡張を含むもののMSX-BASICのサブセットの様な命令セットとなっている） SONY BASIC（ソニーSMC-70、SMC-777/Cに搭載されたBASICインタープリタ、マイクロソフト系命令セットを備えているが、直接の関係はなく、ビー・ユー・ジー社（現ビー・ユー・ジーDMG森精機株式会社）が開発した） これらは命令セットの仕様が共通なだけで、必ずしもマイクロソフト製というわけではない。 すでに新品販売されていないゲーム機のBASICは以下のとおり。 ファミリーベーシック (NS-HuBASIC)（ファミコン、任天堂・シャープ・ハドソン共同開発） PCエンジンでべろBASIC（PCエンジン用開発ツール、徳間書店インターメディアが販売、ハドソン・日本電気ホームエレクトロニクス開発） GAME BASIC for SEGASATURN （セガサターン、MSX-BASICライク） BASIC STUDIO （PlayStation 2、アートディンク開発） プチコン・プチコンmkII (SmileBasic)（ニンテンドーDSi/DSi LL・3DS・New 3DS、JOEDOWN・スマイルブーム・ロケットスタジオ共同開発） プチコン3号 （ニンテンドー3DS販売終了、Newニンテンドー3DSも2020年9月16日に販売終了） 最近[いつ?]、復刻パソコン、つまり1980年代などのパソコンが、ほぼ以前どおりのシステム内容で（しかも端子類はHDMIやUSBに変更されていたり、SDメモリカード用スロットなども追加されていたりするなど、最近[いつ?]の仕様に改良されて）、新品で販売されるようになっている。それらのほとんどでBASICが動き、ユーザはBASICプログラミングを楽しむことができる。 en:Commodore BASIC（The C64（コモドール64のフルサイズ復刻機）、The C64 MINI（コモドール64のミニサイズ復刻機）などで動く） N-BASIC ver 1.1 （ハル研究所から販売されているPasocomMini PC-8001で動く） 現在、新品で販売されているパソコン上で動くBASIC マイクロソフトBASIC・ならびにその類似系 Visual Basic - マイクロソフト Visual Basic for Applications (VBA) Visual Basic .NET (VB.NET) Small Basic - マイクロソフト 99Basic（Windows用フリーウェア 国産） ActiveBasic（Windows用フリーウェア 国産） BASIC/98（Windows用 国産 N88-BASIC互換） - 有限会社電脳組 Xojo（旧:REALbasic）（Windows・Mac OS・Linux） Jabaco（英語版）（Visual Basicに似たコードでJRE上で動くソフトウェアを開発するコンパイラ） XBLite Android-Basic （Android用） FreeBASIC（QuickBASIC互換、コンパイラ型、GPL）（Windows・Linux・DOSエクステンダ・Xbox） QB64（英語版）（QuickBASIC互換） 独自系 PureBasic（マルチプラットフォーム、AmigaOS版はオープンソース） FutureBASIC（Mac OS、構文はQuickBASIC互換） BCX（GPLv2 + BCX例外ライセンスのオープンソースソフトウェア BASIC → C言語トランスレータでインラインC/C++およびアセンブリを扱えるなどの特徴を持つ） UBASIC（DOS用フリーウェア 多倍長演算に特化） DarkBASIC（ゲーム製作に特化したBASIC言語、Windows専用、特に3Dゲーム） GLBasic（GCCコンパイラを内部で利用するマルチプラットフォーム開発環境） Full BASIC系（規格準拠） True BASIC（英語版） - 公式サイト(外部リンク)（Full BASIC規格の原型、MS-DOS・Windows・Mac OS・UNIX、現在は英語版のみ、BASICを作ったジョン・ジョージ・ケメニーとトーマス・E・カーツ（英語版）によって作られたBASIC） 十進BASIC （JIS Full BASICに準拠、Windows・Linux・Mac OS用フリーウェア、英語名Decimal BASIC） Ultra BASIC - 株式会社ラネクシー 旧式構文系 Chipmunk Basic（Windows・Mac OS・UNIX用フリーウェア、インタプリタのみ） PC-BASIC (外部リンク)http://www.pc-basic.org/ (Windows・Mac OS・Linux・UNIX・GPL系・GW BASIC互換エミュレート機能搭載型インタープリター) Android OS上で動くBASIC、つまりAndroidスマートフォン群やAndroidタブレット群などで動くBASICは以下のとおり。 Android-Basic （Android用） Tiny BASIC v2 タートルグラフィックスを備えた Android 用 BASIC インタプリタ BASIC! 別名rfo-basic http://basic.amsstudio.jp/ X11-BASIC - Androidアプリ iOS上で動く（つまりiPhoneやiPadで動く）BASICは以下のとおり。 Hand BASIC - CBM Flavor BASIC-II 現在新品で販売されている（子供向けの）ゲーム機のBASIC プチコン4 (Nintendo Switch) FORTRAN