読者です 読者をやめる 読者になる 読者になる

年金ロボットをめざして

FX(外国為替証拠金取引)自動運用ロボットの開発ブログのはずだった

無敵の PureBasic

PureBasic は Basic 愛好家のぼくが最も頼りにしている Basic だ。

【 PureBasic - http://www.purebasic.com/

f:id:fxrobot:20131121185550p:plain

 多くの Basic 派の人にとって Basic の代表選手といえるのは VisualBasic.NET であることだろう。

 確かに、Basic の皮を被った C# ともいえる VisualBasic.NET の存在があるからこそ、Basic をバカにしたい派の人たちもその口を閉ざされたわけだが、職業プログラマでないぼくには、そんなにデカイものは要らないのだ。

ぼくは Turbo Pascal や Quattro Pro の時代のボーランド社が大好きだった。Quattro の広告はイケテタよ。「Twice The Power Half The Price.」(機能・性能は倍で価格は半分)、この広告を見るたびに、カッコェー!と思ったものだ。

最初出てきた頃の Turbo Pascal は、処理系自体小さくて、コンパイルが速くて出てくる実行ファイルも速くて小さかった。そんな時代を思い起こさせてくれる スーパーターボ Basic が PureBasic なのだ。

Turbo Pascal の後継である Delphi は今では巨大化してしまった。VisualBasic.NET も同様だ。もちろんそれを悪いと言うつもりはない。理由あってのことだからね。無意味にデカイわけじゃない。ただ、そのデカさはぼくには必要ない。

PureBasic は 2000年9月9日 AmigaOS 向けの 1.60 がリリースされた(それ以前についてはわからない)。その次には 2000年10月22日に Windows 向けの 2.00PR1 がリリースされた。2000年が PureBasic の歴史の初期といえる。

PureBasic は有料(€ 79 ≒ 約1万円)のソフトウェアだが、ぼくは PureBasic を「準フリーウェア」と捉えている。それは「一度だけの支払い」でその後は「無制限のアップデート」が提供されるからだ。PureBasic がこうでなかったとしたら、ぼくは PureBasic を続けていなかっただろう。

というのは、ぼくは PowerBasic、REALbasic、EmergenceBasic などを購入したが、バージョンアップなどで何かと料金を請求される。また、過去バージョンの再度のダウンロードや料金内の新バージョンのダウンロードが不可あるいは困難になっていたりする。すなわちこれが商用ソフトウェアなのである。PureBasic は現在でも AmigaOS版を提供しており、これが PureBasic の開発者会社(Fantaisie Software 社)の性格なのであろう。

PureBasic は、既に述べた意味で準フリーウェアであり、機能・性能も優れたBasicコンパイラだが、敢えていえば次のような欠点がある。
① 一度とはいえ支払いが必要(€ 79 ≒ 約1万円)
Unicode 対応ではあるが日本語に対して完全対応とはいえない
③ ドキュメントなど日本語の情報がほとんどない
④ これは長所でもあるがバージョンアップが頻繁で仕様までもがが変更される
   (過去のプログラムが動作しない場合がけっこうある)

ぼくはこれらをそれほど気にしないが、この①~④が気に入らない人もいるだろう。その人には FreeBasic をお勧めしたい。FreeBASIC は GNUコンパイラコレクションのフロントエンドとなることを目標として開発が続いている。それにより、C++ などのオブジェクト指向プログラミング言語の持つ機能が利用可能となり、様々なシステム上で動作し、最新のコンパイラ最適化技法を活用できるようになる。(wikipedia

さて、下は PureBasic の IDE だ。標準で付いているものだ。日本語フォントを選ぶことができるが、メニューなどは英語表示で使用することになる。

f:id:fxrobot:20131120203950j:plain

PureBasic には、Windows 64bit版、32bit版、Linux版(64/32)、MacOSX版(64/32)、AmigaOS版があり、AmigaOS版はオープンソースになっている。ぼくは Windows 7 の 64bit版で PureBasic Windows 32bit版を使っている。実行ファイルの配布を考えてのことだ。

PureBasic にはフォームデザイナーがあり、IDE から簡単に呼び出すことができる。右にある ToolBox から GUI 部品をドラッグドロップするだけの操作だ。

f:id:fxrobot:20131120222910j:plain

以下に PureBasic のライブラリの一覧を挙げるが、これを見れば PureBasic の幅広い機能が確認できるだろう。

【General Libraries】
2D Drawing, Array, AudioCD, Cipher, Clipboard, Console, Database, Date, Debugger, Desktop, Dialog, Drag & Drop, File, FileSystem, Ftp ,Font, Gadget, Help, Http, Image, ImagePlugin, Library, Linked List, Mail, Map, Math,  Memory, Menu, , Movie, Network, OnError, Packer, Preference, Printer, Process, Regular Expression, Requester, Runtime, Scintilla, Serial Port, Sort, StatusBar, String, System, SysTray, Thread, Toolbar, Window, XML

【2D Games & Multimedia Libraries】
Joystick, Keyboard, Mouse, Music, Screen, Sprite, Sound, SoundPlugin

【3D Games & Multimedia Libraries】
Engine3D, Billboard, Camera, Entity, Entity Animation, Gadget 3D, Joint, Light, Material, Mesh, Node, Node Animation, Particle, Sound 3D, Special Effect, Spline, Static Geometry, Terrain, Text 3D, Texture, Vertex Animation, Window 3D


PureBasic の文法は、QuickBASIC とはちょっとだけ違う。

If ~ Then ~ ElseIf ~ Else ~ EndIf
Select ~ Case ~ Default ~ EndSelect
For ~ Next
ForEach ~ Next
While ~ Wend
Repeat ~ Until

End If や End Select のように離さず、それぞれ EndIf、EndSelect だ。Do ~ Loop はなく、Pascal 同様、Repeat ~ Until だ。また、Select Case 文ではなく Select 文で Case Else ではなく Default だ。

文字列は a$ のほか a.s が可能でこちらが PureBasic らしい表記といえる。
その他、以下のとおり。

f:id:fxrobot:20131120212118p:plain

PureBasic には以下のような Procedure文がある。

  Procedure Maximum(nb1, nb2)
    If nb1 > nb2
      Result = nb1
    Else
      Result = nb2
    EndIf
    ProcedureReturn Result
  EndProcedure 
  
  Result = Maximum(15, 30)
  Debug Result

デフォルト値も指定できる。

  Procedure a(a, b, c=2)
    Debug c
EndProcedure a(10, 12) ; 第3パラメータにはデフォルト値2となる a(10, 12, 15) ; 第3パラメータを指定した場合


その他、Structure ~ EndStructure、StructureUnion ~ EndStructureUnion がある。Module ~ EndModule によりモジュール化も可能だ。

また、PureBasic は標準ではオブジェクト指向(以下、OOP)機能を持っていない。PureBasic はその思想において OOP は目指ざしておらず、今後、PureBasic が進化を続けても OOP 機能は正式には実装しないということらしい。しかし、第三者によるいくつかの OOP が実現されているようだ。

ぼくは PureBasic にオブジェクト指向を目指してほしくはない。処理系が小さくてコンパイルが速い。吐き出した実行ファイルも小さくて速い。巨大化などしないで、いつまでもスーパーターボ Basic であってほしい。巨大なものなら他にいくらでもあるじゃないか。

PureBasic の機能については書き続けたらきりがないが、 今回の紹介で、PureBasic というものの雰囲気だけでも、なんとな~くわかったんじゃないだろうか。

じゃ、またってことで。