LinuxでBASICを

BASICほど、長年にわたって人気を保ち続けている言語も珍しい。10年ほど前までは、プログラマが最初に触れる言語といえばBASICだった。

実際、BASICとは「Beginner’s All Purpose Symbolic Instruction Code」の略だ。BASICを勉強したことがあっても、Linuxでその知識を活用することは難しい。なぜなら、Linuxに実装されたBASIC言語がありさえすればよいというものではなく、自分が慣れ親しんだBASICに似たスタイルを持つBASICの方言を探し出さなくてはならないからだ。

歴史のおさらい

「BASIC」といえば何を指すのかは、誰でも知っている。しかし、一口に「BASIC」といっても、低機能で制限の多い言語インタプリタから、強力で高速なコンパイラまで、多くのバージョンがあるのだ。

たとえば、かつてGW-BASICと呼ばれていた、DOSに組み込まれていたBASICを考えてみよう。これは小さなBASICインタプリタで、PCマニアはまずこの言語を触るのが普通だった。変数名は2文字で、コード行の前には行番号が付き、I/Oのオプションも限られているなど、非常に制限が多かった。

その後何年かして、Windowsプログラミングでは、はるかに複雑なVisual Basic(Microsoftは何かと小文字化したがる傾向がある)が主流になった。このBASICでは、コンパイラと長い変数名を使用し、オブジェクト指向の設計が可能だ。また、画面ベースのフォームを作成する機能が統合されている。

この2つのBASICは、のちにAlpha/VMSシステム上でDEC BASICと呼ばれることになるDigital Equipment Corporation社のVAX BASICとはかなり異なっている。VAX BASICは、非常に強力な関数ライブラリ、行番号の使用の制限、Motifを使用したウィンドウの作成などを特徴とするコンパイラだ。

BASICの方言についてまだ具体的に見てきていないが、かつては、すべてのOSが独自のBASICを持ち、そのそれぞれが異なっていた。次のような簡単なプログラムさえ、すべてのバージョンで動作するとは限らなかったのだ。

100 PRINT "Hello World"
200 END

Linuxのディストリビューションでは、BASICの選択肢は限られているか、まったくないかのどちらかだ。しかし、Freshmeat.netやSourceForge、Googleなどで検索してみると、選択肢は数多くある。このギャップはどこから来ているかというと、まず、Linux対応のBASIC言語は、かなりの数がいまだ作成中であるということが原因として挙げられる。まるで、プログラマが懐かしさのあまり、余暇を利用して作っているかのようだ。

私が考える2つ目の理由は、BASICに数多くの方言があることだ。BASICのどの機能を実装すべきかという共通の認識がほとんどないため、多くのプロジェクトは非常に少人数で行われている。

Linux向けのBASICプロジェクトをすべて挙げることはできないので、重要なものだけをいくつか見ていくことにしよう。

シンプル

PC GW-BASICを彷彿とさせるようなBASICをお望みなら、 Chipmunk BasicBywater BASICの2つがお勧めだ。いずれも王道の、コマンドラインベースのBASICインタプリタで、かつてのDOS GW-BASICに似た外観になっている。ただし、一字一句違わないリエンジニアリングというわけではない。

DOS時代の終盤に事実上のPC BASICになったQuickBASICが懐かしいというユーザにぴったりなのが、QB2Cだ。フリーウェアと有料版の2種類があり、45ドルの有料版にはいくつかの拡張機能が含まれている。このプログラムはQuickBASICのソースプログラムをコンパイルできるよう、Cに変換するものだ。

続いてwxBasicは、QuickBASICの構文を拡張している。これはクロスプラットフォーム(LinuxとWindows)のインタプリタだ。wxWindows機能を備えていることにより、グラフィカルなアプリケーションを作成できる。まだ作業中であり、現在、大幅な修正が行われているところだ。バージョン0.52が最新の安定版だ。

Visual

Linux上でVisual Basicやそれに近いものを使いたいという人もいるだろう。Gambasは、オブジェクト拡張、主要なオープンソース・データベースへのアクセス、Visual Basicから移行してきたユーザにとって親しみやすい開発環境などが用意され、なかなかよくできているようだ。また、「Tip of the Day」機能もあり、Gambasを初めて使うプログラマに有用な情報を提供する。これに代表されるような使い勝手は、多くのプロジェクトが最後の最後までなおざりにしてしまっている点である。

