BASIC
[Wikipedia|▼Menu]
史上初の市販のパーソナルコンピュータとされているのは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-BASICSEGAのベーシックカートリッジ、次第にシェアを増やしたマイクロソフト製のBASIC(MBASIC、BASICA、G-BASIC、GW-BASICの移植版)や、その命令体系を引き継ぎ実装したものである、F-BASICHu-BASICカタカナで表現するG-BASIC(前述のマイクロソフトの物とは異なる)以外にも、C言語を意識したX-BASICなど、さまざまなBASICを各社が独自に開発した。

この結果、「あるパソコンのBASICで書かれたプログラムは、他のパソコンではそのままでは動かすことができない」という状態になった。
方言の例PC-8800シリーズのN88BASICのドロー画面

カーソル位置を指定する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 WindowsLinuxDOSエクステンダ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には局所変数(ローカル変数)が無いなど、他にも問題は多い。つまり、プログラムのどこからでもアクセス可能な大域変数(グローバル変数)しかなく、これもまたスパゲティプログラムを誘発する要因である。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:83 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef