What are the gory details of why std::regex being slow and why it cannot possibly be made faster?

I am curious as to:

  1. Why things cannot get improved without ABI breaks in this case and

  2. why an ABI break is necessary in order to improve performance.

  3. What would be the changes needed if ABI breaks were allowed?