kmizuの日記

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

ネタ

Scala 3.0の新機能

注意:この記事はエイプリルフールのネタ記事です。エイプリルフールを過ぎてしばらく経つので、まぎらわしいかと思い、ここに書いておくことにします。今年中には、再設計されたコレクションライブラリ、名前付き引数のサポート、部分継続などの数々の新機…

非遅延純粋関数型言語IMO(Io MOnad)を公開します

2年半くらい前に、言語開発合宿という、二泊三日でオレ言語の仕様とその処理系を作るという楽しいイベントがありまして、その時に、「HaskellのIOモナドがよくわからんから、実際にIOモナドを持ったミニ関数型言語を作って理解しよう」と思って作ったもので…

JavaでContinuationモナド

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

Python風比較演算子をScalaで実装してみた

Pythonでは0 構文木を作ってそれをevalしているようなものなので、(たぶん)かなり遅い。implicit conversionを使って、Boolean型が要求された時点で、比較演算の構文木をevalしてBoolean型を返すようにしているのがミソ。 object Op extends Enumeration { v…

Scalaでコンパイル時アサーション

以前にMetaScalaで見かけて、なるほどーと思ったテクニック。実装は非常に簡単。 scala> type assertEq[A, B >: A <: A] = Nothingたったこれだけ。説明は不要だと思うが、Scalaだと、型パラメータのlower boundとupper boundの両方を指定できる事を利用して、BはAのサブタイプかつスーパータイプでなければならないという指定によって、型Aと型Bが等しい事をassertしている。使い方は以下のような感じ。 scala> type x = assertEq[Int, Int] defined type alias x scala> ty…</:>