もう1つ、おもしろいものにHBasicがある。これは、Visual Basicと同様に統合されたIDEを持つオブジェクト指向言語である。しかし、このコンパイラは、QtライブラリやdotGNUの.NET実装を使用して出力を作成することもできる。SQLコマンドを埋め込んで、MySQLのようなデータベースにアクセスすることも可能だ。また、オンライン・マニュアルが充実している。 Gambasと同じく、HBasicは開発中で、v1はまだリリースされていない。現在のバージョンは0.9.5だ。

最後に、Phoenix Object Basicを紹介しよう。これはシェアウェア・ライセンスの下で公開されている(提供者によれば、他者に属している知的財産をソフトウェアからすべて取り除けばオープンソースにできるということだ)。これは、Visual Basicプログラマが容易に習得できるよう設計された、クロスプラットフォームのオブジェクトベースBASICだ。

第一線のBASIC

LinuxでDEC BASICまたはVAX BASICに相当するものは、いずれも商用だ(非商用のきちんと動くソリューションを知っている方は知らせてほしい)。ここで紹介する2つのツールは、Sector 7のVX/BASIC解析コンパイラとAccelr8のOpenBASICクロスコンパイラだ。どちらの製品も、世に出てからしばらく経っている。1995年に私がスタッフに会ったときには、VX/BASICはSector 7の自慢の種であった。VX/BASICは、期間限定のデモ版がWebサイトから入手できる。一方、OpenBASICを利用するは、ベンダによる何らかのセットアップが必要なようだ。

私は、unmbasicという非商用のプロジェクトを発見した。これは、University of New Mexicoのあるプログラマが行っているプロジェクトだ。一部の人々は、これがかつてVax-Basic(DECのVAX BASICと名前が酷似している)と呼ばれていたと主張しているが、manページを見ると、これはIBMのVS BASICをモデルに作られたと書いてある。unmbasicは行列計算をサポートしているが、この機能をうまくリンクさせることができなかった。コードに適切な修正を加えても同じであった。

その他

ほかにも、BASICの方言を実装しようとするプロジェクトはいくつかある。BrandyはBBC Micro BASICをエミュレートするものだ。また、開発が遅れているらしいGNU/Liberty BASICは、Shoptalk SystemsのLiberty BASICを模倣しようとする試みだ。

1988年に初めて開発されたXBasicは、LinuxでもWindowsでも使用できる、成熟したBASIC言語だ。構文はどことなくQuickBASICに似ているが、Visual Basicのようにビジュアルなアプリケーションを作成することができる。長年の間使われ続けているということは、実際の開発にも利用できるレベルに達しているということだろう。現在のバージョンは6.2.3だ。

完成度の高いソリューションをもう1つ紹介したい。「Yet Another Basic」、略してyabasicだ。BASICの伝統的な構文に近いので、1990年以前にBASICを学習したプログラマなら、yabasicの習得にはそれほど時間がかからないだろう。行番号はオプションで、オブジェクトは登場しない。また、単純なグラフィック・コマンドのセットが用意されている。しかるべきビルトイン関数が含まれており、パフォーマンスはなかなかのものだ。

Web向けのBASICとしては、ScriptBasicがある。これはマルチプラットフォームのインタプリタ/コンパイラで、型指定のない変数、行番号の不採用、すばやい実行が特徴だ。外部モジュールによって、CGIの処理やMySQLデータベースへのアクセスなどの機能を追加すれば、Webサーバのバックエンド処理を行わせることができる。有償サポートもある。

お分かりのとおり、Linux向けのBASIC実装は数多く存在する。ここでは紹介しなかったが、開発中のものも多くある。異なるプラットフォームで、現在使っているものとまったく同じBASICを見つけるのは難しいが、移行が可能である程度に似たものは見つかるだろう。

Russell Pavlicekは、ビジネスでのLinuxの利用を専門に扱うコンサルタント、そしてライターである。週1回のWeb番組『The Linux Show』のパネリストであり、多くのLinux関連Webサイトに協力している。かつては『InfoWorld』誌でオープンソースに関する記事を執筆していた。