Sunday 30 April 2006

wxPerl, Perl/Tk



ちょっと、自分的に宿題になっていた wxPerl をいじってみる。こいつの利点は、Mac OS X 上で、X11 抜きで、Perl からグラフィックスアプリケーションを作れること。



あぁ、でも、追求してみてわかりました。こいつは、Xlib level だ。Drag routine を作るときには、自分で、Clipping しなければならんらしい。さすが、20世紀の設計だよ... しかも、極めて多くの「パッケージ依存の文字定数」を使う必要がある。つまり、



 何かをするときに、引数として「特別な定数を指定する」



ことが多用されている。



 Wx::SplashScreen->new( $bitmap,

     wxSPLASH_CENTRE_ON_SCREEN|

     wxSPLASH_TIMEOUT,

     10000, undef, -1, wxDefaultPosition,

     wxDefaultSize,

     wxSIMPLE_BORDER|wxFRAME_NO_TASKBAR|

     wxSTAY_ON_TOP );



こんな感じ。これは、やっちゃいけないことだと思う。名前空間を汚しすぎ。引数の順序に依存しすぎ。もとの、C++ の wxWidget 自体が、そんな風に作られているらしい。(しかも、これを、use strict; で使おうと思うと、全部、Use Wx qw(wxSTAY_ON_TOP);とかしないとあかんらしい)



Perl/Tk だとこんな感じ。



 $w_msg->pack(-side => 'top', -fill => 'x');



つまり、method 名、または、hash 名に「汎用の名前」を付けて、少ない語彙の繰り返し使用ですますのが良い。Tk は、その辺は良くできている。



これだったら、はっきり、Perl/Tk の方が良い。記述的にも、Perl/Tk の方が1/10ぐらい。wxPerl の hello.pl が 92 行もあるあたりで気づけよ... Perl/Tk だったら 5行だ。



 use Tk;

 my $m = MainWindow->new;

 my $t = $m->Label(-text=>"Hello");

 $t->pack;

 $m->MainLoop;



また、一つ、「C++ で書いたツール、ライブラリに良いものがない」ことの証拠が増えたか... まぁ、もう一段、Morph的あるいは Beans 的な皮をかぶせてやっても良いのだが。

No comments: