Concurrent Clean : CleanJ : buildとbuildhとbuild_r


いまさらbuildとbuildhの違いが分かった。
buildもbuildhもスタック上のデータをargumentsとして新しいnodeを作成する命令なのだが、buildはスタック上のデータをそのままにして新しいnodeを生成するのに対し、buildhはスタック上のデータをpopして新しいnodeを生成する。
updateとupdatepopの違いと同じ。buildとbuildpopという名前にしておいてくれればもっと分かりやすかったのに!

      • -

build_uもpopするタイプらしい。

      • -

あ、違った。
buildもbuild_uも、第一引数が"_"であったときは、buildhのように振舞うのだった。
そういえば、CodeGeneratorを読んだときに、そういう動きをしていた。

      • -

あれ、また分からなくなってきた。

      • -

上の話はどうも違っていたみたい。
build, buildh, build_uはすべてpopするタイプで、build_rだけpopしないタイプなのか?

      • -

整理します。

popする
build, buildh, build_u
popしない
buildI_b, buildC_b, buildR_b, buildB_b, build_r
      • -

fillにも同じことがあります。

popする
fill, fillh (, fill_u)
popしない
fillB_b, fillC_b, fillI_b, fillR_b, fill_a, fillcaf, fill_r

ただし、fill_uは未確認です。