こんにちは、びしょ〜じょです。 なんか最近時間なくないですか? モンスターをハントしてる場合ではないんですが…。

技術書典6

4月の話なんですが5月にやっていいですか。やります。 典5に続いてDragon Universityやっていきました。

首謀者の@rizaudo @ntsc_j @xrekkusu とだいたい似た面子で行った。 前回同様ぼちぼち売れたので打ち上げで無事生肉を焼く儀式を開くことができました。

しかし前回と比べて売上はやや落ち込みました。 貴重なAI人材(AI人材ではない)rizaudo氏が今回はネットワークシミュレータの記事で挑んだためではないかと推察されます。

『Let’s go Algebraic Effects and Handlers: from an introduction to advanced topics』というタイトルで書きましたが、3月はPPLに行ったり九州旅行に行ったりして気づけばギリギリになってしまいadvanced topicsに関してはちょっと物足りなくなってます。 他3記事も面白いのでそれで目をつぶってください。

Dragon Universityも今回で4回目、今回は人気のAlgebraic Effectsやスマートコントラクト・SGXに加えCORE(本当に人気か?)の各種解説記事が揃ってます! 「Let’s go Algebraic Effects and Handlers: from an introduction to advanced topics」 「スマートコントラクトCTF入門」 「SGX-ROP 不完全解説」 「CORE で作るテストベッド」

effect system勉強会をやった

前回触れたとおり、来る5月26日に日本全国のeffect system researcherやuserが集うかもしれないeffect system勉強会がありました。

## 会場の入館について 入館方法についてはこちらをご確認ください。 入館IDについてはメッセージを送ってあるのでそちっらをご確認ください。 ## タイムテーブル 時間 | 発表者 | タイトル —|—|— 12:45~ | - | 開場 13:00~13:10 | びしょ〜じょ | 諸注意など 13:10~13:40 | halcat0x15a | Extensible Eff Applicative 13:40~13:50 | fumieval | (LT) 名前付きeffects 13:50~14:00 | - | 休憩 (10分) 1…

“日本全国のeffect system researcherやuserが集うかもしれない” なんて適当言いましたが、予想を上回る数の参加者に驚きました。 最初はマイナージャンルだし集まるのは高々20人くらいだろうと思ってたんですがなんかめちゃくちゃ人きた……。

ボクが適当人間であることを知ってるので会場を積極的に用意してくれた @linerlock センパイおよびサイボウズ株式会社様ありがとうございました。 カンファレンスルームは最大200人収容できるそうです。あとパークがある。

また、主催として同行していただいていろいろやっていただいた@ryotakameoka さん@hiroqn さんありがとうございました。 そして発表者の皆さんと参加者の皆さんも勉強会を盛り上げて頂いて大変ありがとうございました。

発表は20分枠が私含め5人+10分枠が3人と、8人も集まりました。effect systemというジャンルで8人集まるのはすごいと思いました。

それでは発表を軽く見直してみましょう。

Extensible Eff Applicative

@halcat0x15a さんによる発表でした。資料はこちら

Free ApplicativeをOpen UnionでEffのように複数の文脈をいちどきに扱えるように拡張するという内容でした。 皆さんへの課題として、簡潔なハンドラの定義と、データ構造をどうするかというものが与えられました。

HaskellをモリモリやってないんでApplicativeにできてMonadにできないことがあるのは知らなかったデス。 モチベーションがわかりやすくて課題とそれに対する複数の解法とそれらの利点欠点がまとまっており非常にわかりやすかったです。

名前付きextenslble effects

次は@fumieval さんの発表でした。資料はこちら。 イラレでスライド作っとる!!? すごい……。

内容は、extensible effectsに名前をつけることで種々の問題を解決するというものでした。 モナトラの問題点とextensible effectsによる解決と、extensible effectsに残った問題点と名前付きextensible effectsによる解決と、うまく要点のまとまった発表でした。

open unionをdictionaryにするのはなかなかおもしろいですね。

今すぐダウンロー

http://hackage.haskell.org/package/extensible

Extensible records, variants, structs, effects, tangles - fumieval/extensible

Effect{ive,ful} Cycle.js

3番手は@ryotakameoka さんの発表でした。

# おことわり- この発表はかなり<b>お気持ち</b>です- 他の発表とは異なり(?)なんら学術的裏付けがあるものではありません- なんと(?)まったく数式が出てきません— # 自己紹介…

内容は、Webフロントエンドにおける様々な副作用をCycle.jsでうまくやっていくというものでした。

