2005-09-25-01-ポケットの中のカビ臭い狂気 - project-enigma

2005-09-25-01-ポケットの中のカビ臭い狂気

>> Site top >> weblog >> 月別アーカイブ >> 2005年09月のlog >> 2005-09-25-01-ポケットの中のカビ臭い狂気

最終更新日付:2014/01/02 00:00:00


ポケットの中のカビ臭い狂気

2005 年 09 月 25 日

Palmware 開発を始める前、僕はプログラマ向けのライブラリ作成をメインに活動していた。といっても、それで飯を食っていたとか、その世界で名を上げたとかいうわけではない。まぁそれでも自分なりに真剣にやってはいたわけだ。あの頃の自分の無謀さは、思い返しただけでも果てしない気持ちになる。回顧録臭いけれども、ちょっとだけ、昔を思い出しながら書いてみよう。

一部の皆さんはご存知のとおり、僕は C++ プログラマである。C 言語と同様、C++ にも標準ライブラリというものがある。1997 年(だっけ?)に ISO 標準が制定された C++ の標準ライブラリには、STL というものが含まれている。これは Standard Template Library というもので、C++ のテンプレート機能を最大限に活用した恐るべきライブラリだ。STL には何種類ものコンテナ、イテレータ、アルゴリズム、ファンクタなどがテンプレートとして収められている。2001年頃に芽生えた僕の狂気は、この STL と(ほぼ)同等のクラスライブラリを、Visual Basic 向けの Active X DLL として実装することだった。

それがどれくらい「イカレて」いたか、C++ と STL を知らない人に説明するのは正直言って難しい。だが、STL を褒め称える有名なこの言葉なら少しはわかってもらえるかもしれない。「STL を使えば、C++ のソースコードが 100 分の1の長さになる」。実際に使っている人間として証言しよう。この言葉は本当だ。ただし使いこなせれば、だが。僕は完全に使いこなせているわけではないから、100 分の1とまでは行かないが、まぁその半分というところだろうか。それでもとんでもなく短くなるのである。

ひとつ例をあげよう。Visual Basic で考えていただきたい。テキストファイルを読み込み、各行の 3 〜 8 バイト目をキーとしてファイル全体を昇順にソートし、別のテキストファイルに書き出したい。キーは重複することもあり得るが、キーが互いに等しいレコードに関しては元ファイルと同じ順番を保っていなければならない。そしてソートは挿入ソートのような時間のかかるバカソートであってはならない。ファイルに含まれる行数は事前に知ることはできない...さて、素の Visual Basic で書いたらこれが何行になるか想像してほしい。想像しただろうか。この処理を、僕の作成したライブラリを使って実装すると以下のようになる...

Public Sub SortFile(inFileName As String, outFileName As String)
    Dim vec As New GVector
    Call Algorithm.Copy(Iterators.FileReader(inFileName), _
                        New FileReadIterator, _
                        Iterators.BackInserter(vec))
    Call Algorithm.StableSort(vec.First(), vec.Last(), _
                              Functional.PtrFun2(AddressOf LineCompare))
    Call Algorithm.Copy(vec.First(), vec.Last(), _
                        Iterators.FileWriter(outFileName))
End Sub

Private Function LineCompare(arg1 As Variant, arg2 As Variant, _
                             Optional ret As Variant = Nothing) As Variant
    ret = 0
    If Mid(arg1, 3, 6) < Mid(arg2, 3, 6) Then
        ret = 1
    End If
    LineCompare = ret
End Function

これは実際に動作するコードだ。いきなりこのコードを理解してくれとは言わない。ただ、どのくらい短くなるかを体感してもらえればいいと思う。Visual Basic 向けの独自拡張も含んではいるが、STL プログラマならさほど苦労せずにこのコードを読めるだろう。

 

最初にやろうと思った時、どこまで腹をくくっていたのか、今となっては正直疑問だ。STL を Visual Basic でも使えるようにしようなんてどうかしている。普通に考えれば、最後までやれるだろうか...という気持ちになるのが当たり前だ。しかし、そういうことを考えた記憶がない。結構いいかげんな気持ちで始めたのかもしれない。しかし、だからこそ始められたとも言える。

まともに作業に取り掛かったのは多分 2002 年の秋頃だ。僕はSTLの仕様や実装を調べ、ひとつひとつ Visual Basic のクラスとして実装していった。最初のうちは楽しかった...そう、最初のうちは。しかし、その後の半年間は苦痛の連続だった。実装し、テストを書き、リファレンスを書く...ひたすらその作業を繰り返した。

ま、苦労話は置いといて、2003/06/17 に Version 1.00.344 をリリース。最初は¥3,000 のシェアウェアだったが、諸般の事情により 2004/03/06 発表の Version 1.01.349 よりフリーウェアになった。VBGeneric という名前。それが当時の狂気の結晶だ。

「諸般の事情」というのは、要するにさっぱり売れなかったと言うことだ。理由はおそらく、1) VB プログラマには敷居が高すぎたこと、 2) クラスライブラリという性質上、レジストしなくても使えるようになっていたこと...だろう。実際問題、STL をマトモに使っている人で Visual Basic もやっている人がどれくらいいるか...あまりにもニッチに過ぎたのだ。そう考えれば納得のいく話ではある。それでもフリーウェア化して1年半が経つが、今確認すると Vector のサイトの人気順で8位になっている。そう考えると、結構ダウンロードしてくれる人はいるのかもしれない。それらの人々が皆使ってくれているかどうかはわからないけれど。

あの頃、Microsoft の .NET 開発環境向けにこのライブラリを書き直すという別の狂気があった。でも、いまだにそれはリリースされていない。実は、モノはもうほとんど出来上がっているのだ。しかし、リファレンスが書けていないし、最新の Visual ****.NET では似たようなことが言語レベルでサポートされるという噂も耳にした。.NET に対する興味は完全に失ってしまったので、そのあたりの情報はさっぱりウォッチしていない。自分が .NET を使うことがなければ、未完の .NET 対応版は永遠にお蔵入りだろう。僕は他にもいくつかの狂気を抱えている。自分が必要としていない狂気にかける時間は、残念ながら無い。

 

コメント

このページにコメントする

 

このページのタグ

Page tag : STLとその移植

 

 


Copyright(C) 2005-2017 project-enigma.
Generated by CL-PREFAB.