「型システムのしくみ」をRustで実装してみた
やったこと
「型システムのしくみ」という書籍をRustで実装してみました。
レポジトリはこちらです。
やってみた理由
以前「n月刊ラムダノート Vol.4, No.3」を読んでいましたが、今回さらに発展的な内容が含まれて面白そうだったため手を動かしてみました。
書籍はTypeScriptで進める構成になっていますが、Rust の勉強もちょうどしたいと思っていたのでRust で実装することにしました。
書籍の実装ではtypescript-eslint/typescript-estree を使用しているので、正しくTypeScriptがパースできているかと思います。
Rust製のTypeScriptコンパイラとしてstc があるらしいのですが、今回の使用例に合うのか分からなかった&自前でパーサを実装してみたかったので、nom を使用してパーサを実装しました。自前実装のため、正確性は諦めることにしました。
正直なところ、型システムの実装よりパーサを考えて実装する部分の方が大変でした。
実装したパーサが考慮できていない構文木のパターンもありますが、最低限書籍で出てきた例を確かめられることを目標としています。
いくつかサンプルコードに含まれているものはテストコードに含めて確認しています。
Rustの使い方として微妙なところが多々あります(e.g. 参照やcloneの扱い方、比較関数など)。
借用など正しく書くのが難しく、結構clone で誤魔化しています。
ただアルゴリズム的な部分は書籍で丁寧に解説されていたため、ほぼ写経になっていました。
今後について
一応最後の章まで実装しましたが、課題は実装できていないので、追加で実装していきたいところです。
あと本文中で触れられているTAPLも読みたいなーと思っています。いくつかのトピックだけ昔読んだことはあるのですが、真面目に通読したいですね。
Discussion