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 的な皮をかぶせてやっても良いのだが。
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment