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

methaneのブログ

このブログに乗せているサンプルコードはすべてNYSLです。

C++とオープンソースプロジェクト

最近、仕事関係でswfmillというツールを触っている。今の職場はオープンソースへのコミットを推奨しているので、仕事の時間を使った改造のうち、身内以外でも役に立つ機能はパッチを作って本家に送っている。
しかしswfmillの作者は、Linux上でのC言語による開発には慣れているようだけれども、C++に関しては初心者らしい。文字列を、new charで確保するのに一部strdup()((free()で開放しないといけない))で確保したものが混ざっているし、削除するときは全部まとめてdeleteになっている((をつけていない))。基本型の配列ならnewもnewもmalloc()されるのかもしれないけれど、よくこれでコンパイル通ってセグフォしないで動くなと感心する。
個人的には文字列にはstringやstringstreamみたいなC++標準ライブラリを使いまくりたいのだが、あまりにも元のソースと空気の違うコードをパッチとして送るのは気が引ける。でも、ローカル版と本家へのフィードバック版を別物にするのも面倒だ。仕方なく、C言語のような、C言語よりも面倒なコードを書いていた。((iconvを使うときrealoc()が無いのでnew
を2倍で取り直したり))
「やりかたはいくつでもある」言語でチーム開発しようとすると、先にルール決めをしないといけなくなるから、小規模〜中規模チームでは面倒だと痛感した。
メジャーなコンパイル&ネイティブ型オブジェクト指向言語をLLに例えると、C++Perl、DはRubyで、Pythonに相当するメジャーが存在しないのだと思う。「半年前に書いたコードが読めない」ような汚い構文よりも、「半年前に書いたコードが動かない」後方互換性の無さの方が嫌で、C++からDに移行できない。いや、D1.0ならもうPythonの感覚で使って良いのか?