BASIC

プログラミング言語の一つ

カテゴリ / テンプレート

BASIC(ベーシック)は手続き型プログラミング言語のひとつ。

名前は「beginners' all-purpose symbolic instruction code」(「初心者向け汎用記号命令コード」を意味する)のバクロニムである。

概要編集

誕生したのが1964年であり、当時普及していたプログラミング言語FORTRANにいくつかの点で似ている。構文は、FORTRANの文法が基になっているとしばしば解説されている。

BASICはインタープリタ方式で動くものと、コンパイラ方式で動くものに大別できる。現時点では、構文の様式が大きく異なる2種類のBASICが存在している。構造化前のBASICと、構造化後のBASICである。

構造化以前のBASIC
1970年代 - 1980年代コンピュータマイクロコンピュータパソコン)で初心者向けのプログラミング言語として、非常に広く使われたものである。行番号GOTO文を用いるBASICであり、構造化が不可能である。行番号とGOTOのせいで(当時の表現では、「まるでスパゲティプログラム」になり)バグが頻発し、熟練したプログラマにとってもデバッグは困難だった。その結果、構造化ができるC言語が広がり比較できるようになると、BASICは激しい批判を浴びるようになり、初心者向け以外の用途ではC言語などに負けて、廃れてゆかざるを得なかった。
構造化したBASIC
構造化を実現できるように行番号およびGOTO文は廃止したもので、いくつかの流れで成立したが、特に1991~1993年ころに正式に規格として制定されたFull BASICの仕様は構造化がしっかりしてある(しかも他の点でも改良が行われている)。このFull BASICの仕様に近いもののひとつMicrosoft Visual Basic .NETは現代における有力な言語環境のひとつである。

したがって両者はかなり異なっており、しっかり区別して論じる必要がある。

構造化以前の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上のラインエディタ(テレタイプ端末環境)で利用されるよう設計されていた。[1]

BASICは、GEとの提携を経て、学外にも普及した。ダートマス大学のオリジナルはコンパイラだったが、パソコンなどの商用版では基本機能を最小限にしたうえでインタプリタとして実装されることが多く、独自の発展を遂げた。

詳しく説明すると、もっとも初期に使用したのはゼネラル・エレクトリック(GE)であり、GEはGE-225というマシンをダートマス大学に納入していたのである[2]

多数の方言の登場と標準化できなかった経緯

BASICの方言(異仕様)は、1970年ころ、GEがBASICの第4版を使っているころに現れ始めた[2]。新しいバージョンを待たず、ver.5を用いたマシンをGEがリリースしたころからである[2]。ダートマス大のケメニーとカーツの2人が「BASIC the Sixth(BASIC 第六版)」をリリースした1年後くらいに、ズレが生じはじめた[2]。当時のBASICの異バージョンはGordon Eubanks(シマンテック社のCEO)によるもので[2]、彼は1970年にBASIC-Cを開発した[2]。(なお、BASIC-Eは現在のJavaのような技術を用いており、命令文は一種の中間コードに変換された後にに機械語に変換されるものである。[2])Eubanksも彼の開発したBASIC-Eについては(ダートマス大の2人同様に)法的に保護せず[2]、次のCBASICでそのような措置をとった[2]。CBASICは彼の会社 Compiler Systems社から販売された[2]。あまりにも次々とBASICの異バージョンが現れるので[2]ANSIも1974年にBASICの標準化の必要性を感じ始めた[2]。ANSI内に標準化委員会が立ちあがり、BASICの2つの標準、つまり当時その委員会で「ミニマルBASIC(minimal BASIC)」つまり最小のBASICと呼ばれたものと[2]、もう一方は「スタンダード BASIC(Standard BASIC)」と呼ばれたものを作成しようと取り組んだ[2]。だがBASICの標準化は難しく、その委員会が長年かけて「標準化」の仕事をやっと完了したころには、とうにBASICは世界中で(さまざまな機種で、異仕様で、とっくにROMなどに実装されて)広く使われてしまっていた。そのようなわけで、(実際上)標準BASIC(Standard BASIC)というものは現れないことになったのである[2]

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

1970年代末から1980年代初頭にかけて、8ビットCPUの自作コンピュータTiny BASICを動かし、その上でゲームを実行させる(スタートレックゲーム等)のがホビーストの目標となった。

