BASIC

出典: フリー百科事典『ウィキペディア(Wikipedia)』

BASIC(ベーシック)は手続き型言語の一つ。

BASICとはBeginner's All purpose Symbolic Instruction Codeの略(頭字語)であるとされる。また、BASIC FORTRANの略ともいわれる。英単語の「Basic(基礎)」の意味も持つと考えられる。

目次

[編集] 概要

FORTRANの文法が基になっており、初心者向けのコンピュータ言語として、1970年代以降のコンピュータ(特にパソコン)で広く使われた。パソコンがCUI環境からGUI環境となった現在でも、Windowsアプリケーションの主力開発言語であるVisual Basicの文法に影を残している。

[編集] 主な特徴

歴史的な経緯からFORTRANC言語と比較されることが多い。

  • 対話型の編集・実行環境がある(コマンドライン型のコンパイラ以外)
  • 古い処理系では行頭に行番号を必要とし、分岐をGOTOに依存する。現在でも互換性のために両者を残している処理系もある
  • 初心者に優しい字句の方針を持つ
    • 予約語の大文字と小文字を区別しない(大文字を基本とする処理系が多く、強制的に大文字に変換される処理系もあった)
    • 算術演算子以外の記号は極力使わない。論理演算子はANDORXORNOTである。かっこは演算の優先順位も、関数の引数も、配列もすべて「()」のみを用いる。ブロックも「{}」のようなかっこではなく「FOR文からNEXT文までの間」といった構文により指定する。
    • 等価演算子に数学と同じ表記の「=」が使える。代入構文(LET文およびその省略形)で用いられた場合に代入演算子と解釈される。C言語では代入演算子と区別するため等価演算子に「==」が使われるため,誤って「=」とされるミスが発生するが,BASICではそのような問題は起こらない。
  • プログラムは命令関数からなる。
    • これらの名は予約語とされ、変数名に用いることはできない
  • 変数は基本的に実数型と文字列型である
    • 中でも文字列操作は柔軟にできるようになっている。文字列型は変数名の末尾に「$」をつけて区別することが多い。
    • 処理系によっては実数型に単精度・倍精度・整数を区別できたり、文字列との区別をしないバリアント型を持つものもある
    • 実数型同士に明示的型変換(キャスト)を必要としない
    • 明示的な変数宣言を必要とせず、使用し始めたところで宣言したものと解釈される
    • 変数は自動的に初期化される(実数型は0、文字列型は空文字列
    • 定数構造体をサポートしていないことが多い
  • 命令文は改行で区切る
    • 一行に複数命令を詰め込めるよう「マルチステートメント」という独自の区切り記号(:)を実装した処理系も多い
    • 字下げは必須ではない(書き方としては推奨される)
  • 実行は基本的に行頭から行われる(MAINを持つ処理系もある)
  • 高級言語である(が、低水準の操作を拡張されたものも多い)
    • ポインタはない(変数のアドレスを参照できる処理系もある)
    • 他の言語で書かれたプログラムとのリンクBIOSAPIの呼び出しには複雑な手続きが必要か、またはできない
  • その他にも初心者への配慮が見られる
    • 恒等式と混乱されがちな代入文を,LET文を用いることで「LET A=2」(Let A equal 2:「Aを2と同じにしなさい」)と読め,意味がつかみやすくなる。LETは省略可能であり,初心者の理解のためにのみ存在する命令である
    • 画面出力のPRINT文は既定で改行され,改行せずに続けたいときには「;」をつける。これは多くの言語に見られる改行文字(\n)による改行に比べ処理系の実装に手間がかかるが,人間には優しい

[編集] 主な予約語と構文

後述の方言のため、処理系によっては存在しないか名前が違うものもある。

命令
  • IF ~ THEN ~ ELSE - 条件分岐
    • ELSEに対応しない処理系もある
  • FOR ~ NEXT - ループ構文
  • END - プログラム終了
  • READDATA - データを変数に代入
    • 読むDATAの位置を指定するにはRESTORE命令を使う
  • DIM - 配列変数の宣言
  • REM - Remark(コメント行)
  • LET - 変数代入(省略可能な処理系が多い)
  • MAT - 行列処理
  • PRINT - 文字列表示
  • LPRINT - プリンタ印字
  • PRINTUSING - 書式付き文字列表示
    • これらの出力は自動的に改行される。それを避ける場合は末尾に「;」(改行なし)や「,」(タブ区切り)を付ける。
  • INPUT - 対話型入力
  • POKE - メモリ領域の直接操作
関数
  • CHR$ - アスキーコードから文字に変換
  • VAL - 文字列を数値に変換
  • MID$ - 文字列操作関数
  • RND - ランダム関数
  • INPUT$ - 一文字入力
  • PEEK - メモリ領域の直接参照
演算子
  • + - 加算
  • - - 減算
  • * - 乗算
  • / - 除算(実数)
  • ¥ - 除算(整数)※一部の処理系のみ
  • MOD - 剰余 ※Full BASICではMOD$関数を使用
  • ^ - べき乗
  • OR - 論理和
  • AND - 論理積
  • XOR - 排他的論理和
  • > , < - 大小比較
  • = - 等号・または(LETでの)変数代入
  • <> - 不等号
  • => , >= - 以上
  • <= , =< - 以下

[編集] 非構造的な構文

主に旧世代のパソコンのBASICで実装されていた。処理系によっては、互換性のために残している。

  • GOSUBGO SUB) ~ RETURN - サブルーチン分岐、復帰
  • GOTO(GO TO) - 強制分岐
  • ONGOSUB - 条件つきサブルーチン分岐
  • ONGOTO - 条件つき強制分岐