副作用を分離して処理したい、まさにalgebraic effectsがやろうとしてることですね。 実際にHERP社さんですか?でもプロダクトですでに活用しているとのことです。 HERP社さん面白いですね。 product-capableなCycle.jsの実装を見ていくと面白いものが見られるかも。

ryotakaさんがトゥギャ(?)ってたのを引用します。

2019年5月26日に行われた effect system 勉強会での “Effect{ive,ful} Cycle.js” の様子です.

Effective Rust

続いて@__pandaman64__ さんの発表でした。資料はこちら

Rustのcoroutinesを使ってalgebraic effectsを実装したぜ、という内容でした。 なんとボクの記事を読んでインスピレーションを受けたそうです。 書いた甲斐がありました。

Rustだと所有権が絡んできて大変な場面があり、Frankを参考にするとうまくいったという面白い噛み合わせの話が聞けました。 また序盤のいらすとやによる所有権の話がわかりやすくて面白かった。

書典6で販売したRustのジェネレータの解説本をBOOTHでも販売中とのこと。

技術書典6で頒布した『Rustジェネレータ徹底解説』です. ジェネレータとは,RustでもPythonやJavaSciprtのyield式を使うために実装された言語機能であり,Rustにおける非同期プログラミングを裏から支えています. 『Rustジェネレータ徹底解説』では 1. なぜFutureに基づく非同期プログラミングがジェネレータの発明に繋がったのか 2. ジェネレータはコンパイラ内部でどのように扱われるのか などコンパイラのソースコードも見ながら紹介します

Monads and Effects

5番目は@myuon_myon さんの発表でした。

effect systemとはなにかから、Kokaを題材にあげ、最終的にmonadsとの関係について述べるという内容でした。

Kokaの処理系のビルドシステム周りで少しだけcontributionしたので勝手に親近感を持ってる言語です。 あとshift0/reset0は書けるけどshift/resetは型で弾かれた経験があるので、もう少し頑張ってトライしてみたいです。

typed prompt-less shift/reset in Koka language. GitHub Gist: instantly share code, notes, and snippets.

圏論におけるMonadわからんマンなのでがんばっていかんとな……

↑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枚手前という微妙な位置になってしまったのはかなり反省です。 というわけでみなさんやっていきましょう。

手前味噌で持ってきたN-Barreled CPSですが、質問で耳寄り情報をいただきましたが、すでにAlgebraic EffectsをCPS変換する研究はあるそうです(当然)

Continuation Passing Style for Effect Handlers

あと@__pandaman64__ さんが宣伝してたんでボクもしようと思ってそのまま忘れてたんで宣伝します。 なんかいろいろまとめたやつです。 大事なことなので2回

Dragon Universityも今回で4回目、今回は人気のAlgebraic Effectsやスマートコントラクト・SGXに加えCORE(本当に人気か?)の各種解説記事が揃ってます! 「Let’s go Algebraic Effects and Handlers: from an introduction to advanced topics」 「スマートコントラクトCTF入門」 「SGX-ROP 不完全解説」 「CORE で作るテストベッド」

Effective Idris: Effects

次は@blackenedgold さんの発表でした。 資料はこちら

Effを参考にしたIdrisのAlgebraic Effectsライブラリの話でした。 Idrisに詳しくないんで “型がfirst-class” というところでspace catになってしまいました。

Row-based type systems for algebraic effect handlers

最後は@skymountain_ さんによる発表でした。資料はこちら

内容は、parameterized effectsを持つrow-based type systemsにおけるeffect handlerの話でした。

序盤ではAlgebraic Effectsについて簡単な例から初めて丁寧な説明があり、effect systemを知らない方にも優しいintroductionでした。

これは私がミスったわね。

parameterized effectsの導入から、row-based effect systemとその特徴について述べ、他のset-based onesとの比較など大変わかり易く面白い内容でした。

Kokaの論文を中途半端に読んでたのでtype systemの部分をちゃんと読み直そうと思います。 fumievalさんの名前付きextensible effectsとrow-based effect systemはなにか近そうな感じがするので、深堀りしてみると面白い発見があるかもしれない。

call for collaborationも出していらっしゃったので興味のある方はぜひ。

こんしんかい

(めっちゃ腹減ってたししこたま酒を飲んだんで写真などは)ないです

25人くらい参加してくださいました。


開催しといてなんですがどうなるかと思ってました、が、参加者5、60人くらい+発表者8人と大きな会で無事発表もつつがなく終わって本当に良かったです。

ん?

(うち一人ですが資料づくり終わって)ないです…