arrow icon indicating copy to clipboard operation
arrow copied to clipboard

[C++] allocation free error Status

Open bkietz opened this issue 1 year ago • 1 comments

Describe the enhancement requested

In many situations, it'd be beneficial to have an error Status which was copyable without using the heap. For example, this is a frequent pain point with Result<T>. We want Result to be default constructible even if T isn't, so a defaulted Result is an error but this requires heap allocating a Status::State which we immediately overwrite. Similarly, if the value or error is moved out of a Result we'd like to avoid managing the stored object and wind up heap allocating a flag.

Allowing some Status objects to have static lifetime (for example, by tagging the state_ pointer or adding bool Status::State::is_static) should not have an effect on the critical hot paths of moving a status or skipping deletion of ok status. Copying will get slightly slower since we need to branch on state_->is_static, but that's already quite slow due to heap interaction.

Component(s)

C++

bkietz avatar Oct 21 '24 20:10 bkietz

FWIW, absl::Status uses pointer tagging for its junk value: https://github.com/abseil/abseil-cpp/blob/master/absl/status/status.h#L901-L903

bkietz avatar Oct 21 '24 20:10 bkietz

Issue resolved by pull request 44493 https://github.com/apache/arrow/pull/44493

pitrou avatar Nov 14 '24 16:11 pitrou