2020-09-17: contparseを公開した
やったこと
Scala
継続渡し形式でパーサを実装したcontparseをparsersに追加した。
ベンチマークはこんな感じ。
[info] Benchmark Mode Cnt Score Error Units
[info] Bench.measureAtto thrpt 3 91.843 ± 11.941 ops/s
[info] Bench.measureContparse thrpt 3 654.457 ± 22.933 ops/s
[info] Bench.measureFastparse thrpt 3 2985.297 ± 1257.443 ops/s
[info] Bench.measureFuncparse thrpt 3 939.816 ± 75.651 ops/s
[info] Bench.measureInlineparse thrpt 3 2443.197 ± 134.639 ops/s
[info] Bench.measureParserCombinators thrpt 3 361.384 ± 9.838 ops/s
[info] Bench.measureStackparse thrpt 3 518.859 ± 223.687 ops/s
stackparseと同じくらいなのはわりと予想通り。でもちょっと速いのは意外だった。
というかなんでこんなにattoは遅いんだ。ほとんどやってること変わらないはずなのに。
Evalのオーバーヘッドなのかな。
CPSの都合でスタックが簡単に溢れるので、TailRecを使っている。
想像よりもTailRecは速いっぽいことが分かった。
あと、実装は大体stackparseをコピペして、継続オブジェクトを返している部分を呼び出しに書き換えている。
stackparseではパーサの呼び出しと結果の部分で継続オブジェクトを返しているのが、contparseだとパーサの呼び出しの部分でのみTailRecを生成している、速度はその分の違いなのかもしれない。
うーん、難しいな。
ついでにv0.2.1もリリースした。
2つもパーサー増えたしな。
あとscala-automataとscala-graphも公開した。
秘伝のソースコードにしていても勿体ないので。
この辺ももう少し色々やりたいんだけども。
https://github.com/MakeNowJust-Labo/scala-automata
https://github.com/MakeNowJust-Labo/scala-graph
シャニ
甜花ちゃんTrue。
なんかひさしぶりに一発でTrueだった気がする。
いいコミュだな。
https://twitter.com/make_now_just/status/1306605186232676353
なんかSP使い切れたし妙にいい感じのプロデュースだった。
200万人行きたかった感はあるけど。