自作言語作る時、他の言語で処理系を書き始めると、自作言語なら使えたであろう機能が使えなくて厳しい気持ちになる。はよ bootstrapping したい
自作言語作る時、他の言語で処理系を書き始めると、自作言語なら使えたであろう機能が使えなくて厳しい気持ちになる。はよ bootstrapping したい
まあ、まだちょっとデザインは思案中だけど。async / await もこういう感じでユーザ定義でできるようにしたいな。モナドよりもうちょっと生に言語のコントロール制御をさせたい
.cont_1
/ .break
/ .return
が break point で、 #handle (...)
に handler を指定するとそれに対応した break point が設定できるようになる。return handler は break point で処理を終えるやつで、それを
* 一番外側は return という名前そのまま
* each の一歩外側は break という名前で
* each 内部は cont_1 という名前で
それぞれ break point id を発行している。これにより、
* return をやると一番外側に返る
* break をやると each を抜ける
* cont_1 をやると each の内部で抜ける
みたいな挙動を可能にするみたいなイメージ
OCaml のは標準で提供するのは結構生の handler system という感じっぽい。表層を整理するのはこれからという感じか
https://v2.ocaml.org/manual/effects.html
syntax はともかく、
#handle (return) {
#handle (break = return) {
[1,2,3].each(#handle (cont_1 = return) #{ i #>
#match i #in {
1 #> ().cont_1
2 #> ().break
3 #> i.return
}
}
}
#if True #> 1.return
2
}: Int // => 1: Int
みたいなのぐらいは書けるようにしたいな。multicore OCaml の effect handler とかってこんな感じのは書けるんか?