Description
Since the regex
crate uses interior mutability and a bit of synchronization, it follows that marker traits like Send
, Sync
, UnwindSafe
and RefUnwindSafe
are quite relevant and can change based on internal implementation details. #749 for example, removed the thread_local
dependency and got a bit more rigorous about these marker traits on the main Regex
/RegexSet
types, but stopped there.
It turns out other types are impacted too. @kangalioo noted that, for example, Send
was not implemented on the CaptureMatches
iterator in regex 1.3.9
, but it is now implemented in regex 1.4.5
. I'm actually not sure why it wasn't implemented before. The regex
crate doesn't use any non-Send stuff, so I'm not sure where that was coming from. I haven't investigated yet.
Either way, this is a compatibility hazard. Going from !Send
to Send
is fine, but it seems just as likely that we could regress too. The only way I can think to solve this is to assert expected marker traits for all public API types. It seems kind of absurd and tedious, but I don't have any better ideas.