kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

Java

Int#+の怪

Scalaでは32ビット符号付き整数を表すIntは特別な型ではなく、単にAnyのサブクラスであるAnyValのサブクラスであるIntクラスだという事になっているし、実際そのように扱われる。また、Intに対する+などの各種演算子も単なるIntクラスのメソッドであることに…

JavaプログラマのためのIOモナド

特に説明はしません。IOモナドなんて言っても、別に難しいことではなく、結局やってる事はこんな感じですというのがわかってもらえれば。もちろん、実際のHaskell処理系がこのような実装になっているという意味ではなく、Javaプログラマはこのようなイメージ…

Javaの検査例外の欠点について

最近、こことかこことかこことかで、Javaの検査例外に関する議論が話題になっているようだ。検査例外に関しては、自分も以前から一言言いたいと思っていたので、ちょっと書いてみることにする。とはいえ、他の人と同じ論点で書いてもつまらんので、ここでは…

あけましておめでとうございます & 今年やりたいこと

といっても、もう1/3ですが。去年を振り返るエントリでも書こうかなーと思ったのですが、面倒なのでそれはやめにして、今年やれたらいいなー(or やる予定のこと)をつらつらと書き連ねていこうかと思います。あくまでやれたらいいなー的なことなので、今年中…

JavaでContinuationモナド

.@kmizu のScalaのサンプルコードが、まるでPerlのコードのようにイミフだ... http://d.hatena.ne.jp/kmizushima/20090925/1253890980 *P3 http://twitter.com/t_yano/statuses/4370238778 よーし。じゃあ、Javaなら大丈夫ですよね?*1というわけでJavaで書…

型パラメータのErasure

(snip) 今まで、Java では型パラメータは単純に Object になるものだと思っていたんだけど、もしかして extends 使うと一番左側のクラスになる・・・? http://d.hatena.ne.jp/bleis-tift/20090731/1249037236 ちょっと気になったので、JLS(3rd Edition)を調…

Javaで作るPEGパーザコンビネータ

パーサジェネレータを作る簡単さで言うと、 PEG http://twitter.com/kmizu/statuses/1183248403 なんて偉そうなこと書いたので、(パーザジェネレータじゃないけど)PEGパーザコンビネータを実際にJavaで書いてみた。文字クラスを除くPEGの機能のほぼフルセッ…

Re: 流れるようなインターフェイス+ジェネリクス

出来るよ! class Rows {} interface Query<E extends Query<E>> { E findAll(String str); E where(String pred); E orderBy(String col); E limit(int n); Rows execute(); } class MyQuery<E extends MyQuery<E>> implements Query<MyQuery<E>> { public MyQuery<E> findAll(String str) { return this; } public</e></myquery<e></e></e>…

Java 7のクロージャ(BGGA版)のプロトタイプを試してみた(4) - Covariant Return and Contravariant Arguments

参考URLはこの辺:http://tronicek.blogspot.com/2007/12/covariant-return-and-contravariant.htmlJava 7のクロージャの仕様では、あるfunction typeの変数に対して、それと互換性のある引数の型と返り値の型を持ったクロージャを代入できることになってい…

Java 7のクロージャ(BGGA版)のプロトタイプを試してみた(3) - closure conversion

参考URLはこの辺:http://tronicek.blogspot.com/2007/12/closure-conversion.htmlBGGAのクロージャには、クロージャを互換性のあるインタフェース型に自動的に変換するclosure conversionという機能がある。ここで、互換性のあるインタフェース型というのは…

Java 7のクロージャ(BGGA版)のプロトタイプを試してみた(2) - control invocation syntax

参考URLはこの辺:http://tronicek.blogspot.com/2008/02/version-2008-02-22.htmlBGGA版のクロージャには、シンタックスシュガーとして、control invocation syntaxというものがあり、クロージャ(というか無名関数。いい加減しつこいけど)を最後の引数に取…

Java 7のクロージャ(BGGA版)のプロトタイプを試してみた

Java API、使ってますか? (53) Java SE 7の要注目機能"クロージャ"はどうなるのかの記事を参考に、ここからプロトタイプ実装をダウンロードしてきてインストールしてみた。注意点として、上記の紹介記事ではJDK 5.0以降が必要という風に書かれているが、JDK …

Genericsはイレイジャによる実装の方が単純か

自分は逆に「Elaser だったからこそ単純になってる」んじゃないのかなぁとは思います。ランタイムには Generics を考えなくて良いですし。基本的には。 http://d.hatena.ne.jp/SiroKuro/20080506/1210034867 うーん。確かに、イレイジャにすればランタイム(J…

Genericsはデカい仕様なのか否か

でもJ2SE 5.0のgenericsでもはや最小の仕様なんてのは消えちゃいましたから、いっそのことより便利になるようにシンタックスシュガーでもなんでも入れればいいと思う。キーワードを加えるとなったら、プロパティ構文とか真っ先にいれてほしいですよ。getter/…