BASIC
この記事には独自研究が含まれているおそれがあります。 |
パラダイム | 非構造化プログラミング、命令型プログラミング、手続き型プログラミング、オブジェクト指向プログラミング |
---|---|
登場時期 | |
開発者 | トーマス・E・カーツ、ジョン・ジョージ・ケメニー、メアリー・ケネス・ケラー |
影響を受けた言語 | FORTRAN、FORTRAN II、JOSS、ALGOL |
拡張子 | bas |
BASIC(ベーシック)は手続き型プログラミング言語のひとつ。
名前は「beginners' all-purpose symbolic instruction code」のバクロニムである。日本語では「初心者向け汎用記号命令コード」を意味する。
概要
[編集]誕生したのが1964年(昭和39年)であり、当時普及していたプログラミング言語FORTRANにいくつかの点で似ている。構文は、FORTRANの文法が基になっているとしばしば解説されている。
BASICはインタープリタ方式で動くものと、コンパイラ方式で動くものに大別できる。また、構文の様式が大きく異なる2種類のBASICが存在している。それは構造化前のBASICと、構造化後のBASICである。
- 構造化されていないBASIC (Unstructured BASIC)
- 1970年代 - 1980年代のコンピュータ(マイクロコンピュータやパソコン)で初心者向け・教育用のプログラミング言語として、非常に広く使われた。行番号とGOTO文(大域ジャンプ)を用いるものであり、分岐やループでは常にジャンプ先の行番号を意識しなければならず、構造化プログラミングが不可能である。行番号とGOTOを用いたプログラミングは、スパゲティプログラムとなりがちで、コードの再利用性が低いうえにバグを誘発しやすく、熟練したプログラマにとってもプログラムのデバッグや安全な機能拡張は困難だった[1]。のちに構造化プログラミングに対応したPascalやC言語が登場・普及して比較されるようになると、BASICは激しい批判を浴びるようになり、実用的なプログラミング用途では廃れていった。
- 構造化された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年代後半以降のマイコン、パーソナルコンピュータなどの多くの機種で次々と採用された。この頃のBASICのほとんどはインタプリタ方式でマザーボード上のROMにあらかじめ書き込まれた状態で供給されていた。一部のBASICはインタプリタ方式でもROMに書き込まれておらず補助記憶装置から読み込まれたり(たとえば日本ではシャープのMZ-80シリーズなど)、あるいはコンパイラ方式のBASICで高速で実行できるものも開発・供給された。
歴史
[編集]1964年、ダートマス大学にて、ケメニーとカーツにより、教育用などを目的としてダートマスBASICが開発された。これは同時期にともに開発された、タイムシェアリングシステムDTSS上のラインエディタ(テレタイプ端末環境)で利用されるよう設計されていた。[2]
BASICは、GEとの提携を経て、学外にも普及した。ダートマス大学のオリジナルはコンパイラだったが、パソコンなどの商用版では基本機能を最小限にしたうえでインタプリタとして実装されることが多く、独自の発展を遂げた。
- 多数の方言の登場と標準化できなかった経緯
BASICの方言(異仕様)は、1970年ころ、GEがBASICの第4版を使っているころに現れ始めた[3]。新しいバージョンを待たず、ver.5を用いたマシンをGEがリリースしたころからである[3]。ケメニーとカーツの2人が「BASIC the Sixth(BASIC 第六版)」をリリースした1年後くらいに、ズレが生じはじめた[3]。当時のBASICの異バージョンはGordon Eubanks(シマンテック社のCEO)によるもので[3]、彼は1970年にBASIC-Cを開発した[3]。(なお、BASIC-Eは現在のJavaのような技術を用いており、命令文は一種の中間コードに変換された後に機械語に変換されるものである。[3])Eubanksも彼の開発したBASIC-Eについては法的に保護せず[3]、次のCBASICでそのような措置をとった[3]。CBASICは彼の会社 Compiler Systems社から販売された[3]。あまりにも次々とBASICの異バージョンが現れるので[3]、ANSIも1974年にBASICの標準化の必要性を感じ始めた[3]。ANSI内に標準化委員会が立ちあがり、BASICの2つの標準、「ミニマルBASIC(minimal BASIC)」と[3]、もう一方は「スタンダード BASIC(Standard BASIC)」を作成しようと取り組んだ[3]。だがBASICの標準化は難しく、委員会が長年かけて「標準化」の仕事を完了したころには、とうにBASICは世界中で広く使われており、実際上標準BASICは現れなかった[3]。
8ビットパソコンの普及とBASIC
[編集]史上初の市販のパーソナルコンピュータとされているのはMITS社のAltair 8800であり、1975年、このAltair 8800向けにハーバード大のビル・ゲイツ、ポール・アレン、モンティ・ダヴィドゥフの3人がAltair BASICを開発し、MITS社との契約のもと配布された。1976年4月11日にはスティーブ・ウォズニアックによって開発されたパーソナルコンピュータ・キットApple Iがアップル社から発売され、このマシンのために同じくウォズニアックが開発したInteger BASICが供給され(当初はデータレコーダのカセットテープの形で供給され、後にApple IIが発売されてからROM版も供給された)、翌1977年6月にはキットタイプではない完成品タイプのApple IIが発売となり、それにもやはりINTEGER BASICが、だが今度は最初からROMに書き込まれた形で搭載された。
1970年代末から1980年代初頭にかけては、少数のエレクトロニクス好きたちは、8ビットCPUのコンピュータをキットなどから自作しその上でTiny BASICを動かしたり、スタートレックなどのゲームを動かすことなどを楽しんでいた。
だが大多数はコンピュータを実務に使いたいと感じており、キットではなく最初から完成品の、動作することが確実なコンピュータを求めていた。メーカー側はそうした要望に応えてターンキーシステムを開発しそれにBASICインタプリタをROMに書き込んだ形で搭載するようになり、BASICは一気に当時のマイクロコンピュータ(パーソナルコンピュータ)の標準言語の地位を獲得した。この時に搭載されたBASICインタプリタはほとんどがマイクロソフト製で、同社躍進のきっかけとなった。また、マイクロソフト製BASICは中間コードを使用する構造になっており、汎用機を再現した極めてエミュレータに近いランタイム形式の実行環境でもあったため、当時の互換性が皆無なコンピュータ事情の中でも、スクリプト自体の移植は容易だった。
その後、パソコンに操作を提供するのにも使われ、しばしばROM-BASICとしてハードウェアに組み込まれた。電源投入後にエディタ込みで利用できることから、現在における、シェル、インタフェースとしての役割ももち、ローダなどの役割も担った。入力の効率化のため、省略形式での入力や、1980年代後半には、ラベル、インデントへの内部的な対応、C言語への橋渡し、日本では漢字の利用など、様々な機種ごとの独自の発展を遂げた。当時のPCの処理速度は遅いので、処理の高速化が必要な部分はデータ形式でアセンブリ言語による処理を呼び出すなどの手法もとられた。
1980年代後半から1990年代前半ころにはC言語がパーソナルコンピュータのユーザにも少しずつ知られるようになり、BASICの代わりにC言語を使うことが増えていった。
一方で1990年代などでもプログラミングの専門家ではない数学者が、あいかわらず行番号を使用する数値計算用のBASICを開発(UBASIC)していた。
「方言」の乱立
[編集]BASICは1970年代後半から1980年代にかけて、当時黎明期にあったパーソナルコンピュータ(マイクロコンピュータ)の各機種に続々と搭載され、業界の発展にも貢献した。
だが、BASICを最初に開発したダートマス大の2人は今で言う「パブリックドメイン」でいいと考えており、また標準化団体のANSIも後手にまわり、BASICには「方言」が乱立した。
マイクロコンピュータやパーソナルコンピュータに標準搭載された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で書かれたプログラムは、他のパソコンではそのままでは動かすことができない」という状態になった。
方言の例
[編集]- カーソル位置を指定する
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
を'
と書くのはかえってサイズが増える。
- 余白やコメントを入れない[4]
NEXT
の変数名を省略する(可能な処理系のみ)- 一行に複数の文を詰め込んで(マルチステートメント)を使用して行の制限一杯に命令文を詰め込む[4]
- よく使う変数は早めに確保する(実行時に毎回変数領域の先頭から検索されるため)
- よく呼び出すサブルーチンは先頭に配置する(同じような理由。なお、一度通過した
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向けコンパイラで、現代向けに多数の機能追加が行われている[注釈 1]が、QuickBASICとの互換性もある。
しかし、パソコンに内蔵または標準添付されていたインタプリタと違い、コンパイラは別売であったり、高価であったり、実行にはランタイムライブラリを必要であったりする場合があった。このことから、BASICインタプリタによる開発に習熟したユーザーは、より高速で柔軟なプログラムを求めて、機械語(アセンブリ言語)や、C言語などに移行していった。
また、コンパイラと称していても、実際はインタプリタとソースコードを同梱した実行ファイルを作るだけ、というものもある。中間表現と、そのインタプリタ、という構成のものもある。
行番号とGOTO文への批判
[編集]急速に広まったBASICだが、構造化機能の無いBASICは教育に使うな、などとコンピュータサイエンティストの一部から酷評されたりもした。1975年にはすでに、エドガー・ダイクストラから激しく批判された"How do we tell truths that might hurt?"などが知られる。
行番号と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
[編集]Full 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
を実行すると省略可能)- スコープの概念を取り入れた
- 計算精度や丸めの方法を規定した
- 配列の添字を1から始めるようにした(
OPTION BASE
命令で0から始まるようにすることも可能) - 行列演算機能
- 構文のアドホックな所などを極力排除した
- 予約語を極力少なくした
- I/Oを直接操作するなどシステムに干渉する命令は持たないようにした(True BASICでは拡張ライブラリとして提供)
- グラフィック命令を規定した。なお、(0, 0) が、デフォルトでは、コンピュータ系に多い左上ではなく数学などで伝統的な左下である(変更できる。高機能なBASICに多かった、任意にスクリーンとウインドウのそれぞれの座標を設定できるタイプである)
- Minimal BASICの上位互換である
- パソコン向けのそれまでのBASICとは命令の互換性が低い
- サブルーチン(
GOSUB
〜RETURN
)は規格として残ってはいるが、使用は推奨されない
- サブルーチン(
- 構造化に対応する制御文を追加した(
QuickBASIC
[編集]マイクロソフトはFull BASIC規格の策定には参加しなかったが、1985年にFull BASICに類した構造化や特徴を追加した独自規格のQuickBASICを発売した。これは自社のMS-DOS用のGW-BASICの上位互換で、コンパイラ並に動作を高速にした上にコンパイルもできるようにしたもので、Version4.5まで発売した後に1991年のVisual Basicへと繋がっていった。
QuickBASICとの互換性を考慮したフリーなBASICとしてQB64やFreeBASICがある。
Windowsの普及とVisual Basicの普及
[編集]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++を使って開発されていたが、BASICを見捨てることはしなかった。既存ユーザが受け入れやすい選択肢を提供することで、ユーザが他社に逃げてしまうことを防いだ。
Visual Basicでは、業務用のソフトウェア、プロフェッショナル用のソフトウェアなども多数開発されるようになり、C言語やC++同様に、プロでもその気になればまともに使える言語になった。なお、C/C++は言語仕様上、そもそもGUIプログラミングや統合開発環境との親和性、コンパイル速度などに問題があった。プロパティなどの便利な機能をサポートし、またシンプルな言語仕様を持つVBのほうがGUIプログラミングに向いていた、という側面もある。VBは後発のDelphiやC++Builderの設計思想にも影響を与えている。
また、「PC/AT互換機とWindowsの組み合わせ」というプラットフォームが一般化したことで、「BASICの方言の乱立」の問題が解消されていくことになった。Windowsが走るマシンであれば、どのメーカーが製造したパソコンであろうが、MicrosoftのVisual Basicが「標準的なBasic」という位置づけになっていき、いわば「標準語」のようなものが定まった。ただしVisual Basicは、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で動作するアプリケーションも開発することができる[5][6]。
- 地位の低下
だが大学ではBASICの使用は構造化BASICも含めて減っていった。大学では、構造化言語の中でも、特定メーカーに依存せずプラットフォームを超えて使え、方言が乱立しなかったC言語を教えることが一般化した。また、特定のOSやCPUアーキテクチャに依存せず、無料で使えるJavaなどの洗練された後発言語の普及により、BASICは開発環境としては選択肢のひとつでしかなくなっていった。
なお、コンパイラで開発した場合、実行ファイルとは別に、巨大なランタイムライブラリが必要となる処理系が多い。このため配布に必要なファイルのサイズが大きくなり、敬遠されることもある。
もともとVB.NETは姉妹言語のC#やF#と比べて、新しい言語機能のサポートが遅れる傾向にあったが、マイクロソフトは2023年2月、VB.NETには今後新しい言語構文を追加せず、安定性に重きを置く方針であることを発表した[7]。VB.NETのサポート自体は継続されるが、言語の進化は止まっている。
プログラミング言語の人気度 (popularity) を示す指標のひとつとしてTIOBEインデックスが存在する。この指標は実際の言語利用状況とはやや異なるが、2023年9月現在、PythonやC系統の言語が上位を独占する中、Visual Basicは一定の地位を維持している[8]。TIOBEが発表した2021年11月のランキングでは、トップ10は上から順に、Python、C、Java、C++、C#、Visual Basic、JavaScript、アセンブリ言語、 SQL、PHPとなっていて[9]、つまり2021年11月時点でVisual Basicは6位だった。一方、RedMonkによる2021年6月のランキングでは、VBは20位以内にも入っておらず圏外だった[10]。
その他の現代化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 .NETやREALbasicやActiveBasicやFreeBASIC等で、四者とも既に完全なオブジェクト指向言語になっていると言える。
構造化以前のBASIC
[編集]パラダイム | 非構造化プログラミング、命令型プログラミング、手続き型プログラミング、オブジェクト指向プログラミング |
---|---|
登場時期 | 1964年4月1日 |
設計者 | John G. Kemeny・Thomas 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のルールを説明する[11]。
行番号を持ち、プログラム本文の中に書かれるコード行はステートメント(文、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ブラウザ上でBASICの動作をエミュレートするWebサイト・Webサービスが公開されている。手軽に最低限の雰囲気を理解することができる。
- Quite BASIC (外部リンク) - ブラウザ上でBASICコードを書いてWeb上で実行できるサービス
- USO 800 BASIC (外部リンク) - N88-BASICのように利用可能なBASICコード実行サービス。Web上で動作し、サイトの外観も当時のN88-BASICさながらである。
構造化以前のBASICの具体的実装例
[編集]構造化以前の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解説」が付属した[12]。
- 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に似せたもの。
- BBC BASIC(1981年 - ) - イギリスのBBC Microに搭載されたBASIC。Locomotive Softwareが開発。
- 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の起源となった。)
- 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月にオープンソース化された[13]。ただし実行環境やバイナリは提供されていない。
- 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インタープリタ、マイクロソフト系命令セットを備えているが、直接の関係はなく、ビー・ユー・ジー社が開発した[14])
- これらは命令セットの仕様が共通なだけで、必ずしもマイクロソフト製というわけではない。
その他のBASIC
[編集]復刻機のBASIC
[編集]1980年代などのパソコンの復刻版。
- Commodore BASIC(The C64(コモドール64のフルサイズ復刻機)、The C64 MINI(コモドール64のミニサイズ復刻機)などで動く)
- N-BASIC ver 1.1 (ハル研究所から販売されているPasocomMini PC-8001で動く[15])
この節の加筆が望まれています。 |
パソコンで動く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[16] (JIS Full BASICに準拠、Windows・Linux・Mac OS用フリーウェア、英語名Decimal BASIC)
- Ultra BASIC - 株式会社ラネクシー
- 旧式構文系
- Chipmunk Basic(Windows・Mac OS・UNIX用フリーウェア、インタプリタのみ)
- PC-BASIC(Windows・Mac OS・Linux・UNIX・GPL系・GW BASIC互換エミュレート機能搭載型インタープリター)
Android OS用のBASIC
[編集]Android OS上で動くBASIC。
- Android-Basic(Android用)
- Tiny BASIC v2(タートルグラフィックスを備えた Android 用 BASIC インタプリタ)
- BASIC!(別名rfo-basic)[17]
- X11-BASIC
iOS用のBASIC
[編集]iOS上で動くBASIC。
- Hand BASIC - CBM Flavor
- BASIC-II
ゲーム機用のBASIC
[編集]- ファミリーベーシック (NS-HuBASIC)(ファミリーコンピュータ、任天堂・シャープ・ハドソン共同開発)
- PCエンジンでべろBASIC(PCエンジン用開発ツール、徳間書店インターメディアが販売、ハドソン・日本電気ホームエレクトロニクス開発)
- GAME BASIC for SEGASATURN (セガサターン、MSX-BASICライク)
- BASIC STUDIO (PlayStation 2、アートディンク開発)
- プチコンシリーズ (SmileBasic)(スマイルブーム等が開発)
- プチコン(ニンテンドーDSi)
- プチコンmkII(ニンテンドーDSi)
- プチコン3号(ニンテンドー3DS)
- プチコンBIG(Wii U)
- プチコン4 SmileBASIC(Nintendo Switch)
関連項目
[編集]脚注
[編集]注釈
[編集]- ^ GUIアプリケーション開発やオブジェクト指向プログラミング機構の搭載、OpenGLやSDL等多数のライブラリを使用可能。
出典
[編集]- ^ 用語検索 - ZDNET Japan
- ^ YouTube Dartmouthチャンネル「Birth of BASIC」
- ^ a b c d e f g h i j k l m n History of BASIC
- ^ a b 小池慎一「6.BASICプログラミングテクニック」『マイコンピュータ No.13』CQ出版社、1984年6月1日、114頁。
- ^ Xamarin.Forms using Visual Basic.NET - Xamarin | Microsoft Learn
- ^ Visual Basic in Xamarin.Android and Xamarin.iOS - Xamarin | Microsoft Learn
- ^ Update to the .NET language strategy - .NET Blog
- ^ TIOBE Index - TIOBE
- ^ あの人気言語が下降傾向?Pythonは首位維持--TIOBEプログラミング言語ランキング - ZDNET Japan
- ^ The RedMonk Programming Language Rankings: June 2021 – tecosystems
- ^ DARTMOUTH, BASIC at 50
- ^ 「BASICの海へ」──「MZ-80」伝説のマニュアル、シャープが公開 Twitterがきっかけ - ITmedia NEWS
- ^ microsoft/GW-BASIC: The original source code of Microsoft GW-BASIC from 1983
- ^ “About BUG - History”. www.bug.co.jp. 2019年11月12日閲覧。
- ^ PasocomMini PC-8001製品情報 │ パソコンミニ公式ウェブサイト
- ^ 十進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