C++
C++11
C++17
C++20
cppnow

C++ Now and TomorrowでBjarne Stroustrup氏になぜchar8_t型がないのか聞いてきた


C++ Now and Tomorrow

2018年7月23日、東京大手町のMorgan StanleyにてC++ Now and Tomorrowが開催されました。

Cities Ckylineをやっていたら家を出るのが遅くなって、16:00開始なのに東京駅に16:37に着きました。そこからOtemachi Financial City South Towerまではすぐについたんですが、受付が大量にあるオフィスビルあるあるに引っかかってさまよいにさまよった挙げ句、会場入りは17:00でした。

入るとBjarne Stroustrup氏が、C++におけるジェネリクスとC++20のconceptの話をしていました。

その後、別の人が金融・株分野での高速な動作の要求される世界の紹介があり、質疑応答、解散、のち個別に質問がありました。

本当は質疑応答でC++のNetworkingと金融の話を聞こうと思ってたんですが時間の関係で私の前の人で打ち切られてしまったのでそれはまあ誰かが聞いてくれるでしょう。


char8_t型とは

大学の試験が終わったら追記します

別の記事として執筆しました

C++標準化委員会、ついに文字とは何かを理解する: char8_t

char8_t型はC++20に入りましたね!


問いかけようにも英語力がない

英語は辞書があれば読めるけど、会話とか無理。圧倒的無理。英検2級なんてそんなもん。

まあいくつかキーワードを紙に書いて見せたりしながら質問したんですが。


注意

そういうわけで下記内容はちゃんと私が聞き取れていたのか、一切の保証はありません。


本題

なぜchar8_t型はC++にないのでしょうか?グダグダな問答はもはや言語化不能なので割愛して整理して紹介します。


char16_t/char32_tはUTF-16/UTF-32を保証するためのものではない

C++11でchar16_t/char32_tが導入されましたが、これはUTF-16/UTF-32を保証するためのものではなく、16bit、32bitの文字型であることを示すものであると言うのがBjarne Stroustrup氏の主張と思われます。

実際C++規格ではchar16_t/char32_tはUTF-16/UTF-32を保証しません。__STDC_UTF_16__/__STDC_UTF_32__が定義されているときのみUTF-16/UTF-32を保証します。

するとchar8_tというのは8bitの文字列型と捉えるべきということになり、それってすでにcharがあるじゃんとなってしまう。


8bitな文字エンコードはUTF-8だけじゃないよね?

Bjarne Stroustrup氏曰く、日本語にはSJISがあるし、そもそもASCIIあるやん。なんでUTF-8だけ?という感じのことを言っていたように思う。

C++がUTF-8に媚をうっちゃまずいとかそういうことだろうか。


文字エンコードの保証はlibraryで

UTF-8を保証するchar8_tがあればC++17で追加されたfilesystem libraryのu8pathみたいにoverloadできないものを作らなくて済むやん?という感じのことを聞いたところ、そういうのはlibraryで。という回答が。


感想

それでもUTF-8を保証する型はほしいので積極的に声を上げ続けて行きたい。


余談

char8_tってどう発音すればいいの?なんていう質問をしたら、「ちゃー、エイト、てぃー」と発音してくれた。


License

CC BY 4.0

CC-BY icon.svg