同時に、メーカー製のターンキーシステムにBASICインタプリタがROMに書き込まれた形で搭載されはじめ、一気に当時のマイコンの標準言語の地位を獲得した。この時に搭載された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-BASICSEGAのベーシックカートリッジ、次第にシェアを増やしたマイクロソフト製のBASIC(MBASICBASICAG-BASICGW-BASICの移植版)や、その命令体系を引き継ぎ実装したものである、F-BASICHu-BASICカタカナで表現するG-BASIC(前述のマイクロソフトの物とは異なる)以外にも、C言語を意識したX-BASICなど、さまざまなBASICを各社が独自に開発した。

この結果、「あるパソコンのBASICで書かれたプログラムは、他のパソコンではそのままでは動かすことができない」という、残念な状態になってしまった。たとえBASICの開発会社が同じでも、別の機種では動かない状況になってしまったのである。BASICを用いていては、開発者はせっかく苦労してコンピュータプログラムを開発しても、たいていはわずか1機種でしか動かず、また企業がソフトウェアをビジネス目的で開発・販売しようとする場合でもBASICでプログラムを開発しては、わずか1機種のユーザにしか売れず、それではあまり儲からないので、はじめから開発を躊躇しがちになる、という状況だったのである。

プログラミング言語で最初から標準化をしておかないと、どのような残念な状況になってしまうか、ということを人類は初めて経験したわけで、BASICで得られた苦い教訓が、後に開発されるさまざまな高級言語で活かされてゆくことになり、プログラミング言語で「方言」が乱立しないようにし、機種を超えてひとつのコンピュータプログラムが使えるようにする施策、「プラットフォーム・フリー」戦略へと繋がってゆくことになる。

方言の例編集

 
PC-8800シリーズのN88BASICのドロー画面
  • カーソル位置を指定するLOCATE文は、別の処理系ではCURSOR
  • 音楽を演奏するPLAY文、MUSIC文とそれらに記述されるMML
  • 画面モードを指定するCONSOLE
  • スプライト機能を使用する命令
  • VRAMと配列変数の内容をやりとりする命令
  • 条件付きループを実現するWHILEWEND
  • GOTO, GOSUB文の飛び先を指定するラベル
  • CALL, CMD, SETなどで始まる命令文

メイン・メモリの制限による処理系の実装例編集

初期のTiny BASICはともかくとしても、BASIC実装処理系のメイン・メモリの制限により言語仕様が極めて制限された実装が存在した。

  • 数値型は整数型のみ、また数値演算は整数演算のみう
  • 変数名は頭文字1文字または2文字程度しか認識しない
  • 文字列の長さが限られる(255文字など)
  • 配列の大きさ(添字の最大値)が限られる

中間コードサイズを小さくしたり処理を速くする、機種依存性のあるテクニックの例編集

処理プログラムの大きさや速度の制限を改善あるいは回避するテクニックを紹介する。いくつかは、ソースの読みやすさを犠牲にするようなテクニックでもあった。

  • プログラムの初めに全ての変数のデフォルトを整数だと宣言する(DEFINT A-Z)。これはきちんと%などを付けて整数変数として書いてあるプログラムでは意味がないし、小数演算があるプログラムなのにこれを書くとまともに動かなくなる。整数の範囲の演算しかしていないが、%を付けずに書かれているプログラムを後から改善する場合だけに意味のあるテクニック。
  • 命令を省略形で書く(PRINT?LET A=BA=BREM' など)
ただし、中間コードを採用している処理系では、?と入力してもPRINTに展開されるので、結果は変わらない。また、REM'と書くのはかえってサイズが増える。
  • 余白やコメントを入れない[3]
  • NEXTの変数名を省略する(可能な処理系のみ)
  • 一行に複数の文を詰め込んで(マルチステートメント)を使用して行の制限一杯に命令文を詰め込む[3]
  • よく使う変数は早めに確保する(実行時に毎回変数領域の先頭から検索されるため)
  • よく呼び出すサブルーチンは先頭に配置する(同じような理由。なお、一度通過したGOTO/GOSUB命令のオペランドを内部で行番号からメモリアドレスに書き換える処理系ではあまり効果がない)
  • キャラクタコードをバイナリと見立て、バイナリに相当するデータを直接プログラムに記述する

コンパイラ編集

次のようなコンパイラがある。

しかし、パソコンに内蔵または標準添付されていたインタプリタと違い、コンパイラは別売であったり、高価であったり、実行にはランタイムライブラリを必要であったりする場合があった。このことから、BASICインタプリタによる開発に習熟したユーザーは、より高速で柔軟なプログラムを求めて、機械語アセンブリ言語)や、C言語などに移行していった。