[編集] 実行制御・編集支援命令

主に旧世代のパソコンのBASICで実装されていた。

  • AUTO - 行番号自動入力支援
  • RENUM - Renumber 行番号の一括付け直し
  • RUN - プログラム実行
  • NEW - プログラム全消去
  • TRON - Trace On (実行中の行番号を表示)
  • TROFF - Trace Off (TRON解除)
  • LOAD - ディスクからプログラムファイルの読み込み
  • CLOAD - テープからプログラムファイルの読み込み
  • SAVE - ディスクへプログラムファイルを保存
  • CSAVE - テープへプログラムファイルを保存
  • FILES - ディスクファイルの一覧

[編集] 歴史

1964年ダートマス大学にて、数学者ジョン・ケメニー(1926-1992)とトーマス・カーツ(1928-)により、コンピュータ教育用の言語として開発された。これは同時期にともに開発された、タイムシェアリングシステム DTSS 上のラインエディタで利用されるよう設計されていた。

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

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

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

同時に、メーカー製のターンキーシステムにBASICインタプリタがROMの形で搭載されはじめ、一気に当時のマイコンにおける標準言語の立場を獲得した。この時に搭載されたBASICインタプリタはほとんどがマイクロソフト製で、同社躍進のきっかけとなった。また、マイクロソフト社製BASICは、中間コードを使用する構造になっており、また汎用機を再現した極めてエミュレータに近いランタイム形式の実行環境であったため、当時の互換性が皆無なコンピュータ事情の中でも、スクリプト自体は容易な移植が可能であった。

その後、(MS-DOS発表以前の)パソコンに、操作を提供するのにも使われ、しばしばROM-BASICとしてハードウェアに組み込まれた。

[編集] 互換性とBASIC

BASICは、FORTRANやCOBOLと同様、ANSIISOJIS(JIS X2002)などで言語仕様が規格化された。この規格BASICは後年、「Minimal BASIC」と呼ばれた。当時のコンピュータの能力を考慮して、規定された文法などの事項はごく最小限だったが、1970年代から1980年代にかけてのパソコンの発展はめざましく、Minimal BASIC規格が陳腐化するのも早かった。実際に規格にそった言語仕様を持った実装系は汎用コンピュータ用のオマケ程度のものは存在したが、パソコン用としてはほとんどなかった。

