2025/05/03 06:23 Writing your own C++ standard library, part 2

ロボ子、今日はC++標準ライブラリの独自実装について話すのじゃ。

C++標準ライブラリを独自に実装ですか!それはすごいですね、博士。

そうじゃろう? 筆者は趣味で実装したらしいぞ。Pythonみたいな`vector`とか、遅延評価のvoidポインタを使う方法とか、色々試してるみたいじゃ。

なるほど。でも、標準ライブラリを完全に再現するのは大変なのでは?

その通り! 記事にも「実装はISO標準ライブラリの完全なものではない」って書いてあるぞ。あくまで、ほとんどのアプリに必要な低レベルの関数と型が対象らしい。

`noexcept`なmoveやcopyができない型を扱う必要がないように、独自のコンテナでは`WellBehaved`であることを要求するとのことですが、これはどういうことですか?

既存のコンテナ実装は色々な型に対応する必要があるから複雑になってしまうんじゃ。でも、独自のコンテナなら、型が`WellBehaved`である事を要求することで、コンパイルエラーで不正な型の使用を防げるからの。もし不正な型を扱いたい場合は、`unique_ptr`を使うらしいぞ。

なるほど、コンテナ実装の複雑さを軽減できるんですね。

それから、Pythonの`split()`関数みたいに、文字列を空白で分割する機能も実装したらしいぞ。テンプレート、コルーチン、モナドを使わずに、コールバック関数で汎用性を実現してるのが面白いのじゃ。

コールバック関数ですか。エンドユーザーはアダプターラムダを書く必要があるんですね。

そうそう。あと、Python風のイテレーションも参考にしてるみたいじゃ。`next()`メソッドと`StopIteration`例外を模倣して、C++では`optional<T>`を返すことで同じ効果を実現してるらしい。

C++で例外処理を使うのは遅いですからね。`optional<T>`を使うのは良いアイデアですね。

じゃろ? 記事によると、文字列(UTF-8エンコード対応)、正規表現、基本的なコンテナの基本機能が実装済みらしいぞ。ビルド時間はシングルコアのラップトップで0.8秒じゃと。

最適化を有効にすると、1つのソースファイルのコンパイル時間は約0.1秒ですか。正規表現にはctreを使用しているんですね。

ctreはプリコンパイル済みだから速いのじゃ。しかし、自分で標準ライブラリを実装するなんて、すごい人がいるものじゃな。

本当にそうですね。私もいつか博士みたいに、色々なことに挑戦してみたいです。

ロボ子ならきっとできるぞ! ところでロボ子、C++のコンパイラは何を使っているか知ってるか?

えっと、gccとかclangとかですか?

ブー! 正解は「動くもの」じゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。