July 10, 2004

Women are statically typed, Men are dynamically typed

今日は性的型付け言語(Sexually typed language)についての新しい考えを皆さんに紹介します。これは僕の30回に及ぶ、連続ふられ経験から導き出した理論付けであり、皆さんのプロジェクト遂行における一助になれば幸いです。

まず初めに覚えておくべきことは、男性が動的型付けであるのに対し、女性は静的型付けであるらしいということです。いっぱんの男性はランタイムエラーや例外をあまり気にしません。またトライすればいいかとおもいます。しかし女性にたいしてランタイムエラーはときとして致命的です。なぜならシステムの切り替えバッチのように、実行のチャンスが一度しか与えられていないからです。

ですから、とにかくコンパイル時にエラーのないよう、例外の発生しないように気を使わなければなりません。そのためには、脳内の言語をJavaからC++に切り替えましょう。ましてやスクリプト言語など論外です。

ぼくがいままでとってきた間違いはこうでした。


try {
    if (we.passionatelykissed()) {
        we.sex()
    }
} catch (Java.Sex.Exception jse) { }

このコードの問題点はJava.Sex.OperationNotGranted extends Java.Sex.Exceptionからは復帰することが困難らしいということです。そもそもcatch節になにを書いていいのか良く分かりません。このミスのせいで、ぼくは何度も痛い目にあってきました。ですから、下のようなコードにすると良いのではないかとおもいます。

if (we.passionatelykissed()) {
    if (we.granted(Java.Sex.Sex)) {
        we.sex()
    }
}

仮に例外から復帰したとしても、例外の発生自体がリソースリークなどを引き起こし、最終的には停止するのではないかという経験則もあります。どのようにすればリークを防げるのかは、まだ分かっていません。

次の課題は、さらに実行時エラーを減らすためにformal verificationを導入することです。そもそも恋愛がPに属するのかNPに属するのかも明らかではありません。Copeland et al. (Prentice Hall, 1998)では恋愛は基本的なテンプレートとフレームワークによって制御できる確率的な事象であると捉えています。

確率的な事象であるならばソフトコンピューティングやマルコフモデル(やベイジアン)などの手法も必要となってくるかもしれません。果たして筆者の手に負える問題なのかどうかはわかりませんが、この分野におけるさらなる発展を目指して研究を続けていきたいとおもいます。

Posted by arai at July 10, 2004 08:53 AM
Comments

こんにちわ。なにやら難しそうな理論を研究しているようですが、成果が出たら発表をよろしくお願いします。
さて、素朴な疑問ですが、女性に対するランタイムエラーは致命的ということなのですが、男性に対するランタイムエラーの場合には実行のチャンスが複数訪れるのであまり気にしなくていいということなのでしょうか。

Posted by: ymd on July 10, 2004 11:03 AM

そうおもいます。男性はリトライするし、リトライを受け付けるけれど、女性はリトライしないし、リトライを拒絶するということでしょうか。

あと僕が今年に入って学んだことは、女性にとってキスをすることに何ら特別の意味はないということです。男性にとってはあるていど意味を持っているとおもうのですが。

Posted by: arai on July 10, 2004 10:58 PM

この高級言語をコンパイルして
オブジェクトコードレベルで「実行」に
移すのも生々しくて
大変そうですねぇ(^^;

Posted by: Honda on July 12, 2004 12:36 AM

テンプレートメタプログラミングの応用が解決するべき問題として、「いつ」コンパイルするかという問題があげられるのではないでしょうか。たとえば、次のようなコードをコンパイルするのは、対象の性的指向や性別が判った後でなければなりません(そして、コンパイル時にエラーが発見されます)。

#include <boost/static_assert.hpp>

template <
  bool T_IS_HETERO,
  bool T_IS_MALE,
  unsigned int T_AGE>
class Person_Traits {
public:
  static const bool IS_HETERO = T_IS_HETERO;
  static const bool IS_MALE = T_IS_MALE;
  static const unsigned int AGE = T_AGE;
};

template <typename T_Traits>
class Person {
public:
  typedef T_Traits Traits;

  template <typename U_Traits>
  void make_a_data_with(Person<U_Traits>& rhs) {

    static const bool BOTH_ARE_HETERO
      = (Traits::IS_HETERO && U_Traits::IS_HETERO);
    static const bool BOTH_ARE_NOT_HETERO
      = ! (Traits::IS_HETERO || U_Traits::IS_HETERO);
    static const bool DIFFERENT_SEX
      = (Traits::IS_MALE != U_Traits::IS_MALE);

    BOOST_STATIC_ASSERT((BOTH_ARE_HETERO && DIFFERENT_SEX)
      || (BOTH_ARE_NOT_HETERO && ! DIFFERENT_SEX));

    // ...
  }
};

int main(int, char* []) {
  Person<Person_Traits<false, true, 25> > a_male;
  Person<Person_Traits<true, false, 18> > a_female;

  a_male.make_a_data_with(a_female);
  return 0;
}

Posted by: moyu on July 12, 2004 03:34 AM

あと追加で、
男女におけるInstruction Set Architectureは
どうあるべきか?なぞ提案したいと思います。

それと、Out Of Order実行はアーキテクチャ的に
無理かも・・

Posted by: Honda on July 12, 2004 11:00 PM

実際に並列化と投機的実行をしてるけしからぬひとはいます。同期などのwaitが長いので、その間に別の女性の処理を実行することで効率をあげるわけです。
とあるプレイボーイの友達などは、同時実行数を6くらいにしてパイプラインのストールを0にしていました。おそるべし。

Posted by: arai on July 12, 2004 11:58 PM
Post a comment














Please enter this 6digits Security Code (for SPAM's sake...).
spam対策のため6桁のセキュリティコードを入力してください。