2010-06-10

C++のlocaleがクソすぎる

C++のlocaleについて、本気を出して規格を読んだ。これはクソだ。

暗号のような名前、無意味に多いクラスとメンバー。規格の文面も非常に読みにくい。当時、これを設計した人間は、文字に対する理解の乏しい、テンプレートの理解出来ない、オブジェクト指向(笑)脳の権化に違いない。

そして、結局こんな膨大で複雑なクラス群で何が出来るかというと、22.3.3 Convenience interfaces [locale.convenience]に記述されている、「便利なインターフェース」だけしかできぬのである。

すなわち、isspace, isprint, iscntrl, isupper, islower, isalpha, isdigit, ispunct, isxdigit, isalnum, isgraphの分類と、文字コードの変換である。

私の見たところでは、文字コードの変換は、設計がまずいので、まともに使うことは出来ない。連中は、文字型は、charのみであるという前提で設計している。テンプレートを使いながら、ジェネリックではない。charこそが正義であり、正統な文字型たる資格を有する。wchar_tその他の実装依存の型、あるいはユーザー定義の型は、根本的に邪道であり、異質であり、野蛮で未開な土人の文字のために仕方がなく用意されている異教徒の型であるという思想がありありと見える。これでは何のために、charTというテンプレートパラメーターがあるのかわからない。

ここまでひどいとは思わなかった。結局、当時はcharとwchar_tしかなく、今以て多くの南蛮人のC++プログラマは、wchar_tはマイクロソフトの独自拡張だと思っているフシがあるので、しかたがないのだろう。

理想的には、localeは設計しなおすべきである。

No comments: