型クラスのある言語の実装に向けて:その1(何が必要かを考える)
つらつらと「型クラスのある自作言語の処理系を作りたいなー」と考えている。
実用性は度外視で、ある程度型クラスの雰囲気さえ味わえればいい。
Essentials of Programming LanguagesのINFERRED言語を以前実装した:
再帰関数くらいまでは定義できる言語に型検査と型推論を追加したものだ。これに手を加えていってなんとかならないか。
必要な修正としては:
- 構文をS式化する
- 文字列を型として追加する
- tuple型を追加する
- builtin関数の充実
- 型クラスの機能を追加する
- 単一の型(tupleでも可)を持つ単一のコンストラクタで、新しい型が定義できるようにする
- 新しく定義された型を既存の型クラスに追加できるようにする
- 新しい型クラスを定義できるようにする
あたりだろうか。
とりあえず最初の4つをやれば「静的型付Lisp」的なものができるのでそこから始めてみよう。(EoPLの言語の構文がめんどくさい上にあまり好みではなく、拡張を考えるのもめんどくさいのでS式でいきたい・・・)
少し悩んだ点としては * リスト型 * 相互再帰 を実装するかどうかだが、まずは言語仕様を単純化するためになしでいこうと思う。
次回は型クラスのない「静的型付Lisp」の言語仕様を考えてみたい。
ちなみに参考としては:
とTypes and Programming Languagesを見ている。