oh… that’s one combinator that I wouldn’t discard adding!
EDIT: Nevermind, the usage is parsera \#or parserb
oh… that’s one combinator that I wouldn’t discard adding!
EDIT: Nevermind, the usage is parsera \#or parserb
Yes, don’t disagree, but If there’s combinator style worth adding it can be always added as a separate package or even in user’s code
Thanks, would you mind opening a PR? Happy to have a Angstron (optimised) version on the repo!
maybe ocamlformat issue? dunno.
That’s a cute suggestion, but I don’t want to add operators in parseff
Share it on https://x.com/davesnx/status/2036739000271007997
Let me expand here:
I’m exploring the idea of making parseff faster, autoresearch suggested to remove effects entirely from parseff and it makes fused operations equal, but primitive operations are much faster.
Kind of loses the purpose of the name tbh, but frankly, the comparison is:
46-75% faster without effects because each combinator call is now a direct function call + DLS.get (~5ns) instead of Effect.perform + handler dispatch + continuation resume (~50-100ns)
So, parseff 0.4.0 will probably ship without effects and be faster than angstron in any case, but for fused operations it will be almost the same.
It looks like the alternatives parser will be much longer without specialized effect-based backtracking combinator. Is there any chance to make effects and reimplementation of recursive decent live together?
Also, if we want seriously talk about JSON parsing performance, we need to compare with GitHub - simdjson/simdjson: Parsing gigabytes of JSON per second : used by Facebook/Meta Velox, the Node.js runtime, ClickHouse, WatermelonDB, Apache Doris, Milvus, StarRocks · GitHub too
The public interface hasn’t changed. What do you mean, exactly?
We aren’t seriously comparing json parsing perf, we are comparing similar libraries.
Not really surprising but we should be able to do better than ~50-100ns for the effects version. Could you say which OCaml version you used and what hardware it was on?
Feel free to go deeper with this branch No effects version by davesnx · Pull Request #7 · davesnx/parseff · GitHub and running those benchmarks parseff/bench at 41cc5852b3cbc78e00710b4c6727211d476d7cee · davesnx/parseff · GitHub
OCaml 5.4.0
Hardware