fetus Diary
2008/06/25(水) - Symbianプラットホームをオープンソース化へ
SymbianOS の最もダメなところは、「たかが OS」がユーザランドのソースまでいちいち口を出してくるところ。
C++ ソースの変態インデント(こんなの)とか、ハンガリアンもどきの表記法(関数の引数に aHoge とか強制されるの)とか、try-catch を使わない変態例外機構(クリーンアップスタックとかいうの使うの。そもそも「例外を投げる」んじゃなくて「リーブする」らしいし)とか、関数名に NewLC みたいな変なサフィックスを要求されたり、CBase を継承しないクラスではデストラクタが呼ばれなかったり、CBase を継承したクラスは普通にスタックに積んだらいけなかったり、C++ のくせに多重継承禁止だったり(菱形継承を防ぐためらしい。Symbian では Mix-in とされ M クラスと呼ばれる純粋仮想関数のみを持ったクラス(要はインタフェース)は多重継承できる)、リソースを管理するクラスは R クラスと証する(RHoge クラスになる)とかはまあ良いとして、その R クラスは Close() メソッドで解放(普通 C++ プログラマはデストラクタで解放するように設計する。もちろん別に解放関数を用意することは珍しくないけど、解放漏れを防ぐためにデストラクタでも後始末を行う(プログラマはミスをするものだという前提に立てば至極当然の流れ))とか、もちろん STL を使っちゃいけなかったりするという「プログラマを怒らせる要因」をここぞとばかりに満載した OS ですよ。
……明らかに OS の領分を超えてるんだけどね…。これがただの「コーディング規約」ならまだマシなんだけど。
# 某所で開発している間に何回キレたか…。
そういえば、Symbian って typedef void TAny; してあって、TBool HogeL(TAny *aPtr); みたいな記法になるようにしてあるのだけど、なぜか「引数/戻り値なし」の意味の void には typedef 無いのよね。TAny はポインタ型にすることを前提にした名前だから、戻り値・引数ともなしの関数を定義するのに TAny FugaL(TAny); ってのは違うし、ほかが全部「Tなんとか」の形なのに void PiyoL(void); ってのはどうなのよ。私ならそんな変な typedef はしない、ってのはともかくとして TNothing とか TNone とか定義しておけばいいのに。それが無いせいか知らないけど、void と書かないといけないところに TAny って書いた人が居たような記憶が。それ戻り値に書いたら「何でも返す」ようにしか見えないから…。実際には「何も返さない」なのに。
# そもそも「void *」って名前がキモチワルイんだけど。「int/int *」みたいな普通の型と「void/void *」は意味が違いすぎる。
コメント
コメントはありません。