Skip to content

Instantly share code, notes, and snippets.

@nfunato
Last active April 25, 2016 23:33
Show Gist options
  • Select an option

  • Save nfunato/29160eb6710cdaea3b8f74dbfa51992a to your computer and use it in GitHub Desktop.

Select an option

Save nfunato/29160eb6710cdaea3b8f74dbfa51992a to your computer and use it in GitHub Desktop.

https://twitter.com/nfunato/status/724555579377635328 の続き:

@phaendal さん

クロージャ変換は通常CPS変換やA正規化の後段に来るクロージャ変数をレジスタ割付けする準備の変換です。古来色んな論文等があります。

クロージャ変換のwikipediaは、https://en.wikipedia.org/wiki/Lambda_lifting にredirectされますが、少し読みにくそうですね。例えば http://matt.might.net/articles/closure-conversion/ などが軽めのようです。これを読むには http://matt.might.net/articles/cps-conversion/ や 両者のMoreResourcesを読みたいかもしれません。どちらも IR上の変換/最適化になります。(この辺で3impとは相容れないかもしれない)

上記で、IRは https://en.wikipedia.org/wiki/Intermediate_representation ですね。住井先生のMin-Camlとその解説もいいかも。これにはA正規形(ANF)と類似のK正規形が出てきます。因みにこの辺のIRでは、letは原始式にしてlambdaで表さないかもしれません。ANFとか正にそういうものです

他には、Haskellに馴染みがあるなら http://jozefg.bitbucket.org/archive.html (CMUの学生さんらしいです)にある http://jozefg.bitbucket.org/posts/2014-06-07-c-of-scheme.html も短くていいかもしれません。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment