> On Jul 12, 2019, at 12:18 PM, Jonathan Bedard <jbed...@apple.com> wrote: > > Hello WebKit developers, > > Now that the Catalina developer seeds are available, it is official that the > new Mac developer tools come with Python 3. As a result, we need to continue > the ongoing discussion about migrating our Python 2.7 scripts to Python 3. > > I propose that, over the next 9 months, we do the following: > > 1. Make any no-cost Python 3 compatibility changes, in particular > - print foo -> print(foo) > - import .foo -> import webkitpy.foo > 2. Convert any scripts not used in automation to Python 3 ASAP (scripts like > bisect-builds, block-spammers, compare-results) > 3. Make most Python 3 compatibility changes which sacrifice efficiency, > subject to a case-by-case audit. These would be things like: > - dict.iteritems() -> dict.items() > - dict.items() -> list(dict.items()) > 4. Install Python 3 on macOS Sierra and Mojave bots > 5. Convert peripheral automation scripts to Python 3 1-by-1 (scripts like > clean-webkit, merge-results-json, webkit-patch) > 6. Convert testing scripts and webkitpy to Python 3 in a single change > > The trouble I foresee us encountering with any scheme which attempts a > conversion which retains both Python 2.7 and Python 3 compatibility is code > like this: > > for expectation_string, expectation_enum in > test_expectations.TestExpectations.EXPECTATIONS.iteritems(): > ... > > In this code, the EXPECTATIONS dictionary is thousands of elements long. In > Python 2.7, iteritems() gives us an iterator instead of creating a new list, > like items() would. In Python 3, iteritems() doesn’t exist, but items() does, > and now gives us an iterator instead of creating a new list. The trouble here > is that, in this case, creating a new list will be very expensive, expensive > enough that we might manage to impact the testing run. There isn’t really an > elegant way around this problem if we want to support both Python 2.7 and > Python 3, other than defining different code paths for each language.
The official Python 3 transition documentation has a fairly elegant solution to this, actually?? https://legacy.python.org/dev/peps/pep-0469/ See "Migrating to the common subset of Python 2 and 3” — you define different iteritems() helpers in the two cases. Seems pretty reasonable to me. > There are other small gotchas as well. For example, ‘%’ is no longer a > protected character, which can actually change the behavior of regexes. > That’s why I think it’s better to just try and directly convert things > instead of attempting to be compatible with both Python 2.7 and Python 3. > > Jonathan > _______________________________________________ > webkit-dev mailing list > webkit-dev@lists.webkit.org > https://lists.webkit.org/mailman/listinfo/webkit-dev
_______________________________________________ webkit-dev mailing list webkit-dev@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-dev