ここしばらく、かなりガッツリプログラムを書いているのですが(といっても、多少まだリハビリ気味。スピード遅くてイライラする)、最近は、頑張って探さなくても、良い C++ Wrapperがありますね。

たとえば、PCRE (Perl Compatible Regular Expressions)ですけれど、Googleの人が書いた C++ Wrapper がデフォルトで入っていて、すぐに使えるようになっていた。良く考えてあって、使いやすいです。

あと、最近は、データベースは MySQL 5使ってるんですけれど、これのためのWrapper も MySQL++というのがあって、多少足りない機能もあるものの、かなり良いかんじで使えます。

C++で書くのは、最近は、徹底したポータビリティを諦めて、最近のg++でコンパイル出来て、Windowsを忘れて良いと決めれば、それほどぐちゃぐちゃとグルーマクロを書かなくても動くので、相当コンパクトに書けます。

PCREに至っては、ライブラリ「本体」を持ってきて、インストールすれば、すぐ使えるので、非常にいいです。C++も、ようやくこういう時代になったなぁと、ちょっとしみじみ。


最近気づいたんですが、長年の習慣で、コード書くときに、ポータビリティとか、再利用性とか、人に見せることとかをつい意識してしまって、本来の目的を達成するのに遠回りしてることが多かったようです(気づくのが遅い!)。

たとえば、SQLハンドルするC++のクラスは、過去12年の間に3度書いていて(ほぼフルスクラッチで書き直しをしている)、その度に、頑張ってデータベース依存性低くしようとして頑張ったけれど、結局うまくいかなかった。うまくいかない主要因は、SQLアクセスライブラリと、各社のSQLの方言のせいと、C++の標準がズルズル変化していたから。

今回書いてるプログラムも、メモリに全部展開できない分を、それこそ「外部記憶」のつもりで使うだけなので、割とイージーに書けるんですが、気がつくと、どうしても、MySQL以外でも動くように考えてる(笑)。時間が限りなく無限にあれば、それでもいいんだけど、今は結果を出すのが第一義なので、「使えるものは何でも使って、なりふり構わず」でもいいのかなと。会社にいて必死にコード書いてた時は、ここまでは割り切れてなかったと思うのです。

上記の MySQL++ なんて、最初はポータビリティ考えていたみたいですけど、途中でメンテナンスし始めた人が、MySQLの人だったせいもあって、ポータビリティが捨てられました。その関係もあって、割りとスッキリしていて、いいかんじ(デザインは、2度目に書いたコードに結構似ている)。

そんなこんなで、コードスピードが戻ってきて良い感じです。僕の場合、調子出ないと、音楽聞きながらコード書くのダメになっちゃった(集中力落ちる)んですが、調子出てくると、ハードロックかヘビメタ聞きながらやるのが一番調子良いです(先週は、1日は、Van Halen、もう1日はYMO のTechno Bibleを ずっと聞いてた(笑))。


Archived comments:

youki 19 Jul 2006

俺も ACE, Crypto++, STL, Qt とか使ってプログラム書いてます。

最近の C++ は枯れているし、落とし穴もよく知られてるし、Java みたいに言語仕様がコロコロ変わったりしないので、ソフトウェア資産を作っていくうえでは良い言語ですな。

言語屋のおもちゃになってないところがいい。

shigeya 19 Jul 2006

「言語屋のおもちゃになっていない」は、確かに今はそうですね。ANSI C++決まるまでは、そうとう擦った揉んだしてたけど、もう当分固いだろうし。

画面周りQt使ってもいいんだなぁ。Crypto++は、まだ探してなかったので、見てみます。ACEもすっかり忘れていたよ。

Kenji_JJ1BDX 20 Jul 2006

そういえばこれから触るものはC++だったんだった,というのを昨日思い出した.shigeya大人やyouki先生にくらべれば遥かにレベルの低い話だけど,精進せねば.

研究で非公開コードを書くときはポータビリティはあまり考えないで行っちゃったほうがいいというのは全く同感.long long を 64bit integerとして扱ったなあ.

blog comments powered by Disqus