また、コンパイラと称していても、実際はインタプリタとソースコードを同梱した実行ファイルを作るだけ、というものもある。中間表現と、そのインタプリタ、という構成のものもある。

行番号とGOTO文への批判編集

急速に広まったBASICだが、構造化機能の無いBASICは教育に使うな、などとコンピュータサイエンティストの一部から酷評されたりもした。1975年にはすでに、エドガー・ダイクストラから激しく批判された[注釈 1]などが知られる。

行番号と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、と呼んだ[注釈 2])とは異なって既に1970年代後半から構造化などが進んでおり、ANSIでは新しい規格の策定も進んでいたが、これをパソコン向けにアレンジしたTrue BASICが、1984年に開発された(日本ではクレオから発売)。構造化の他、行列演算の機能など、学術的(特に数学的)な方面の拡張も特徴である。そしてTrue BASICとほぼ同一の構造化BASICであるFull BASICISO/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の主な特徴
  • 構造化に対応する制御文を追加した(DOLOOPDO WHILELOOP WHILEなど)
  • IF文が多行に渡るブロックIFIFTHENELSEENDIF)も可能となった
  • LETを省略できないようにした(True BASICではOPTION NOLETまたはNOLETを実行すると省略可能)
  • スコープの概念を取り入れた
    • 外部副プログラム(EXTERNAL SUBEND SUB)や外部関数(EXTERNAL FUNCTIONEND FUNCTION)の中でローカル変数が使用できるようになった
    • 副プログラムと関数は戻り値を戻すかどうかで区別される
    • 再帰処理の実装が容易になった
  • 計算精度や丸めの方法を規定した
  • 配列の添字を1から始めるようにした(OPTION BASE命令で0から始まるようにすることも可能)
  • 行列演算機能
  • 構文のアドホックな所などを極力排除した
  • 予約語を極力少なくした
  • I/Oを直接操作するなどシステムに干渉する命令は持たないようにした(True BASICでは拡張ライブラリとして提供)
  • グラフィック命令を規定した。なお、(0, 0) が、デフォルトでは、コンピュータ系に多い左上ではなく数学などで伝統的な左下である(変更できる。高機能なBASICに多かった、任意にスクリーンとウインドウのそれぞれの座標を設定できるタイプである)
  • Minimal BASICの上位互換である
  • パソコン向けのそれまでのBASICとは命令の互換性が低い
    • サブルーチン(GOSUBRETURN)は規格として残ってはいるが、使用は推奨されない

QuickBASIC編集

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

QuickBASIC との互換性を考慮したフリーなBASICとしてQB64英語版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となっていて[4]、つまり2021年11月時点でVisual Basicは6位だった。

なお、コンパイラで開発した場合、実行ファイルとは別に、巨大なランタイムライブラリが必要となる処理系が多い。このため配布に必要なファイルのサイズが大きくなり、敬遠されることもある。

その他の現代化BASIC編集

  • 十進BASIC - 日本人数学者が開発した数値計算用FullBASIC

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.NETREALbasicActiveBasicFreeBASIC等で、四者とも既に完全なオブジェクト指向言語になっていると言える。

構造化以前のベーシック編集

BASIC (ただし、この節では構造化以前のBASIC)
 
Atari 8ビット・コンピュータ用のAtari BASIC英語版 (1979年 (43年前) (1979))
パラダイム 非構造化プログラミング命令型プログラミング手続き型プログラミングオブジェクト指向プログラミング  
登場時期 1964年4月1日 (58年前) (1964-04-01)
設計者 John G. KemenyThomas E. Kurtz
開発者 トーマス・E・カーツ、ジョン・ジョージ・ケメニー、メアリー・ケネス・ケラー  
主な処理系

