program

ブラウザ非依存のイベントハンドラの追加方法

JavaScriptイベント登録を楽に実装する (event.js)あたりを参考に作成。本当は、prototype.jsのEvent.ovserveあたりを使えばよい気がしなくもないが、prototype.jsは重いので使わない方向で考える。 function addListener(evt_name, handler) { if ( windo…

XMLSpyに一言

2.5MのXSD Schemaからドキュメントを生成させただけで「Out of Memory」にならないでくれorz

Syntactic Theory

最近は、可変長レコードの型推論アルゴリズムを実装するために基礎理論を勉強している。OCamlと同じ理論に基づいた実装にしようと思い、[Remy92]*1、[Remy93]*2をあたりを読んでみた。これらを読み進めていく過程でSyntactic Theory(統語論)なるものがありそ…

LALRに宗旨替え

作成中の言語の文法がついにLL(k)パーサーで受理できなくなったので、LALR(1)パーサーへと移行した。いくつかのパーサージェネレータを使ってみた結果、monoのC#コンパイラの作成に使われていたC#対応jayを使うことにした(オリジナルのjayはここ)。jayを使う…

型推論とエラーメッセージの可読性

先週の土日を使って、型推論アルゴリズムを実装してみた。id:kkanda:20041004でLLパーサーのエラーメッセージは分かり易くて良いという話をしたが、型推論アルゴリズムを導入した瞬間すべてがぶち壊しになったorz 型推論アルゴリズムとは、制約条件を満たす…

LLパーサのエラー処理に感動

最近VS2005で、関数型言語のおもちゃを作っている。現在、Type Checkerまで実装が完了している。この言語のパーサーはCOCO/RというLL(k)パーサージェネレータで生成している。パーサージェネレータといえばyaccやbisonが有名だが、これらのパーサージェネレ…

Visual Studio 2005を1ヶ月使ってみての使用感

Visual Studio 2005を土日の趣味プログラミングの時間に使い始めて、そろそろ1ヶ月がたとうとしている。これまで使ってみての使用感を5段階で評価するとしたら、4ぐらいだろう。気に入った点を挙げると、 Refactor機能(特に名前の変更) これのおかげで置換…

C#2.0のanonymous methodはclosureか?

少し古くなるのだが、Martin Fowler's BlikiにClosuresという記事があった(日本語版はここ)。この記事では、rubyを例にclosureとC#のdelegate、Javaのanonymous class、Cの関数ポインタとの違いが述べられていた。closureって何ですか?という人もいると思う…

型なしラムダ式の実装(つづき)

id:kkanda:20040905に書いた型なしラムダ式の実装が一通り完了。 現状では、 static void Example6(ParsingInfo info, LambdaContext ctx) { //ex6. λ.(1 0) λ.0: Γ={b,a} VariableTerm v1 = new VariableTerm(info, 1, 3); VariableTerm v2 = new VariableT…

Nullable<>型で遊んでみた

値型のオブジェクトを未定義状態にしておきたい場合がある。いままで、このような場合は既定値を与えることで対処してきた。大抵の場合はこの方法でうまくいくが、この方法だと一度も値が代入されていない状態とそうでない状態を明確に区別することができな…

型なしλ計算の実装

ISBN:0262162091 の 6章「Nameless Representation of Terms」を読んだ。 この章には、λ式の変数を自然数に置き換えても読みづらいけど 意味は変わらないよねということが書いてあった。具体的には、 λx.λy. x (y x) というλ式は、 λ.λ. 1 (0 1) という式に…

Cω再び・・・

なんかいろんな人が気にしてるみたいで、 それを読んでたらまた気になって、再びCωについて調査することに。今回は、論文にだけでなくプレビュー版をちゃんと使ってようと決心。 データベースアクセスがどれくらい自然に行えるのがどうしても気になった。 や…

昨日、SQLをプログラミング言語から自然に呼び出せたら素敵だなと思ってなんとなく検索してみた。 見つかったのが、Cω、、、コメガ? って、これ前にも見たことあるじゃんと思いつつも「Unifying Tables, Objects and Documents」という論文を読んでみた。こ…

subtypingとsubclassingの違い

h氏とメッセでの会話より h> よく、インテリ君が「サブタイプとサブクラスは違う概念だからね」というのを見かけるがweb上に違いを説明している文章はあんまないです kkanda> ないね kkanda> それ、俺も不思議に思って探したんだけどあんままとまって書いて…

簡易計算機を作ってみた

コンパイラのフロントエンド部分を作ってみようと思い立ち、ごにょごにょと色々書き始めてみた。 modern compiler implementation(ISBN:0521583888)を読んだのは1年以上前なので、 すっかり忘れていることに愕然としつつ、 とりあえずリハビリとして簡易計…

Code Generationのサーベイ

先日の日記にも書いたCODER TO DEVELOPERを読破。CHAPTER8のGenerating Codeが 気になってなんとなくサーベイ。 Code Generation Network website Code Generationのポータル。情報量はやや少ないけど、 マイナーなコミュニティにしては以外に多いのかも。 C…

Data Execution Protectionに関する考察

Windows XP SP2で追加される機能の一つにData Execution Protection(DEP)がある。昨日、この機能の解説記事を読んでみた。DEPとは、簡単に言うとデータ領域上でのコード実行を防ぐ技術である。悪意のあるコードの多くはコードをデータ領域に送り込みアプリケ…

センスがあるなと思うコードって?

「期待を裏切らない」、これこそセンスのあるコードの条件ではないかと思う。関数の名前と動作が一致している、変数名とその値の意味が一致している、慣例に習って書かれている、そういうコードは見てて気持ちがいいし、バグも少ない。 逆にこりゃ裏切られた…