型と集合

風邪引いた。

http://d.hatena.ne.jp/nowokay/20090308 をみてて思ったのですが、id:SiroKuro さんが議論していたことは

前提

  • クラスの定義がまずある
  • 任意のクラスの定義Dに対し、型type(D)が定義される
  • 任意のクラスの定義Dに対し、クラスclass(D)が定義される

命題

  • type と class は同型か
    • (むしろ、type, classをどう定義すれば腑に落ちるか)

ということであると思ってて、ZFCっぽくない集合がどうとかって言うのは本質から外れるんじゃないかなぁ。もちろん制約のひとつであるとは思いますが。

クラス、値、型

「クラスは型である」は間違いである - SiroKuro Pageを読んで少し考えてみた。

とりあえず、私のボキャブラリでは「値」がないと型を説明できなかった。

まずは、値と型の関係を定義する。

  • すべての値は型をもつ
  • 型はその値に対する操作に制約を課す
  • 型はその値に対する操作を規定する

で、次のクラスの宣言が対応する型と、その制約を定義する。

  • クラスの宣言はそれと同じ名前を持つ型を定義する
  • クラスの宣言はそれが定義する型に許された操作を規定する

最後に、インスタンスがその型に属することを定義する。

  • クラスインスタンス生成式の評価結果である値は、その対象となるクラスの宣言が定義する型をもつ

普通の文脈だと、「クラス」って言う用語は「クラスの宣言」の意味でつかってて、「型(クラス型)」って言う用語は「クラスの宣言を指定するnominalな何か」の意味で使ってるイメージが強い(「たまにJavaScriptには型がない」という記述も見かける)。
なお、私は「クラス」「カインド」「ドメイン」をそれぞれ「型」に近い意味で使ってることがあります(それぞれちょっとずつニュアンス違いますけど)。なんかそんな感じでごっちゃになってるだけじゃないのかな、と思ったり。

クラスの宣言とクラス型がごっちゃになってるなら、どの辺に共通点があるのか知りたい。

javacでヒープ汚染せずに代入文だけでクラッシュ - その後

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6806876
javacでヒープ汚染せずに代入文だけでクラッシュ - しげるメモのバグレポ送ったら登録されてた模様。

コンパイラのカテゴリとして送ったはずなのに、JavaのSpecificationのバグとして登録されてる…。Evaluationの項にも書いてありますが、javac(というかJLS3)では、intersection typeがnon-reifiableでないという認識になってるみたいですね*1。たぶん、この前のバグは氷山の一角だと思います。

ちなみに、英語がひどいのは仕様です。

*1:クラスファイルの仕様を考えるとどう考えてもreifiableではないのですが

Ganymedeのテンプレートを使う

Eclipse Ganymedeでテンプレートがかなり便利になりました。
具体的には

  • コンテキストが細かく指定できるようになった
  • 変数の属性が指定できるようになった
    • 引数とか型とか
  • 別のところに命令を出せるようになった
    • インポートの追加など

あたりがパワーアップしてる模様。

テンプレートは Preferences の Java > Editor > Templates で編集できます。

続きを読む

javacでヒープ汚染せずに代入文だけでクラッシュ

寝ようと思ったら思いついた。

public class Main {
    public static void main(String...args) {
        Comparable<?>[] c = method(1, 1L);
    }
    static <T> T[] method(T...ts) {
        return ts;
    }
}

これ、javacで警告でないけど実行するとClassCastException発生。言語仕様違反です。
おそらく、new T[ ]するときにreifiableな型の配列作ろうとしてイレイジャ変換かけている(erase(lub(Integer, Long)) = erase(Number & Comparable<...>) = Number としている)のに、戻り値にそれ伝播させてなくてT[ ]のまま使ってる。

明日まとめなおす予定。

なんだこれ

権利者側は2008年12月に、ニワンゴの動画投稿サイト「ニコニコ動画」にあるアンケート機能「ニコ割アンケート」を用い、補償金制度に関する調査を実施。これによると、私的録音に用いる機器はパソコンが72.4%と多く、これを基に試算すると「11〜39歳の個人がパソコンに保有している楽曲は239億曲を超える」(日本音楽著作権協会の菅原瑞夫常務理事)

「20XX年モデルには乗らない、パソコンにも補償金を」 | 日経 xTECH(クロステック)

インターネットの普及率は100%(インターネット上のアンケート調査による)的なにおいを感じた。