- User Since
- Nov 28 2018, 12:11 PM (15 w, 5 d)
Dec 10 2018
I can take a stab at fixing that if you can point me to the code that does that formatting? I plan on making another change here so it would be good if I could fix the problem in advance.
Addressing review comments.
Drop duplicate definition of __value_func.
Dropping comment that doesn't applit now that __policy_storage doesn't use alligned_storage.
Sync to head.
Dec 7 2018
Sync to head.
Thanks for the review! I don't have commit access so I think someone else will have to commit this for me?
Remove hardcoded config option.
Dec 6 2018
Addressing some review comments.
Reformatting for consistency.
More explicit class names.
Fixing an expected performance regression.
Dec 4 2018
Some tests are failing at this new version. Some seem because the tests depend on under-specified behavior, some might be legitimate so I'll dig into those more tomorrow.
Addressing recent review comments.
Dec 3 2018
Adding some comments to new classes.
Refactoring implementation of std::function into a few different classes to minimize the number of ifdefs.
If we had a way of switching between multiple implementations more easily and this was just another implementation that users can pick if they wish to, I would almost certainly care a bit less.
Remove extra ';'
@jsoyke, I spoke to the other maintainers, and it's cool if we entirely ignore the allocators. So feel free to use that to squeeze out w/e benefits you can.
Nov 30 2018
Adding allocator support.
Heres another version that might be worth discussing. It's a much simpler implementation because it doesn't attempt small value optimization for non-trivial objects, this makes operations like move-construction very fast.
Switching to version of optimized function that doesn't include small-object-optimization for small non-trivial objects.
Fixing local variables and template paramters that didn't use reserved names.
Bah, I just realized I still have a bunch of local variables that don't use reserved names. Fixing.
FWIW, I'm slightly in favor of using different headers. For example, I just realized that this change currently leaves a bunch of baggage symbols laying around that the new code won't use, it would be easier to see that kind of thing if the internals of each function were just in it's own file.
Adding __ to all internal symbols.
The output is the time delta, not a fraction. It's the output of libcxx/utils/google-benchmark/tools/compare.py. Some of the operations are sub-nano-second so it's handy for that. The times are so low here we may want to time ~10 operations or something instead of just one, but the comparison seems roughly inline with what I've seen with our internal tools.
Added benchmark that creates many different types of functors to avoid branch prediction.
Thanks! What is this output? Is this some "diff" view between the current and the proposed patch? The time column with floating points represents a change in percentage from the baseline to the candidate (e.g. +0.13 == +13%)? I've used Google Benchmark in the past but I've never seen output exactly like that.
Nov 29 2018
Current benchmark output with clang-7:
Addressing some comments, using explicit bools for 'trivial' and 'is_small' again (these perform better for some reason?).
Nov 28 2018
Remove hardcoded define that I left in place during testing.
Fix recent changes that I accidentally clobbered.
Add __config changes.