とある日、2~3時間ほど空きができたので、
TinyCL 用に backquote を C++ を実装することにした。
これまでは頑なに lisp で実装した backquote を使ってきたけど、
backquote を実装するために、多くの関数とマクロを実装しなくてはならないので、TinyCL では genesis を使いたくないからである。
で、evcl の実装をみたら何かよくわからないので、CLtL2を焼きなおすことにした。
が、これが問題で CLtL2 のやつはネストした backquoteを展開してしまうので、
これをそのまま macro expander としては使えないことに、実装が終わってテストしている時に気がついた。orz
う~ん、それでまったく違う実装していたのね。
まぁ、parse の部分だけを返れば simplifier は使えそうだなと思って parse を書き換えたが、あまり効率の良いコードに展開してくれないので、
simplifier を improve しようとしたけど、基本が append form の単純かなので、list form を処理しなくてはいけないので面倒くさい。
あとは maptree, reverse, every, notany とか lispy なのは、どうにもしっくりこなにので、parse の出力をコードリストに代えた。
これで simplification がやりやすくなって、結果 30KB ほど function object を小さくすることができた。
まぁ、reverse とか maptree とか使っていないので、処理もメモリ効率もよくなり速度も速くなったとおもうけど、これらは未計測。ほとんど測定誤差の範疇になると思うけど。
こんど時間ができたら destructuring-bind でも見直すかな。でもこれは何の効果もなさそうだな。
TinyCL 用に backquote を C++ を実装することにした。
これまでは頑なに lisp で実装した backquote を使ってきたけど、
backquote を実装するために、多くの関数とマクロを実装しなくてはならないので、TinyCL では genesis を使いたくないからである。
で、evcl の実装をみたら何かよくわからないので、CLtL2を焼きなおすことにした。
が、これが問題で CLtL2 のやつはネストした backquoteを展開してしまうので、
これをそのまま macro expander としては使えないことに、実装が終わってテストしている時に気がついた。orz
う~ん、それでまったく違う実装していたのね。
まぁ、parse の部分だけを返れば simplifier は使えそうだなと思って parse を書き換えたが、あまり効率の良いコードに展開してくれないので、
simplifier を improve しようとしたけど、基本が append form の単純かなので、list form を処理しなくてはいけないので面倒くさい。
あとは maptree, reverse, every, notany とか lispy なのは、どうにもしっくりこなにので、parse の出力をコードリストに代えた。
これで simplification がやりやすくなって、結果 30KB ほど function object を小さくすることができた。
まぁ、reverse とか maptree とか使っていないので、処理もメモリ効率もよくなり速度も速くなったとおもうけど、これらは未計測。ほとんど測定誤差の範疇になると思うけど。
こんど時間ができたら destructuring-bind でも見直すかな。でもこれは何の効果もなさそうだな。