mcy / best

The Best Library: a C++ STL replacement
Apache License 2.0
158 stars 1 forks source link

Speed up reflection and row operations #23

Closed mcy closed 2 months ago

mcy commented 2 months ago

Building reflection for types that have a lot of field tags is currently pretty slow. After this patch it will still be slow, but a lot of unnecessary work has been removed. In particular, best::row::apply is now implemented directly as a primitive in best::row_internal::impl, which means each call does not slam best::row::get N times.

Profiling suggests a lot of time is wasted instantiating copies of best::tlist; that may be a worthwhile target for optimizing down the line (either by making instantiation cheaper or reducing the number of instantiations; it looks like it's currently linear-ish but there are almost certainly avoidable quadratic instantiations lurking).

Additionally, this change fixes bugs in best::vec, best::overflow, and best::atoi that this optimization refactor uncovered, and introduces best::iter::take(), which I needed for debugging one of the bugs. It also adds the best::abridged concept for detecting whether a type is a best::abridged<T>.