marzer / tomlplusplus

Header-only TOML config file parser and serializer for C++17.
https://marzer.github.io/tomlplusplus/
MIT License
1.58k stars 152 forks source link

benchmark showing rtoml is faster #196

Closed bobfang1992 closed 1 year ago

bobfang1992 commented 1 year ago

Hi,

I recently rerun the benchmark in pytomlpp and here is the result:

Parsing data.toml 1000 times:
     rtoml:   0.540 s
  pytomlpp:   0.542 s ( 1.00x)
     tomli:   2.923 s ( 5.40x)
     qtoml:   8.748 s (16.18x)
   tomlkit:  51.608 s (95.49x)
      toml: Parsing failed. Likely not TOML 1.0.0-compliant.

Understand this is not a competition but just want to raise awareness of this if you care about it.

Plus: do you think there is anything I should support in pytomlpp? I see you added quite some features (e.g. json/yaml formatter etc.). And I'm wondering if you have any preference on supporting them in the python API as well.

Thanks!

marzer commented 1 year ago

pytomlpp is slightly faster than rtoml when I run this same benchmark on my own machine. I suspect things like CPU arch, compiler, compiler version, optimization level etc has a lot to do with it, so there's enough noise in the data that I don't think it's worth losing any sleep over, heh.

Plus: do you think there is anything I should support in pytomlpp?

Nah, I think the minimal dict-based API is fine as-is. I implemented those things because there's no built-in/easy way to do them in C++, but in python you've already got the package ecosystem out-of-the-box so users can trivially do those conversions without needing any support from you :)

It would be different if a user needed to convert TOML to JSON/YAML fast, of course, because then it'd need to be done with native code, but I suspect that's a pretty niche situation that you don't need to worry about.