各メーカーのパソコンに標準搭載されたBASICは、機種ごとに画面操作やI/O直接操作などの独自拡張が行われた。マイクロソフト製(MS-BASICBASICAG-BASICGW-BASICの移植版)のみならず、F-BASICS-BASICHu-BASICなど各社が独自にBASICを開発し、いわゆる「方言」が生まれた。この結果、たとえBASICのメーカーが同じでも「あるパソコンで作ったBASICプログラムは、他のパソコンではそのままでは動かすことができない」ことの方がずっと多かった。

[編集] 方言の例

  • カーソル位置を指定する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?も1バイトの同じ中間コードになるので、結果は変わらない。また、REM'と書くのはかえってサイズが増える。
  • 余白やコメントを入れない
  • NEXTの変数名を省略する(可能な処理系のみ)
  • マルチステートメントを使用して行の制限一杯に命令文を詰め込む
  • よく使う変数は早めに確保する
実行時に毎回変数領域の先頭から検索されるため。
  • よく呼び出すサブルーチンは先頭に配置する
同じような理由。なお、一度通過したGOTO/GOSUB命令のオペランドを内部で行番号からメモリアドレスに書き換える処理系ではあまり効果がない。
  • 機械語で書いたサブルーチンをメモリの一部に配置して、プログラム中で呼び出す
  • CPUやメモリのウェイトを外す
I/Oポートを操作してCRTコントローラへのDMAを止める(その間画面は消える)など。BASIC言語というよりはハードウェアのテクニック。

もっとも当時は群雄割拠の時代でもあり、特に市販ソフトが満足に出なくなったパソコンにおいては、BASICは重要な役割を果たした。

[編集] パソコン用BASICとコンパイラ

コンパイラとしてのBASICはパソコン向けにはあまり存在しなかったが、マイクロソフト製の BASIC-80(CP/M用インタプリタ)にはBASCOMというコンパイラが製品として存在していた。また、日本電気製のMS-DOS用N88-BASICコンパイラという製品も存在していた。MSX-BASICにはべーしっ君という(実行形式でのオブジェクトは生成しない)コンパイラがアスキーより発売されていた。またシャープX68000に付属していたX-BASICは専用コンバーターでC言語に変換してコンパイルする事が可能だった。

もっとも、コンパイラが存在しないインタプリタの方が多かった。その上、パソコンに内蔵または標準添付されていたインタプリタと違い、コンパイラは別売で高価で、実行にはランタイムを必要とした。

このことから、BASICインタプリタでパソコンの操作を覚えたユーザーは、より高速で柔軟なプログラムを求めて、機械語(アセンブラ)や、C言語などに流れていった。

[編集] 構造化とBASIC

パソコンの普及により急速に広まったBASICだったが、PascalC言語の流行による構造化プログラミングの波が押し寄せると、行番号を残し、マルチステートメントGOTO文などを多用するパソコンのBASICは、構造化を支持する識者からは酷評されるようになった。

[編集] Full BASIC

やがてそれは、BASICの原作者であるジョン・ケメニーとトーマス・カーツの知るところともなった。ダートマス大学でのバージョンは商用のBASICとは異なって既に1970年代後半から構造化などが進んでおり、ANSIでは新しい規格の策定も進んでいたが、これをパソコン向けにアレンジした実行時コンパイル型のTrue BASICが、1984年に開発された(日本ではクレオから発売)。このBASICは学術的(特に数学的)な意見を色濃くしたものだった。そしてTrue BASICとほぼ同一の構造化BASICであるFull BASICがANSI、ISO、遅れてJIS(JIS X 3003:1993)で規格化された。

