Haskell Day 2016

Mitsutoshi Aoe
3 min readSep 17, 2016

--

http://connpass.com/event/37892/

SPJが東京に来るということで、久々にイベントに行ってみた。Simonの話はいつもエネルギッシュで聞いているだけで元気が沸いてくる。

午前中に初心者向けのチュートリアルをやって、午後に数本のトーク。最後にSimonが2時間に渡ってGHCの中間言語であるCoreとCoreのレベルで行われている最適化について解説するという内容だった。資料は後日公開されるようだけど、おそらく録画はされていなかったと思うので見逃した人はErlang User Conference 2016の動画を見ると良いと思う。

Into the Core — Squeezing Haskell into Nine Constructors by Simon Peyton Jones

Simonのプレゼンの間とその後にいくつか質問したのでメモとして残しておく。

  • Q: 種々の最適化が互いに影響を及ぼしてしまう問題が知られているが、最適化の順番や回数などはどのように決まっているのか?
  • A: ヒューリスティクス。過去に大量のマシンを使って様々な最適化の順序を試す研究が行われたが、結果は失われてしまった。
  • Q: 機械学習で最適化の順序や回数の問題を解決できないか?
  • A: できるかもしれないよ。誰かやってみて欲しい。
  • Q: INLINABLEプラグマをつけることで生成されるコードが遅くなることはあるか?
  • A: No
  • Q: Sequent Coreのスライドでcase-of-caseの最適化は外側のcaseのbodyを複製しているのでは?
  • A: このスライドではしている。実際はこのbodyもletに括りだしてjoin pointにする。
  • Q: case-of-caseの最適化も複数回実行されるのか?
  • A: Yes
  • Q: join pointが()を引数に取るのは何故?
  • A: join pointは一般には引数をとる。定数の場合でも()を引数に取るのはGHCにjoin pointをfloat outしないように伝えるため。
  • Q: case-of-caseはCoreレベルでjoin pointに変形する最適化で、join pointをヒープアロケートしないようにする変換はSTGのlet-no-escapeという理解であっているか?
  • A: Yes。Sequent Coreの論文ではCoreレベルで出来るようになるのでSTGでの最適化が不要になる(といっていたと思うので論文を読もう)。
  • Q: 何故Simonのプレゼンを聞いていると元気が沸くのか。何か秘訣があるのか?
  • A: How to give a great research talkを見るといいよ。大切なのはenthusiasmを伝えること。

--

--