+1, this is what I suggested when the name was ConcurrentValue:
The purpose of
@concurrent
is to support function values that conform toConcurrentValue
and can therefore be used in contexts that requireConcurrentValue
. The attribute-based design feels somewhat ad-hoc and not scalable. For example, we have discussed function values that could conform toEquatable
(using equatable captures combined with source identity).How would additional protocols fit into the current design? Would we introduce new attributes every time we want function values that have a new conformance (for example, an
@equatable
)?I'm wondering if you have considered a more general approach. The immediate option that comes to mind is to use an
@ConcurrentValue
attribute on the function. This would allow@Equatable
,@Hashable
, and any other conformances that could make sense in the future.