Full BASICの主な特徴
  • 構造化に対応する制御文を追加した(DOLOOPDO WHILELOOP WHILEなど)
    • 行番号やGOTOを使用しなくて済むようになった
    • IF文が多行に渡るブロックIFIFTHENELSEENDIF)も可能となった
  • LETを省略できないようにした(True BASICではOPTION NOLETまたはNOLETを実行すると省略可能)
  • スコープの概念を取り入れた
  • 計算精度や丸めの方法を規定した
  • 配列の添字を1から始めるようにした(OPTION BASE命令で0から始まるようにすることも可能)
  • 配列の行列演算が一発でできるようにした
  • 文法の矛盾などを極力排除した
  • 予約語を極力少なくした
  • I/Oを直接叩くなどシステムに干渉する命令は持たないようにした(True BASICでは拡張ライブラリとして提供)
  • グラフィック命令を規定し、座標系原点数学第一象限にならって左下にした(変更も可能)
  • Minimal BASIC規格の上位互換である
    • 使用する必要はないが、行番号やGOTOなども規格としては残っている
    • 実数型変数の型付けがない
    • パソコン向けのそれまでのBASICとは命令の互換性が低い

[編集] QuickBASIC

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

QuickBASIC との互換性を考慮したフリーなBASICとしてFreeBASICがある。

[編集] その他

日本の会社のその他のBASICは、マイクロソフトと同様に独自に構造化したか、または構造化されないまま製品ラインナップからは外されてしまった(日本のパソコンの16ビット化が進んだ1980年代の後半からFull BASICがJISで制定された頃にかけて、パソコンの主力開発環境はC言語がBASICに取って代わりつつあった)。このこともあり、Full BASIC規格準拠の処理系は教育用として使用されることはあるものの、市場にはあまり普及していない。

[編集] GUI時代とBASIC

近年ではマイクロソフト社の独自拡張によるRAD環境Visual Basic (VB)や、MS Officeなどで動作するそのサブセットVisual Basic for Applications (VBA)がWindowsにおける代表的なプログラミング言語のひとつとして広く利用されている。もっともVisual Basicは、GUIに特化したRAD環境として大幅に拡張が施され、元のBASIC言語とは、かけ離れてしまっている。

BASICは依然として初心者向けの言語ではあるが、パソコンに添付されることはなくなった。プログラムの入門でもBASICを使わず、最初からC言語などで教える教育機関も多い。無料で使えるJavaなどの、洗練された後発言語の普及により、開発環境としては選択肢の一つでしかなくなった。

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

[編集] オブジェクト指向とBASIC

現在、BASICもオブジェクト指向化が見受けられる。その代表例がVisual Basic.NETREALbasicActiveBasic等で、三者とも既に完全なオブジェクト指向言語になっていると言える。

[編集] 主なBASIC

[編集] 現在のパソコンのBASIC

マイクロソフト・マイクロソフト文法互換系
独自系
  • FutureBASICMacOS 構文はQuickBASIC互換)
  • UBASIC (DOS用フリーウェア 多倍長演算に特化)
Full BASIC系(規格準拠)
  • (仮称)十進BASIC (JIS Full BASICに準拠、Windows/Linux用フリーウェア)
  • True BASIC (Full BASIC規格の原型、MS-DOS・Windows・MacOS・UNIX、現在は英語版のみ)
旧式構文系
  • Chipmunk Basic(Windows・MacOS・UNIX用フリーウェア、インタプリタのみ)

[編集] ゲーム機などのBASIC

[編集] 過去のパソコンなどのBASIC

独自系
  • 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 (黎明期のマイコン用に普及、Windowsなどのものとは別物)
  • WICS (MZ-80K及びMZ-80Bシリーズ用のBASICに極力似せた表記方法を採用した、インタープリタ兼コンパイラ 整数型プログラミング言語)
マイクロソフト・マイクロソフト文法互換系(Microsoft BASIC
シャープ・ハドソン系

[編集] 関連書籍

ウィキブックス
ウィキブックスBASIC関連の教科書や解説書があります。
  • プログラミング言語BASIC JIS-X2002
  • マイコンBASIC互換表 CQ出版社
  • Back to BASIC 啓学出版(絶版)