ダートマスBASIC, Tiny BASIC, Microsoft BASIC, QuickBASIC, QB64, Casio Basic, Turbo Basic(PowerBASIC), Applesoft BASIC, Atari BASIC, BBC BASIC, Commodore BASIC, Liberty BASIC, Sinclair BASIC,

TI-BASIC
影響を受けた言語 FORTRAN、FORTRAN II、JOSS、ALGOL  
影響を与えた言語

Visual Basic, Visual Basic .NET, Hot Soup Processor, COMAL,

GRASS
拡張子 bas  
テンプレートを表示

構造化以前のBASICは、行番号とGOTO命令があることが特徴のひとつである。

ステートメントとコマンド編集

BASICのエッセンスを説明し簡単なプログラム例を示すために、とりあえずBASICのステートメントとコマンドについて説明する。 本来のBASIC、ダートマスBASICではステートメントとコマンドをはっきり区別する。ダートマスBASICのルールを説明する[5]

プログラムのの文中に書くキーワード(予約語)はステートメント(statement)と言う。

たとえば次のようなワードがステートメントである。
  • PRINT - 出力する。たとえば「PRINT A」と書くと、変数 A の値を画面などに出力する。
  • FORNEXT - 両者を前後に組み合わせて使うことで、FORの文からNEXTの文までがループ(繰り返し処理)となる。
  • GOTO - 「GOTO <行番号>」という書式で、指定された行番号へジャンプする。
  • GOSUBおよびRETURN - 「GOSUB + <行番号>」という書式。GOSUB文で指定された行番号へジャンプするが、ジャンプ先で行番号の順に実行してゆき、RETURNというワードに到達するとジャンプ元の位置に戻る。
  • END - ダートマスBASICではプログラムの最終行に書かなければいけない。(実装によってはENDを書かないとコンピュータが暴走するものもあった。ENDを省略できる実装が次第に増えた。)

処理系に指示を与えるワード(プログラムの外の命令)はコマンド命令)という。

たとえば次のようなワードである。
  • 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の影響を受けており、いくつか似た特徴がある。一方、構造化以前のBASICはC言語とは系統が異なり、C言語とは大きく異なる。
  • ダートマスBASICコンパイラだが、他のBASICはインタプリタとして実装された処理系が多い。
  • 構造化以前のBASICでは、すべての行頭に行番号を必要とする。
  • 基本的に先頭行(行番号が一番若い行)から1行づつ実行される。
  • GOTO文(GOTO <行番号>)があると、<行番号>で指定された行番号にジャンプしてその行を実行する。たとえば「GOTO 250」と書かれていたら、行番号250にジャンプする。行番号は、テレタイプ端末時代に処理系と一体の行指向テキストエディタで扱うのに便利であったので採用されてしまった。ジャンプ先をただの数字(行番号)で示すので、ある程度以上の行数を書くとGOTO文が増え、直観的には分かりづらい行だらけになる。アルファベットの意味ある単語で行き先を指定するジャンプではないので、一行づつ焦点を当てると、どういう意図で書かれたコードなのかが不明瞭な行ばかりになってしまう。また、通常ある程度以上の規模のプログラムは分岐判断が多数含まれるので、IFとGOTOを組み合わせた文を多数使うことになり、ある程度の行数以上のプログラムを書くとスパゲティプログラムになりやすい。だが現在でも互換性のために両者を残している処理系もある。ラベルを用いて「GOTO *LABEL」のように指定できる実装もある。
  • プログラム中の予約語(キーワード)にはステートメントやコマンドの他に関数がある。それらと同じ文字並びを変数名として使うことはできない。
  • 文字列変数の内容等を除いて、大文字と小文字を区別しない。入力の時点で全て大文字に変換される処理系もあった。
  • 算術演算子以外の記号は極力使わない。論理演算子はANDORXORNOTである。括弧は演算の優先順位も、サブルーチン引数も、配列もすべて「()」のみを用いる。ブロックも「{}」のような括弧ではなく「FOR文からNEXT文までの間」といった構文により指定する。
  • 代入と比較はどちらも「=」である。代入はLET文(たとえば「LET A = 10」など)とするのが本来の書式だが、キーワード「LET」を省略した構文も許される方言ばかりになったので、結局「A = 1」のような、代入文なのか比較文なのか見た目の印象が非常に紛らわしいものばかりになり、バグ頻発の原因ともなった。
  • 明示的な変数宣言を必要とせず、変数を使用し始めたところで宣言したものと解釈される。
  • 使ったことのない変数を使うと変数が作られ、また中身は自動的に初期化される(数値型は0、文字列型は空文字列)。
  • ファーストクラスの型は数値型と文字列型である。数値は浮動小数点数だけのものもあるが、整数型などがあるものもある。文字列型の変数名は末尾に「$」を付ける、といった規則のものもある。
  • LEFT$, MID$, RIGHT$など、文字列操作関数もそれなりの数 備えていることが多い。
  • 編集環境を兼ねたコマンドラインインタプリタを持つものもある。(一種のシェルのようなもの。LISPREPLとはやや異なる。)

