BASIC

プログラミング言語 >>他のプログラミング言語 ■カテゴリ / ■テンプレート BASIC（ベーシック）は手続き型プログラミング言語のひとつ。 名前は「beginner's all-purpose symbolic instruction code」（「初心者向け汎用記号命令コード」を意味する）のバクロニムである。 いくつかの点でFORTRANに似ている。構文は、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 歴史的な経緯から、FORTRANやパソコンではC言語と比較されることが多い。 高水準言語である。 （ダートマスBASICはコンパイルしているが）インタプリタとして実装された処理系が多い。 編集環境を兼ねた一種のシェルのようなコマンドラインインタプリタを持つものも多いが、LISPのread-eval-print loop（英語版）（REPL）のように洗練されたものではない。 古いBASICではすべての行頭に行番号を必要とし、GOTO文などの飛び先は行番号で指定する。行番号は、テレタイプ端末時代に処理系と一体の行指向テキストエディタで扱うのに便利であった。現在でも互換性のために両者を残している処理系もある。 本来は、RUNなどのように、プログラム外から処理系に指示を与えるものはコマンド（命令）、FORなどのようにプログラム中のものはステートメント（文）、と、本来は（ダートマスBASICでは）明確な区別があったが、次第に混同されていった。 プログラム中の予約語（キーワード）には文の他に関数がある。それらと同じ名前を変数に使うことはできない（Tiny BASIC等では変数は一文字といったものも多い）。 文字列変数の内容等を除いて、大文字と小文字を区別しない。入力の時点で全て大文字に変換される処理系もあった。 算術演算子以外の記号は極力使わない。論理演算子はAND、OR、XOR、NOTである。括弧は演算の優先順位も、関数の引数も、配列もすべて「()」のみを用いる。ブロックも「{}」のような括弧ではなく「FOR文からNEXT文までの間」といった構文により指定する。 代入と比較はどちらも「=」である。代入はLET文とするのが本来の形だが（文は全てキーワードから始まる、という規則により）、「A = 1」のような、キーワード「LET」を省略した代入の構文が好まれた。 ファーストクラスの型は数値型と文字列型である。数値は浮動小数点数だけのものもあるが、整数型などがあるものもある。文字列型の変数名は末尾に「$」を付ける、といった規則のものもある。 LEFT$, MID$, RIGHT$など、文字列操作関数が豊富なことが多い。 明示的な変数宣言を必要とせず、変数を使用し始めたところで宣言したものと解釈される。 使ったことのない変数を使うと勝手に変数が作られ、また中身は自動的に初期化される（数値型は0、文字列型は空文字列）。 プログラムは先頭行から実行される。 1964年、米国ダートマス大学にて、数学者ジョン・ケメニー（1926年-1992年）とトーマス・カーツ（1928年-）により、教育用などを目的としてダートマスBASICが開発された。これは同時期にともに開発された、タイムシェアリングシステムDTSS上のラインエディタ（テレタイプ端末環境）で利用されるよう設計されていた。 BASICは、GEとの提携を経て、学外にも普及した。ダートマス大学のオリジナルはコンパイラだったが（ただし、完全オンメモリ動作・1パスという、きわめて軽く動作するものであり、言語仕様もそのような「軽い」コンパイルのために設計されている）パソコンなどの商用版では基本機能を最小限にしたうえでインタプリタとして実装されることが多く、独自の発展を遂げた。 1970年代末から1980年代初頭にかけて、8ビットCPUを使った自作コンピュータでTiny BASICを動かし、その上でゲームを実行させる（スタートレックゲーム等）のがホビーストの目標となった。 同時に、メーカー製のターンキーシステムにBASICインタプリタがROMの形で搭載されはじめ、一気に当時のマイコンにおける標準言語の立場を獲得した。この時に搭載されたBASICインタプリタはほとんどがマイクロソフト製で、同社躍進のきっかけとなった。また、マイクロソフト製BASICは、中間コードを使用する構造になっており、また汎用機を再現した極めてエミュレータに近いランタイム形式の実行環境だったため、当時の互換性が皆無なコンピュータ事情の中でも、スクリプト自体の移植は容易だった。 その後、（MS-DOS発表以前の）パソコンに、操作を提供するのにも使われ、しばしばROM-BASICとしてハードウェアに組み込まれた。 電源投入後にエディタ込みで利用できることから、現在における、シェル、インタフェースとしての役割ももち、ローダなどの役割も担った。 入力の効率化のため、省略形式での入力や、1980年代後半には、漢字の利用や、ラベル、インデントへの内部的な対応、C言語への橋渡しなど、様々な機種ごとの独自の発展を遂げた。 他の言語の進化に伴いBASICはあくまで初心者向けの言語でありプロにとっては論外のものということになった。しかし一方でプログラミングの専門家以外の人がプログラミングをするのにBASICが重宝されることも依然多い。例えばUBASICや十進BASICはいずれも数学者が開発したものである。 また、当時のPCの処理速度から、処理の高速化が必要な部分はデータ形式でアセンブリ言語による処理を呼び出すなどの手法もとられた。 各メーカーのパソコンに標準搭載された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は重要な役割を果たした。 カーソル位置を指定する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向けコンパイラで現代向けに多数の機能（GUIアプリケーション作成やオブジェクト指向プログラミング機構の搭載OpenGL、SDL等多数のライブラリを使用可能）追加が行われているがQuickBASICとの互換性も有る しかし、パソコンに内蔵または標準添付されていたインタプリタと違い、コンパイラは別売であったり、高価であったり、実行にはランタイムライブラリを必要であったりする場合があった。このことから、BASICインタプリタによる開発に習熟したユーザーは、より高速で柔軟なプログラムを求めて、機械語（アセンブリ言語）や、C言語などに移行していった。 また、コンパイラと称していても、実際はインタプリタとソースコードを同梱した実行ファイルを作るだけ、というものもある。中間表現と、そのインタプリタ、という構成のものもある。 急速に広まったBASICだが、構造化機能の無いBASICは教育に使うな、などとコンピュータサイエンティストの一部から酷評されたりもした。BASIC批判の急先鋒としてはエドガー・ダイクストラの1975年の発言などが知られる（Apple IIなどのパソコンが普及する以前の発言であることに注意）。 局所変数が無いことなど問題は多いが、しばしばGOTOのような見た目にわかりやすい事柄ばかりが取り上げられがちである。 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の範囲で書かれたプログラミングが扱われるようになった。 ダートマス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年に規格化された。 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の上位互換である 使用は推奨されないが、サブルーチン（GOSUB〜RETURN）も規格としては残っている パソコン向けのそれまでのBASICとは命令の互換性が低い マイクロソフトはFull BASIC規格の策定には参加しなかったが、1985年にFull BASICに類した構造化や特徴を追加した独自規格のQuickBASICを発売した。これは自社のMS-DOS用のGW-BASICの上位互換で、コンパイラ並に動作を高速にした上にコンパイルも出来るようにしたもので、Version4.5まで発売した後に1991年のVisual Basicへと繋がっていった。 QuickBASIC との互換性を考慮したフリーなBASICとしてQB64（英語版）やFreeBASICがある。 構造化ということを意識していなかったパソコン用の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を発売した。 近年ではマイクロソフトの独自拡張によるRAD環境Visual Basic (VB) や、MS Officeなどで動作するそのサブセットVisual Basic for Applications (VBA)がWindowsにおける代表的なプログラミング言語のひとつとして広く利用されている。もっともVisual Basicは、GUIに特化したRAD環境として大幅に拡張が施され、元のBASIC言語とは、かけ離れてしまっている。 BASICは依然として初心者向けの言語ではあるが、パソコンに添付されることはなくなった。プログラムの入門でもBASICを使わず、最初からC言語などで教える教育機関も多い。無料で使えるJavaなどの、洗練された後発言語の普及により、開発環境としては選択肢の一つでしかなくなった。 また、コンパイラで開発した場合、実行ファイルとは別に、巨大なランタイムライブラリが必要となる処理系が多い。このため配布に必要なファイルのサイズが大きくなり、敬遠されることがある。それでもBASICは、依然として使われているのも事実である。 現在、BASICもオブジェクト指向化が見受けられる。その代表例がVisual Basic.NETやREALbasicやActiveBasicやFreeBASIC等で、四者とも既に完全なオブジェクト指向言語になっていると言える。 Visual Basic - マイクロソフト Visual Basic for Applications (VBA) Visual Basic.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互換) FutureBASIC （Mac OS、構文はQuickBASIC互換） BCX（GPLv2 + BCX例外ライセンスのオープンソースソフトウェア BASIC → C言語トランスレータでインラインC/C++およびアセンブリを扱えるなどの特徴を持つ） UBASIC （DOS用フリーウェア 多倍長演算に特化） DarkBASIC （ゲーム製作に特化したBASIC言語、Windows専用、特に3Dゲーム） GLBasic （GCCコンパイラを内部で利用するマルチプラットフォーム開発環境） True BASIC - (外部リンク)（Full BASIC規格の原型、MS-DOS・Windows・Mac OS・UNIX、現在は英語版のみ） 十進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互換エミュレート機能搭載型インタープリター) BASIC! 別名rfo-basic http://basic.amsstudio.jp/ X11-BASIC - Androidアプリ Hand BASIC - CBM Flavor　 BASIC-II　 ファミリーベーシック (NS-HuBASIC)（ファミコン、任天堂・シャープ・ハドソン共同開発） PCエンジンでべろBASIC（PCエンジン用開発ツール、徳間書店インターメディアが販売、ハドソン・日本電気ホームエレクトロニクス開発） GAME BASIC for SEGASATURN （セガサターン、MSX-BASICライク） BASIC STUDIO （PlayStation 2、アートディンク開発） プチコン・プチコンmkII (SmileBasic)（ニンテンドーDSi/DSiLL・ニンテンドー3DS・Newニンテンドー3DS、JOEDOWN・スマイルブーム・ロケットスタジオ共同開発） プチコン3号 （ニンテンドー3DS・Newニンテンドー3DS） Apple 6K BASIC （アップルコンピュータ Apple II 別名 Integer BASIC） G-BASIC （トミーぴゅう太用BASIC、命令後を日本語に置き換えてある。同機には別売のBASIC 1もあり） ※同機とは関係ない、マイクロソフト製の同名のBASICがある MW-BASIC （BASIC-09 OS-9用） BASIC-G （ソードのM5のBASIC、整数型しか使えないが高速だった。同機には実数用のBASIC-Fもあり） Tiny BASIC （黎明期のマイコン用など） WICS （MZ-80K及びMZ-80Bシリーズ用のBASICに極力似せた表記方法を採用した、インタープリタ兼コンパイラ 整数型プログラミング言語） C-BASIC （カシオFPシリーズ用のBASICで10進演算による精度の高い計算を得意とした。8ビット用のC82-BASICと16ビット用C86-BASICがある） SHARP BASIC （ポケコン用のBASIC） X-BASIC （X68000のC言語ライクなBASIC、ハドソン製。） （Microsoft BASIC） Apple 10K BASIC （アップルコンピュータ Apple II+以降） BASCOM （CP/M用BASICコンパイラ） F-BASIC （FMシリーズのBASIC、富士通製） M-BASIC （CP/M用のBASIC） MSX-BASIC （MSX用のマイクロソフトBASIC、スプライト機能などを拡張、N88などより原型に近い） N-BASIC （PC-8000シリーズなどのBASIC） N80-BASIC （PC-8001mkIIなどのBASIC） N88-BASIC （PC-8800シリーズ（マイクロソフト製）、PC-9800シリーズ（日本電気製）のBASIC、PC-9800シリーズ用は別途コンパイラもあり） 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のサブセットの様な命令セットとなっている。） QBasic （QuickBASICの簡易版、Windows 95 / 98のCD-ROMに英語版が付属） QuickBASIC （Visual Basicの原型となった構造化BASIC） Microsoft BASIC Professional Development System （QuickBASICの進化形で、標準でISAMデータベースが構築でき、MS-MASM、MS-C、Quick C、MS-FORTRAN等とのミックスド・ランゲージ開発が可能な、プロユースの構造化BASIC） これらは命令セットの仕様が共通なだけで、必ずしもマイクロソフト製というわけではない。 S-BASIC （MZシリーズのBASIC、シャープ製） BASIC-S25 （シャープMZ-2500） BASIC LEVEL II他 (SEGAのSC-3000/SG-1000等のためのBASIC) MZ-80KがPET 2001の影響を強く受けていることもあり、シャープ純正のBASICの命令セットは互換性のため後継製品もそれに準拠して独自拡張した物となっている。 Quite BASIC(外部リンク) ブラウザ上でBASICコードを書いてWeb上で実行できるサービス ^ en:Edsger_W._Dijkstra#How_do_we_tell_truths_that_might_hurt.3F_.281975.29 ^ 英語で「走り屋による競走」を意味する Street racing（英語版） といったような street の語義を意識して使っている。 ^ 十進BASICのホームページ ^ AndroidでBASIC！で遊ぼう［改訂版］kindle 2016年11月20日　発行 著者：BASIC！友の会 発行：BASIC！友の会出版 マイコンBASIC互換表 CQ出版社 Kemeny, John G. & Kurtz, Thomas E. (1985). Back to BASIC: The History, Corruption and Future of the Language. Addison-Wesley Publishing Company, Inc. ISBN 0-201-13433-0. 松田健生訳、市川新解説（1990）『バック・トゥ・BASIC 開発者が語る言語の歴史と設計思想』啓学出版、ISBN 4-7665-1074-7