技術書典6に合同誌を出した; effect system勉強会をやった
こんにちは、びしょ〜じょです。 なんか最近時間なくないですか? モンスターをハントしてる場合ではないんですが…。
技術書典6
4月の話なんですが5月にやっていいですか。やります。 典5に続いてDragon Universityやっていきました。
首謀者の@rizaudo 、@ntsc_j や@xrekkusu とだいたい似た面子で行った。 前回同様ぼちぼち売れたので打ち上げで無事生肉を焼く儀式を開くことができました。
Dragon Universityの売上を可視化してる様子を撮りました。 pic.twitter.com/YX1pLUet9n
— びしょ〜じょ (@Nymphium) April 19, 2019
しかし前回と比べて売上はやや落ち込みました。 貴重なAI人材(AI人材ではない)rizaudo氏が今回はネットワークシミュレータの記事で挑んだためではないかと推察されます。
『Let's go Algebraic Effects and Handlers: from an introduction to advanced topics』というタイトルで書きましたが、3月はPPLに行ったり九州旅行に行ったりして気づけばギリギリになってしまいadvanced topicsに関してはちょっと物足りなくなってます。 他3記事も面白いのでそれで目をつぶってください。
effect system勉強会をやった
前回触れたとおり、来る5月26日に日本全国のeffect system researcherやuserが集うかもしれないeffect system勉強会がありました。
"日本全国のeffect system researcherやuserが集うかもしれない" なんて適当言いましたが、予想を上回る数の参加者に驚きました。 最初はマイナージャンルだし集まるのは高々20人くらいだろうと思ってたんですがなんかめちゃくちゃ人きた……。
ボクが適当人間であることを知ってるので会場を積極的に用意してくれた @linerlock センパイおよびサイボウズ株式会社様ありがとうございました。 カンファレンスルームは最大200人収容できるそうです。あとパークがある。
ピザを待っています pic.twitter.com/xcgMOjyPPk
— びしょ〜じょ (@Nymphium) May 26, 2019
また、主催として同行していただいていろいろやっていただいた@ryotakameoka さん@hiroqn さんありがとうございました。 そして発表者の皆さんと参加者の皆さんも勉強会を盛り上げて頂いて大変ありがとうございました。
発表は20分枠が私含め5人+10分枠が3人と、8人も集まりました。effect systemというジャンルで8人集まるのはすごいと思いました。
それでは発表を軽く見直してみましょう。
Extensible Eff Applicative
@halcat0x15a さんによる発表でした。資料はこちら。
Free ApplicativeをOpen UnionでEffのように複数の文脈をいちどきに扱えるように拡張するという内容でした。 皆さんへの課題として、簡潔なハンドラの定義と、データ構造をどうするかというものが与えられました。
HaskellをモリモリやってないんでApplicativeにできてMonadにできないことがあるのは知らなかったデス。 モチベーションがわかりやすくて課題とそれに対する複数の解法とそれらの利点欠点がまとまっており非常にわかりやすかったです。
そもそもApplicativeのトランスフォーマー(?)を考えたことがなかったな。 #effect_study
— 吉村 優 ☕ YOSHIMURA Yuu (@_yyu_) May 26, 2019
Monadだと後ろの計算は前の計算に依存してしまうので個別に実行できないけど、Applicativeだと依存関係がないので大丈夫なのか #effect_study
— でこれき (@dico_leque) May 26, 2019
#effect_study ありそうでなかなかなかったFree applicativeの紹介と、そのextensible化。途中の計算結果に依存しないという性質を利用してRPCなどの記述に使えそう
— ふみ (DJ Monad) (@fumieval) May 26, 2019
Free ApplicativeとFree Monadのliftを共通化するのは面白そうだ #effect_study
— ふみ (DJ Monad) (@fumieval) May 26, 2019
CiteSeerX — Algebraic Effects and Effect Handlers for Idioms and Arrowshttps://t.co/jQp8jkVQid みたいな話が来るかと思ったけどちがった(未読 #effect_study
— でこれき (@dico_leque) May 26, 2019
名前付きextenslble effects
次は@fumieval さんの発表でした。資料はこちら。 イラレでスライド作っとる!!? すごい……。
内容は、extensible effectsに名前をつけることで種々の問題を解決するというものでした。 モナトラの問題点とextensible effectsによる解決と、extensible effectsに残った問題点と名前付きextensible effectsによる解決と、うまく要点のまとまった発表でした。
open unionをdictionaryにするのはなかなかおもしろいですね。
今すぐダウンロー
ド
毎回思うけどイラレで発表資料作るの気合入っててすごい #effect_study
— 非純粋関西型プログラマ (@ryotakameoka) May 26, 2019
extensible effectsの問題点:
— κeen (@blackenedgold) May 26, 2019
* 型が推論されない
* 対応できない
* 再利用できない
#effect_study
型レベルリストを型レベルマップに変えるのか #effect_study
— でこれき (@dico_leque) May 26, 2019
エフェクトをキーで指定できるの、本当に便利そう #effect_study
— 部屋の掃除 (@ryna4c2e) May 26, 2019
DataKind #effect_study
— 部屋の掃除 (@ryna4c2e) May 26, 2019
名前は型レベル(DataKindsを使用)なのでstaticに作られる #effect_study
— びしょ〜じょ (@Nymphium) May 26, 2019
Effect{ive,ful} Cycle.js
3番手は@ryotakameoka さんの発表でした。
内容は、Webフロントエンドにおける様々な副作用をCycle.jsでうまくやっていくというものでした。
副作用を分離して処理したい、まさにalgebraic effectsがやろうとしてることですね。 実際にHERP社さんですか?でもプロダクトですでに活用しているとのことです。 HERP社さん面白いですね。 product-capableなCycle.jsの実装を見ていくと面白いものが見られるかも。
ryotakaさんがトゥギャ(?)ってたのを引用します。
Effective Rust
続いて@__pandaman64__ さんの発表でした。資料はこちら
Rustのcoroutinesを使ってalgebraic effectsを実装したぜ、という内容でした。 なんとボクの記事を読んでインスピレーションを受けたそうです。 書いた甲斐がありました。
Rustだと所有権が絡んできて大変な場面があり、Frankを参考にするとうまくいったという面白い噛み合わせの話が聞けました。 また序盤のいらすとやによる所有権の話がわかりやすくて面白かった。
所有権でoneshotnessを保証するの良いですよね〜良い #effect_study
— びしょ〜じょ (@Nymphium) May 26, 2019
コルーチンがあればAlgebraic Effectが実装できる記事→Rustにコルーチンが入るよー → Rustで実装できるのでは
— κeen (@blackenedgold) May 26, 2019
#effect_study
Rustは副作用使い放題の素晴らしい言語 #effect_study
— mod_poppo (@mod_poppo) May 26, 2019
可変な変数でStateを実装しようとすると型チェックで弾かれる。RefCellではつらい #effect_study
— mod_poppo (@mod_poppo) May 26, 2019
Frank 言語これ? https://t.co/277z76pxLr #effect_study
— https://pawoo.net/@kakkun61 (@kakkun61) May 26, 2019
Rustのジェネレータはpollingモデルっていうのが伝わらないとFrankスタイルの方が速いってのが伝わらなそう。あとクロージャはできる限り作らない方がいいとか。
— κeen (@blackenedgold) May 26, 2019
#effect_study
Effective Rustでも非同期実行を扱えるようにしたくて,となるとFutureは良くできてるのでわざと真似て設計してます.しかもFutureへの変換が簡単にできるのでFutureランタイム(tokio, runtime)を流用できるのもうれしい!https://t.co/hZPw3Ie6Tj
— 井山梃子歴史館 (@__pandaman64__) May 26, 2019
この記事は関係を詳しく書いてます #effect_study https://t.co/nODGlQrAUG
買わせてもらいました! / Rustジェネレータ徹底解説 | 井山梃子歴史館 https://t.co/KvD7oQ8BN4 #booth_pm #effect_study
— 画力・博士号・いいね欄閲覧 (@bd_gfngfn) May 26, 2019
書典6で販売したRustのジェネレータの解説本をBOOTHでも販売中とのこと。
Monads and Effects
5番目は@myuon_myon さんの発表でした。
effect systemとはなにかから、Kokaを題材にあげ、最終的にmonadsとの関係について述べるという内容でした。
Kokaの処理系のビルドシステム周りで少しだけcontributionしたので勝手に親近感を持ってる言語です。 あとshift0/reset0は書けるけどshift/resetは型で弾かれた経験があるので、もう少し頑張ってトライしてみたいです。
圏論におけるMonadわからんマンなのでがんばっていかんとな……
Effect System: Γ├ M : A ! e
— 🕊️ (@inamiy) May 26, 2019
(Type system estimates the effect of computation M to be at most e) #effect_study
Effects can be stacked#effect_study
— ゆーちき (@yuchiki1000yen) May 26, 2019
https://t.co/jtyN9nZOrk
— ゆーちき (@yuchiki1000yen) May 26, 2019
>Koka is a function-oriented programming language that seperates pure values from side-effecting computations, where the effect of every function is automatically inferred.#effect_study
#effect_study Kokaにdivergenceというeffectがある!(もちろん、100%の精度は期待できない)
— кσηтισ, ʎɹʎԀ (@GolDDranks) May 26, 2019
kokaの語源は効果(effect)であってほしい #effect_study
— いいんちょ (@e_ntyo) May 26, 2019
“The word ‘koka’ (or 効果) means “effect” or “effective” in Japanese” https://t.co/VW4SslMsnI #effect_study
— zakuro (@zakurozakuro) May 26, 2019
#effect_study KokaはEffectをより細かく分類して制御できるようになっている。printとerrorの副作用は分類されて別物として扱われている。おお!
— よんた (@keita44_f4) May 26, 2019
#effect_study λ抽象と関数適用のeffectの答え合わせ。なるほど、λ抽象自体はeffectが推論されないけど、λ抽象のbody内に適用時に起こるeffectが内包されているのか。
— よんた (@keita44_f4) May 26, 2019
関数適用は、例えばEffとかだと `v v` の形でしか適用を許さないようにしてたりして、この辺は言語の違いに味が出る #effect_study
— びしょ〜じょ (@Nymphium) May 26, 2019
EffectはMonadにparameterを付けたようなもの
— κeen (@blackenedgold) May 26, 2019
#effect_study
このあたりを読むとわかりやすい話ですね:
— 画力・博士号・いいね欄閲覧 (@bd_gfngfn) May 26, 2019
The marriage of effects and monads [Wadler 1998]https://t.co/mzP4NT5hMH#effect_study
Do be do be do [Lindley, McBride & McLaughlin 2016] https://t.co/Xum448lhRL#effect_study
— 画力・博士号・いいね欄閲覧 (@bd_gfngfn) May 26, 2019
↑Frankの論文のタイトルが『Do be do be do』なのってFrank Sinatraの捩りか
How do you implement Algebraic Effects?
6番目はボクが発表しました。資料はこちら。
内容は、Algebraic Effects and Handlersのさまざまなインプリ方法について考える。というものでした。
libhandler, eff.lua, Multicore OCaml, Effekt, Effの内部の実装方針について軽くまとめてみました。 いかがでしたか? ライブラリとしてのalgebraic effectsの利点というのは、まさにボクの研究のモチベーションとして強く主張すべき部分なので言いたかったです。 適切な場所がなかったのでconclusionの1枚手前という微妙な位置になってしまったのはかなり反省です。 というわけでみなさんやっていきましょう。
Algebraic Effectの実装、libhandlerの場合:longjmp, stack frame+ip #effect_study
— mod_poppo (@mod_poppo) May 26, 2019
「Java で"すら"コルーチンを持っている」 #effect_study
— 非純粋関西型プログラマ (@ryotakameoka) May 26, 2019
Coroutine: Multicore OCaml, eff.lua
— 🕊️ (@inamiy) May 26, 2019
effect invocation → yield
effect handler → create & resume
continuation → coroutine (one-shot)#effect_study
Obj.clone_continuationの実装:
— でこれき (@dico_leque) May 26, 2019
ocaml-multicore/fiber.c at 75362d1f2cae362e45c67aa4e32b641a5485f845 · ocaml-multicore/ocaml-multicorehttps://t.co/TSX35MJhId #effect_study
#effect_study 「Multiprompt shift/resetの説明をします」
— よんた (@keita44_f4) May 26, 2019
こ、これは!!名古屋の #k_study でやったやつだ!!
A Monadic Framework for Delimited Continuations - Microsoft Researchhttps://t.co/3rTfvWx39S #effect_study
— でこれき (@dico_leque) May 26, 2019
コントロール的何かを全部Algebraic Effectsに落とせると思うとすごいすっきりするな 良いモチベーションだ #effect_study
— みょん (@myuon_myon) May 26, 2019
FSCD 2017で継続のない計算体系への変換が議論されてる
— κeen (@blackenedgold) May 26, 2019
#effect_study
手前味噌で持ってきたN-Barreled CPSですが、質問で耳寄り情報をいただきましたが、すでにAlgebraic EffectsをCPS変換する研究はあるそうです(当然)
あと@__pandaman64__ さんが宣伝してたんでボクもしようと思ってそのまま忘れてたんで宣伝します。 なんかいろいろまとめたやつです。 大事なことなので2回
Effective Idris: Effects
次は@blackenedgold さんの発表でした。 資料はこちら。
Effを参考にしたIdrisのAlgebraic Effectsライブラリの話でした。 Idrisに詳しくないんで "型がfirst-class" というところでspace catになってしまいました。
「Idrisって言語知らないですかね?依存型のあるHaskellです」 #effect_study
— Yuki Ishikawa (@rider_yi) May 26, 2019
-- Idris Effect
— 🕊️ (@inamiy) May 26, 2019
Effect : Type
Effect = (x : Type) -> Type -> (x -> Type) -> Type
data EFFECT : Type where
MkEff : Type -> Effect -> EFFECT#effect_study
インターフェースはHaskellのeffect-monad library的な何かなのだろうか?(よく知らずに言ってる)https://t.co/F0x1Q9roFj#effect_study
— みょん (@myuon_myon) May 26, 2019
Effの作り方がバリバリ依存型ですごい さすがIdris #effect_study
— みょん (@myuon_myon) May 26, 2019
Type -> Typeすき #effect_study
— 井山梃子歴史館 (@__pandaman64__) May 26, 2019
Row-based type systems for algebraic effect handlers
最後は@skymountain_ さんによる発表でした。資料はこちら
内容は、parameterized effectsを持つrow-based type systemsにおけるeffect handlerの話でした。
序盤ではAlgebraic Effectsについて簡単な例から初めて丁寧な説明があり、effect systemを知らない方にも優しいintroductionでした。
最初に聞きたい感じの発表だった #effect_study
— https://pawoo.net/@kakkun61 (@kakkun61) May 26, 2019
これは私がミスったわね。
parameterized effectsの導入から、row-based effect systemとその特徴について述べ、他のset-based onesとの比較など大変わかり易く面白い内容でした。
Kokaの論文を中途半端に読んでたのでtype systemの部分をちゃんと読み直そうと思います。 fumievalさんの名前付きextensible effectsとrow-based effect systemはなにか近そうな感じがするので、深堀りしてみると面白い発見があるかもしれない。
call for collaborationも出していらっしゃったので興味のある方はぜひ。
operationに型をつけて型ごとにhandlerを与えられるの面白いな #effect_study
— みょん (@myuon_myon) May 26, 2019
setじゃないので複数の同じeffectが起こるかもしれない状況を表現できる
— ゆーちき (@yuchiki1000yen) May 26, 2019
(row polymorphism)#effect_study
row-polymorphismだとsubtypingが簡単になる、なるほど #effect_study
— びしょ〜じょ (@Nymphium) May 26, 2019
rowの順序はhandlingに対応する #effect_study
— びしょ〜じょ (@Nymphium) May 26, 2019
"Row Polymorphism Isn't Subtyping" 関係の質問かな? https://t.co/bb2HDXSAFD #effect_study
— ねっけつ (@nekketsuuu) May 26, 2019
「名前が違えは順序が入れ替えられるが名前が同じだと順序が意味をなす」はlabel-selective lambda calculusと似てる気がします #effect_study
— 画力・博士号・いいね欄閲覧 (@bd_gfngfn) May 26, 2019
こんしんかい
(めっちゃ腹減ってたししこたま酒を飲んだんで写真などは)ないです
25人くらい参加してくださいました。
開催しといてなんですがどうなるかと思ってました、が、参加者5、60人くらい+発表者8人と大きな会で無事発表もつつがなく終わって本当に良かったです。
他
ん?
#effect_study 宣伝させてください。再来週6/6(木)・7(金)のIPSJ-PRO@名古屋はエフェクト計算の講演2件を初日に予定しています。 https://t.co/oReOjrwzyi
— Keigo Imai (@keigoi) May 26, 2019
(うち一人ですが資料づくり終わって)ないです…