具体例編集

Web上で動くBASIC編集

当百科事典の読者で一度もBASICに触れたことが無い人が、とりあえず最低限でも雰囲気を理解するためにはWeb版(ブラウザで試せるもの)が一番手軽なので、それから紹介する。

構造化以前のBASICの具体例編集

構造化以前のBASICが動いていたマシンの新品販売はほとんどは終了となっている。とはいえ、ありとあらゆる機種は中古で入手可能で、たとえばeBayメルカリヤフオクなどで広く流通しているので、今日でも入手して、現在も目の前で動くBASICとして使うことができる。

各組織、各社の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解説」が付属した[6]
    •  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に似せたもの。

マイクロソフト系編集

これらは命令セットの仕様が共通なだけで、必ずしもマイクロソフト製というわけではない。

ゲーム機編集

すでに新品販売されていないゲーム機のBASICは以下のとおり。

現在販売されているマシンで動くBASIC編集

現在新品で販売されている復刻機のBASIC編集

最近、復刻パソコン、つまり1980年代などのパソコンが、ほぼ以前どおりのシステム内容で(しかも端子類はHDMIUSBに変更したり、SDメモリ用スロットなども加えるなど、最近の仕様に改良されて)、新品で販売されるようになっている。それらのほとんどでBASICが動き、ユーザはBASICプログラミングを楽しむことができ、それらを差別する理由は全く無いので、それらについても記述する。

現行パソコンで動くBASIC編集

現在、新品で販売されているパソコン上で動くBASIC

マイクロソフトBASIC・ならびにその類似系
独自系
  • PureBasic(マルチプラットフォーム、AmigaOS版はオープンソース)
  • FutureBASIC(Mac OS、構文はQuickBASIC互換)
  • BCX(GPLv2 + BCX例外ライセンスのオープンソースソフトウェア BASIC → C言語トランスレータでインラインC/C++およびアセンブリを扱えるなどの特徴を持つ)
  • UBASIC(DOS用フリーウェア 多倍長演算に特化)
  • DarkBASIC(ゲーム製作に特化したBASIC言語、Windows専用、特に3Dゲーム)
  • GLBasic(GCCコンパイラを内部で利用するマルチプラットフォーム開発環境)
Full 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 OS上で動くBASIC、つまりスマホOS世界シェアNo.1のAndroidスマートフォン群やAndroidタブレット群などで動くBASICは以下のとおり。

iOS用のBASIC編集

iOS上で動く(つまりiPhoneiPadで動く)BASICは以下のとおり。

現行ゲーム機などのBASIC編集

現在新品で販売されている(子供向けの)ゲーム機のBASIC


脚注編集

[脚注の使い方]

注釈編集

  1. ^ en:Edsger_W._Dijkstra#How_do_we_tell_truths_that_might_hurt.3F_.281975.29
  2. ^ 英語で「走り屋による競走」を意味する Street racing といったような street の語義を意識して使っている。

出典編集

  1. ^ YouTube Dartmouthチャンネル「Birth of BASIC」
  2. ^ a b c d e f g h i j k l m n o History of BASIC
  3. ^ a b 小池慎一「6.BASICプログラミングテクニック」 『マイコンピュータ No.13』CQ出版社、1984年6月1日、114頁。 
  4. ^ TIOBEプログラミング言語ランキング
  5. ^ DARTMOUTH, BASIC at 50
  6. ^ [1]
  7. ^ About BUG - History”. www.bug.co.jp. 2019年11月12日閲覧。
  8. ^ [2]
  9. ^ 十進BASICのホームページ
  10. ^ 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