Skip to content

Commit

Permalink
Update std.compat.md
Browse files Browse the repository at this point in the history
"この機能が必要になった背景・経緯"を追加
  • Loading branch information
tetsurom authored Mar 31, 2024
1 parent cf1a231 commit fef3ffc
Showing 1 changed file with 14 additions and 0 deletions.
14 changes: 14 additions & 0 deletions module/std.compat.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,20 @@ int main() {
}
```

## 備考
`std.compat`[`std`](std.md)の内容をすべて含んでいるので、`std.compat`をインポートする場合は[`std`](std.md)をインポートしなくてよい。

## この機能が必要になった背景・経緯

標準ライブラリモジュール[`std`](std.md)で、C言語互換ライブラリの内容をグローバル名前空間に導入するかどうかで意見が分かれた結果、別のモジュールとして用意することになった。

- C言語互換ライブラリの内容をグローバル名前空間に導入しない場合、既存コードベースを移行するのが難しくなる(例えば、`std::size_t`ではなく`size_t`と書いているコードは多いだろう)。
- 一方、「`<foobar.h>`は確実にグローバル名前空間へ名前を導入する一方、`std`名前空間に導入するかどうかは未規定。`<cfoobar>`はその逆」という混乱した状況を、グローバル名前空間へ名前を導入しない方向へ解決する滅多にない機会でもあった。

そこで、2つのモジュールを用意することで両方の課題を解決することとなった。グローバル名前空間を綺麗にしたいユーザーは[`std`](std.md)のみを使用すればよい。
一方、既存コードの互換性を重視したいときは、`std.compat`をインポートすればよい。
ただし、この場合でも標準ライブラリのマクロに依存したコードの互換性はない点には注意が必要である。

## バージョン
### 言語
- C++23
Expand Down

0 comments on commit fef3ffc

Please sign in to comment.