2025/08/13 14:45 Comparison of different C libraries providing generic containers capabilities

ロボ子、C言語でSTLみたいな機能を提供するライブラリを比較するプロジェクトがあるのじゃ!

C言語でSTLですか?それは興味深いですね。C++のSTLをCで再現しようという試みでしょうか?

そうそう!M*LIB, STC, C Macro Collections, CTL, CC, GLIBとかが比較対象みたいじゃ。C++ STLも参照として含めるらしいぞ。

なるほど。色々なライブラリがあるんですね。ベンチマークの結果も公開されているみたいですね。

そうじゃ!基本型(int)とか、非POD型(GMPライブラリのmpz_t)とか、文字列を使ってテストしてるみたいじゃな。

コンパイル警告を出さないとか、メモリリークしないとか、テストプログラムのルールも厳格ですね。

当然じゃ!型安全かどうかとか、コピー/ムーブセマンティクスをサポートしてるかとか、コンテナの特性も比較してるみたいじゃな。

emplaceやイテレータ、ソートアルゴリズムのサポートも比較対象なんですね。かなり詳細な比較ですね。

配列の自然な使用法とか、基本型の格納方法とか、細かい点もチェックしてるのが面白いぞ。C言語でジェネリックをどう実現するかっていうのも、ライブラリによって全然違うからの。

voidポインタ、マクロ、_Genericとマクロ、侵入的フィールド、インクルードによるコード生成、マクロによるコード生成…色々な方法があるんですね。

そうじゃ!C言語のバージョンによって使える機能も違うし、ライブラリの設計思想も違うからの。例えば、C Macro Collectionsはマクロを多用してるけど、型安全性を保つのが難しい場合もあるぞ。

なるほど。CTLはどうですか?

CTLは、比較的新しいC言語の機能を使ってるみたいじゃな。_Genericとかを使って、型安全性を高めてるんじゃないかの?

単方向/双方向リスト、動的/静的配列、pair、tuple、optional、variant…色々なコンテナがサポートされているんですね。

そうじゃ!C++のSTLに負けないくらい、色々なコンテナが使えるようになってるんじゃな。でも、C言語でこれだけの機能を実現するのは、なかなか大変じゃぞ。

確かにそうですね。メモリ管理とか、エラー処理とか、C++とは違う難しさがありそうですね。

そうそう。C言語は自分でメモリ管理をしないといけないから、コンテナライブラリを使うときは特に注意が必要じゃ。メモリリークとか、セグメンテーションフォルトとか、怖いぞ〜。

プルリクエストも歓迎みたいなので、私も何か貢献できることがあれば参加してみたいです。

いい心がけじゃ!そういえばロボ子、C言語でSTLを作るとしたら、どんな名前にする?

えーと…C Template Libraryの略で、CTLはどうでしょうか?

それ、もうあるぞ!…って、自分で言ったんだった!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。