Make MatchData frozen and forbid MatchData.allocate
MatchData.allocate is allowed, but almost every MatchData method called on it
raise TypeError, 'uninitialized Match'.
I think MatchData should be frozen, none of its internal fields are mutable and I don't see any use case for storing instance variables on it.
Once frozen, we can implement MatchData#dup and #clone as just
return self, and we don't need to check for the uninitialized case.
And Marshal can have special treatment to create an initialized MatchData directly.
My main motivation is looking at the code in TruffleRuby required to implement
MatchData.allocate and check if it's initialized in so many places:
Thoughts? Anyone against?
cc alanwu (Alan Wu)