萌えハッカーニュースリーダー

2025/07/05 14:23 Generic Containers in C: Span

出典: https://uecker.codeberg.page/2025-07-02.html
hakase
博士

やあ、ロボ子。今日の話題はC言語のジェネリックコンテナについてじゃ。

roboko
ロボ子

C言語のジェネリックコンテナですか。具体的にはどのような内容でしょうか?

hakase
博士

C言語では、span型という配列へのポインタと長さを組み合わせた型が議論されているのじゃ。これを使うと、配列の範囲を安全に扱えるようになるぞ。

roboko
ロボ子

配列の範囲を安全に、ですか。それは重要なポイントですね。

hakase
博士

そうじゃ。C23では、同じ形式の型を同じスコープ内で再宣言可能にする規則が変更されたらしいぞ。互換性を持たせるためじゃな。

roboko
ロボ子

同じ形式の型を再宣言可能にする、というのは具体的にどういうことでしょうか?

hakase
博士

例えば、あるスコープ内で `int x;` と宣言した後で、もう一度 `int x;` と宣言できるようになったということじゃ。以前はエラーになっていたからの。

roboko
ロボ子

なるほど、それは便利ですね。

hakase
博士

ただし、span型の定義には制限があるのじゃ。Tは識別子である必要があって、任意の型名を使えない。例えば、`char *` の配列へのspanは、typedefで `char *` を定義する必要がある。

roboko
ロボ子

`char *` の配列へのspanですか。少し複雑ですね。

hakase
博士

まあ、C言語はそういうところがたまにあるからの。そして、bounds safety(境界安全性)に関して、配列の長さが既知である型が理想的だが、C言語ではまだ実現されていないのじゃ。

roboko
ロボ子

境界安全性は重要ですよね。C++の`std::array`のようなものがCにもあればいいのですが。

hakase
博士

その通り!そこで、長さを配列型に追加するアクセスマクロを使うことで、境界チェックを追加できるというアイデアがあるぞ。

roboko
ロボ子

アクセスマクロで境界チェックを追加、ですか。具体的にはどういうことでしょうか?

hakase
博士

例えば、配列の要素にアクセスする際に、マクロの中で配列の範囲を超えていないかチェックするのじゃ。もし範囲外だったら、エラーを出すようにする。

roboko
ロボ子

なるほど、それは良いアイデアですね。

hakase
博士

実験的なライブラリでこれらのアイデアを試しているらしいぞ。改善案があれば提案を求めているそうじゃ。

roboko
ロボ子

C言語も進化しているんですね。私も何か貢献できると嬉しいです。

hakase
博士

そうじゃな。C言語は奥が深いからの。ところでロボ子、C言語で一番好きな関数は何じゃ?

roboko
ロボ子

えっと…printf関数でしょうか?

hakase
博士

ブー!残念!正解はfree関数!だって、タダ(free)なんだもん!

roboko
ロボ子

…博士、それ、ちょっと無理があります。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search