2022-12-21

最近ちいさな言語処理系(検証器)をPythonで実装している。学校の講義でそういう講義があって、好きに言語を選んでよいということだった。参加者の間で関数型言語がメジャーな感じではなかったのこともあり、怖いもの見たさでPythonを選んでみた。ちなみに今回の実装は性能を問題にしておらず、動くことが大切。

Pythonをつかうだけでも少しドキッとするのだが、ASTとかにクラスを使わないとどうなるかを試している。クラスとかADTを使いたくなるときはすべて辞書かタプルでゴリ押す実装をしている。

意外となんとかなるけどしんどさはある。結局ADTを自分で書いているだけなので、型システムという友達を失っただけかもしれない。クラスを使うのと比べてどちらが楽かは疑問。流石にクラスが楽であって欲しい気はするけど、expression problemに思いを馳せるとクラスよりADTの方が今回の処理系の実装に向いている気がする。

文字列処理をググりやすいのはPythonのよいところだと思う。そもそも文字列処理を僕がPython以外でほとんどやったことがないだけかもしれないが。

今のところ、型システムがなくて絶望したことはない。(ほしいとは常に思うが)

追記

型システムがなくて絶望した。Dataclassを使うことにした。抽象化の機構はやはり欲しいことがわかった😇。