Python has the additional problem of being highly dynamic, though!
In C++'s case, the transformation tool has much more information, so more things are possible to do.
E.g. let's take the ".erase" case from the article. In python, a method
def foo(bar):
bar.remove(baz)
can't simply change "remove" to "erase", because it has no idea what type "bar" has.A C++ tool sees
void foo(std::list<sometype>& baz)
and can then safely change "remove" to "erase".I think that breaks down as soon as templates are involved, which is very pervasive in C++ codebase.
Given
template<typename T, typename sometype>
void foo(T<sometype>& baz)
It's not so straightforward anymore.It can still apply the operation anytime a specialized object is defined. (This is how templates are compiled, right?)
So while a one-way automated refactoring script sounds like a good idea, and is strictly better than just breaking backwards compatibility and expecting everyone to deal, it wasn't an unqualified success for Python.
[1]: https://docs.python.org/3/library/2to3.html [2]: https://pythonhosted.org/six/