libc++ の品質
期日前投票を済まし、この週末は AquaSKK のβ版をリリースすべく鋭意努力していたのですが、断念しました。
結論から書くと、libc++ を使おうとしてめげました。あともう少しのところまで行ったんですけどねぇ。
ひとまず、やった作業のメモです。
- xcode のバージョンアップ
- 不具合修正:EUC-JP の全角円マークを UTF-8 に変換すると、半角バックスラッシュになる(どこかの blog でみかけました)
- 不具合修正:数値変換ができない(AquaSKK スレ #176 さんどうもです!)
- 不具合修正:skkserv 外部辞書の堅牢性向上
- 不具合修正:Java アプリで文字種切り替え文字が挿入される
- コンパイラを clang++ に変更(-std=c++11)
- ライブラリを libc++ に変更(-stdlib=libc++)
- 静的解析の実行と指摘事項の潰し込み
- 単体テストの実施
libc++ で遭遇した問題は以下の二つ。
- istringstream から int を読めない("1+2" みたいな時に 1 を読めない)
- 再起的な map を宣言できない(class A の中で、map
を持てない)
一つ目のほうは libc++ のリポジトリを確認しておおよその目安はつけました。strtoll_l を呼び出した後、戻された endptr が文字列終端と一致していない場合にエラーとしている箇所が怪しいなぁと。数値だけが連続している場合は問題ないけど、それ以外のケースが考慮されていないんじゃないかという気がします。
二つ目のほうは時間切れでまだ未着手です。個人的には、特に問題ないコードだと思っていたのですが、map の value クラスが未定義でエラーになってしまいました。まあ、言われてみればその通りなので、ポインタにして逃げを打てばいいのですが、本当にそういう対応でいいのだろうかと立ち止まり、libc++ の map を調べてみるつもりです。
libc++ はまだまだ歴史が浅いから、気長につきあうしかないですね。
ただ、現実的なこともあるので、当面の間は libstdc++ をリンクする方向で進めていこうと思います。先進的な c++11 標準ライブラリの恩恵を受けるのは、もう少し先の話になりそうです。
というわけで、年内のリリースはちょっと無理かもしれませんが、もうしばらくお待ちくださいませ。