libc++ の品質

期日前投票を済まし、この週末は AquaSKK のβ版をリリースすべく鋭意努力していたのですが、断念しました。

結論から書くと、libc++ を使おうとしてめげました。あともう少しのところまで行ったんですけどねぇ。

ひとまず、やった作業のメモです。

  1. xcode のバージョンアップ
  2. 不具合修正:EUC-JP の全角円マークを UTF-8 に変換すると、半角バックスラッシュになる(どこかの blog でみかけました)
  3. 不具合修正:数値変換ができない(AquaSKK スレ #176 さんどうもです!)
  4. 不具合修正:skkserv 外部辞書の堅牢性向上
  5. 不具合修正:Java アプリで文字種切り替え文字が挿入される
  6. コンパイラを clang++ に変更(-std=c++11)
  7. ライブラリを libc++ に変更(-stdlib=libc++)
  8. 静的解析の実行と指摘事項の潰し込み
  9. 単体テストの実施

libc++ で遭遇した問題は以下の二つ。

  • istringstream から int を読めない("1+2" みたいな時に 1 を読めない)
  • 再起的な map を宣言できない(class A の中で、map を持てない)

一つ目のほうは libc++ のリポジトリを確認しておおよその目安はつけました。strtoll_l を呼び出した後、戻された endptr が文字列終端と一致していない場合にエラーとしている箇所が怪しいなぁと。数値だけが連続している場合は問題ないけど、それ以外のケースが考慮されていないんじゃないかという気がします。

二つ目のほうは時間切れでまだ未着手です。個人的には、特に問題ないコードだと思っていたのですが、map の value クラスが未定義でエラーになってしまいました。まあ、言われてみればその通りなので、ポインタにして逃げを打てばいいのですが、本当にそういう対応でいいのだろうかと立ち止まり、libc++ の map を調べてみるつもりです。

libc++ はまだまだ歴史が浅いから、気長につきあうしかないですね。

ただ、現実的なこともあるので、当面の間は libstdc++ をリンクする方向で進めていこうと思います。先進的な c++11 標準ライブラリの恩恵を受けるのは、もう少し先の話になりそうです。

というわけで、年内のリリースはちょっと無理かもしれませんが、もうしばらくお待ちくださいませ。