2008-06-19

簡単にはいかないeGUI++ライブラリ

http://msdn.microsoft.com/ja-jp/magazine/cc534994.aspx

イージーという名を冠していて、実際に簡単である例はないし、スーパーという名を冠していて、実際に優れている例もない。eGUI++はまさにそんなライブラリだ。

理想は評価する。現在のWin32は、識別子の命名は汚く、コードもC++とは親和性が低い。だからデザインはWin32を踏襲しない。それはいい。しかしだからといって、次のようなコードは無いだろう。

wnd<rebar> w = new_(parent);
rebar::item i(rebar::item::color | rebar::item::text);
w->add(i);

wndという名前が酷すぎる。まるで、どんな識別子でも短く省略しなければ気がすまない、POSIX信者の考え方だ。確かにタイプ数は減らせるが、クラス名としてwndは無いだろうに。new_やdelete_も鼻につく。

Windowsネイティブなのに、std::stringを用いるのは実に納得できない。やはり7-bit文字圏の連中はいつまでたっても一文字一バイト気分が抜けないものらしい。Windowsネイティブの文字コードはutf-16であり(9xのサポートは既に終わっている)、ANSIは下位互換性のためだけに残されているようなものだ。faith_and_braveはこのライブラリの流行に期待をかけているそうだが、こんなライブラリが流行った日には、いつまでたっても多言語を扱う問題は解決しない。それは後からでも追加できると反論されるかもしれないが、真に多言語を考えているならば、最初からUnicode対応にするはずで、それをしないのは作者に国際化という意識がないからである。

コードからWin32臭さを締め出す思想はいいのだが、ひとつ問題がある。プログラマはGUIのためにコードを書くのではなく、機能へのインターフェースとしてGUIを用いるのだ。機能を実装するには、Win32 APIを使わざるを得ない。なぜなら、Win32 APIが必要の無い機能ならば、今どき、わざわざC++やネイティブコードにこだわる必要は無いからだ。したがってこのコードを現実世界で使おうとすると、Win32 APIの命名規則と、省略思想の命名規則のコードとが混ざって、混沌となることは確実である。

追記

219 名前:デフォルトの名無しさん[sage] 投稿日:2008/06/19(木) 02:43:14
流行るとは思えん。
ポータブルじゃないのに、
わざわざまったく異なる思想のコードを書きたいとは思わんし、
あと、識別子の命名がやたらに省略しててキモい。


つーか今どきstd::stringを使っていて、
しかもWindowsネイティブ限定とか、ふざけているとしか思えん。


220 名前:ヽ・´∀`・,,)っ━━━━━━┓[sage] 投稿日:2008/06/19(木) 13:18:00
Viksoe先生頼みじゃ先細りだしな
ATLはともかく

221 名前:デフォルトの名無しさん[sage] 投稿日:2008/06/19(木) 14:46:43
>>219
一応、こんな記述になっているようだが。

#include <string>
#ifdef UNICODE
typedef std::wstring string;
#else
typedef std::string string;
#endif

222 名前:ヽ・´∀`・,,)っ━━━━━━┓[sage] 投稿日:2008/06/19(木) 18:33:19
きたねぇ実装だな。
_tstringよかマシだが

223 名前:デフォルトの名無しさん[sage] 投稿日:2008/06/19(木) 19:30:00
>>221
なんじゃそりゃ。
ひでぇな。

3 comments:

Anonymous said...

2ちゃんの引用の話だが、
_tstringよりまし?
_tstringの方がまだましだと思うけど。

江添亮 said...

_tstringというのは、そもそもWSDKなどにはないので、どの実装の事を言っているのかわかりませんが、大抵はまったく同じ実装です。
上記引用のtypedefがstringから_tstringになっただけです。
団子さんが_tstringよりましといっている理由は分かりませんが、察するに、たぶん_tstringが予約名だからではないでしょうか。
ひとつのアンダースコアから始まる名前は、グローバル名前空間において、予約語です。

Anonymous said...

> たぶん_tstringが予約名だからではないでしょうか。
あ、なるほど。
それならば了解です。