2009-01-01から1年間の記事一覧

思いついたこと (3)

メタモデル記述をJavaで書いて解釈するってのが前回の主張ですが、GAE以外のケースでいくらかうまくいかないものを発見。 たとえば、HogeがFooを参照していて、それぞれのメタモデルがHogeMetaとFooMetaであるとすると、HogeMetaは次のように書かなきゃいけ…

思いついたこと(2)

JDOはどう考えてもDatastore Low Level APIと相性が悪い Low Level APIはEntityを生で扱うあたりがありえない Javaはかなり厳格にnominal typeを扱うので、Pythonのような無茶がしにくい というあたりで、モデル記述からエンティティモデルを自動生成するス…

思いついたこと

寝ようと思った瞬間になんか思いつくのはもはや呪い。 @Dao(Hoge.class) public interface HogeDao { @Read Hoge get( // WHERE email = :email AND ANCESTOR = :parentKey @Parent String parentKey, String email ); @Read @OrderBy("date asc") List<Hoge> get(</hoge>…

Least Containing Type Argument の計算がおかしい?

めも。 where lcta() is the the least containing type argument function defined (assuming U and V are type expressions) as:lcta(U, V) = U if U = V, ? extends lub(U, V) otherwise lcta(U, ? extends V) = ? extends lub(U, V) lcta(U, ? super V) …

SunのコンパイラとEclipse JDTで動きが違う(7)

下記はJDTでエラー。 static void f() { int[][] a = null; int[][][] b = null; Object[] tt = tt(a, b); // error@JDT } static <T> T tt(T a, T b) { return a; } 次元数が違うプリミティブの配列型を渡したときにエラーになる。</t>

SunのコンパイラとEclipse JDTで動きが違う(6)

f()の中身はJDTではすべてOK、javacでは全滅。なんか代入コンテキストの判定がおかしくない? private void f() { if (t()) {} assert t(); int a = t() ? 1 : 2; for (;t();) {} while (t()) {} do {} while(t()); System.out.println((new int[t()])[t()])…

コンテキストを利用する式

メモ。コンテキストによって動作が変わるもののうち、忘れそうなもの。 (こういうのってレフトコンテキストとか呼ぶんでしたっけ)

finalでないprotectedフィールドの使い道

思いつきメモ。 class Hoge { static interface Expr {} static class Add implements Expr { protected Expr left; protected Expr right; } static class Sub implements Expr { protected Expr left; protected Expr right; } static class Value impleme…

メソッド呼び出しの型推論を追いかける(前半)

メソッドの型推論エンジン作ってて、そのテストケースの洗い出し中。 Java言語仕様(第3版)の15.12.2.7 Inferring Type Arguments Based on Actual Argumentsを私なりに解説してみようと思います。理解してしまえば、そんな実装が難しいものではありません。…

SunのコンパイラとEclipse JDTで動きが違う(5)

今回はちょっと難易度高め。 メソッドの型推論にちょっとした穴を見つけたので動作確認してたら動きが異なりました。捕捉変換に関する覚え書き - しげるメモの概要をつかんでないと何言ってるか分からないかもしれません。

捕捉変換に関する覚え書き

まじめにJavaの型推論書いてるのでメモ。capture-#xとか分かるようになるかも。 レビューに付き合ってくださる方は Java SE Specifications からPDFをダウンロードしておくとよいかと*1。 *1:リンク貼るのが面倒になった

型推論のちょっとしたこと

List<null>型を作れないか考えてて全然関係ないこと思いついた。 void f() { String a1 = id(null); // ok String a2 = id(id(null)); // error String a3 = id(a3 = id(null)); // ok } <T> T id(T t) { return t; } 「制約 null << T のとき、Tに課せられる制約」を</t></null>…

可視性周りの覚え書き

Java言語仕様はまとまってなくて情報が点在している気がする。ということでメモ。

コンストラクタ周りの覚え書き

じぶんめも。

なに書くかなあ

と考え中

型と集合

風邪引いた。http://d.hatena.ne.jp/nowokay/20090308 をみてて思ったのですが、id:SiroKuro さんが議論していたことは前提 クラスの定義がまずある 任意のクラスの定義Dに対し、型type(D)が定義される 任意のクラスの定義Dに対し、クラスclass(D)が定義され…

クラス、値、型

「クラスは型である」は間違いである - SiroKuro Pageを読んで少し考えてみた。とりあえず、私のボキャブラリでは「値」がないと型を説明できなかった。まずは、値と型の関係を定義する。 すべての値は型をもつ 型はその値に対する操作に制約を課す 型はその…

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

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6806876 javacでヒープ汚染せずに代入文だけでクラッシュ - しげるメモのバグレポ送ったら登録されてた模様。コンパイラのカテゴリとして送ったはずなのに、JavaのSpecificationのバグとして登録されて…

Ganymedeのテンプレートを使う

Eclipse Ganymedeでテンプレートがかなり便利になりました。 具体的には コンテキストが細かく指定できるようになった Java/JavadocだけじゃなくてJava statements, Java type membersとか 変数の属性が指定できるようになった 引数とか型とか 別のところに…

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発生。言語仕様違</t>…

なんだこれ

権利者側は2008年12月に、ニワンゴの動画投稿サイト「ニコニコ動画」にあるアンケート機能「ニコ割アンケート」を用い、補償金制度に関する調査を実施。これによると、私的録音に用いる機器はパソコンが72.4%と多く、これを基に試算すると「11〜39歳の個人…

諸々

土曜日から気管にくる風邪を患ってしまい、気管支炎でおとなしくしてます。Genericsについてまとめたエントリでも書こうかなと思ってJavaの入門書をいくつか流し読みしてみたのですが、なんかGenericsをみんないっせいにスルーしてますね…。やっぱり敬遠され…

SunのコンパイラとEclipse JDTで動きが違う(4)

型推論の正解が分からない - しげるメモからの派生。型推論で出現する無限型の取り扱いについて、SunのjavacとEclipseのJDTで微妙に動きが違う。

型推論の正解が分からない

自分めも。だけどわかる人教えてください。 public static void main(String...args) { Integer a = 1; Long b = 2; Object result = method(a, b); // resultの型は? } static <T> T method(T a, T b) { return null; } このmethod(a, b)の型推論で、Tはどの</t>…

オーバーロードの仕組みをサンプルで

オーバーライドの仕組みをサンプルで - しげるメモでオーバーライドをやったので、今回はオーバーロードについて自作してみます。 (一応)オーバーロードの仕組みを説明しておくと、Javaでは同じ名前の引数が異なるメソッドを同じクラスに複数定義できます。 …

代入変換とメソッド起動変換

ここでよく取り扱ってるんで、まとめがてらちゃんと解説。Java言語仕様第3版のCHAPTER 5: Conversions and Promotionsを簡単にまとめたものだと思ってください。

SunのコンパイラとEclipse JDTで動きが違う(3)

酒の肴くらいにしかならない豆知識。メソッド呼び出し時の型推論とか - しげるメモの知識が前提のネタです。下記のコードはjavacとJDTで動きが違います。 public class Assignable { public static void main(String[] args) throws Throwable { throw get()…

メソッド呼び出し時の型推論とか

自分めも。途中からメソッド呼び出し時の型推論についての話題になっても気にしない。タイトルも直した。

文ラベルのスコープ

自分めも。

オーバーライドの仕組みをサンプルで

オーバーライドの仕組みを紹介するために、Javaでクラスベースのオブジェクト指向の仕組み(オーバーライドメソッドの動的束縛部分のみ)を簡単に作ってみる。