先日、GoogleはAbseilというライブラリを公開した。
abseil/abseil-cpp: Abseil Common Libraries (C++)
その中身を見てみたが、どうもその価値がよくわからない。
その大半は、C++14/17風の標準ライブラリのC++11による実装だ。C++14はすでにGCCもClangも実装し終えており、C++17の完全な実装も時間の問題だ。このようなライブラリを使うことはむしろ最新のC++規格の普及を妨げる。
曰く、「Abseilは完全なC++14/17実装では標準ライブラリのtypedefになる」と。しかし、それで問題が解決するのであればさっさとC++コンパイラーのバージョンを挙げたほうがよい。
containerには変わり者がある。inlined_vector<T, N>はstd::stringのSSO(Small String Optimization)をvectorで実装したものだ。N個の要素のストレージはvectorのオブジェクトの中に確保されるので、動的メモリ確保がいらない。N個を越える要素を扱うときには動的にメモリが確保される。注意しなければならいのは、N個を超えた要素を扱うときはvector内部に確保したN個のストレージは無駄になるということだ。
fixed_arrayはクラスオブジェクトに256バイトのストレージを確保し、その範囲に収まる場合はそちらを使うことで動的メモリ確保を回避するクラスのようだ。
我々はC++の最新の規格を実装したC++コンパイラーをいち早く使えるように努力すべきであり、それにはMicrosoft WindowsとRHELを使わないことがまず第一歩となる。
組み込み系だとC++11で止まっているコンパイラがあったりするので、そういうとこに需要はあるのでは。
ReplyDelete