I think you fail to understand the concept of backward-compatibility. I
told you before, you need to take it into account. If you do not, your suggestions may be rejected out of hand. Actually, I now notice you mentioned "put aside the backward compatibility". I do not understand how you can think that would even be an option.
Also, there are not more than three ways to get the same value. There are different properties for different values. This was already pointed out to you, but you seem to not understand.
The most common usage is to retrieve the
value of the match or a captured subpattern, but you are saying that
m.1 and
m[1] should be removed and everyone should use
m[1].String. I am not sure that any user other than you would want this, if the change was even permitted.
Instead of invoking Match.Pos, Match.Len and Match.Name on each iteration, you would be invoking Subpattern.Pos, Subpattern.Len and Subpattern.Name. Why do you think it would be faster? Your theory about performance also fails to take into consideration the overhead of creating an additional object for each subpattern.
There are just too many problems with your suggestion, as seems to be the case too often. Please put more thought into future suggestions before posting.