Пост про историю миграции Mercurial с Python 2 на Python 3.
Mercurial — это примерно как Git, но написано на питоне. Есть у этой системы контроля версий свои поклонники.
Они начали постепенно переходить с Python 2 ещё 2008 году, когда только вышел Python 3.0, но активно работали над поддержкой Python 3 только с 2015 года. В общей сложности миграция заняла 11 лет, из них 5 лет активной работы. Это, конечно, эпохально. Само собой, в это же время параллельно проект обрастал новыми фичами, а миграция до последнего момента была лишь фоновым, неприоритетным процессом.
Наивно было полагать, конечно, что получится поддержать третью версию языка, сохраняя совместимость с 2.5 и 2.6. Отказ от очередной старой версии языка давал ощутимый буст в сторону миграции на Python 3. Сам язык тоже активно мешал плавному переходу и поддержке нескольких версий одновременно. По сути, более-менее безболезненно перейти стало можно только с 2.7 на 3.5. Всем версиям до 3.5 не хватало какого-то важного элемента для обратной совместимости. Больше всего чуваки намучались со строками-байтами.
Автор делает серьёзные выводы, что годы с 2008 по 2015 можно считать потерянными для Python-сообщества. Мейнтейнеры языка сильно недооценили сложность перехода со второй версии языка на третью, и это вылилось в катастрофу, последствия которой мы испытываем до сих пор. Несомненно, третья версия значительно лучше второй, но какой ценой. Эти годы могли бы быть потрачены с куда большей пользой. Язык смог пережить этот переход лишь благодаря тому, что Python 2.7 был силён и весь из себя хорош на протяжении всего этого болезненного периода, и люди могли им пользоваться, сохраняя лояльность к языку.
По итогу автор заключает, что для проекта Mercurial этот переход был настолько болезненным и затянувшимся, что даже не факт, что оно всё того стоило. Качество кода после миграции, увы, только ухудшилось. Теперь еще несколько лет вычищать слои совместимости, которые были нужны для поддержки питона 2. А новых классных фич языка, полезных для проекта, не прибавилось (только тайп аннотации). Кроме того, Python 3 даже принёс им дополнительных проблем, потому что низкоуровневый код стало писать сложнее из-за Юникода по умолчанию. По сути мигрировали вынужденно лишь бы не остаться на неподдерживаемой версии языка. Говорит, если бы тогда, в 2014, Rust был бы так же хорош, как сейчас, то лучше бы мигрировали сразу на него.
Грустный пост, но это всё действительно было не весело. Официальной ретроспективы по этому поводу от мейнтейнеров языка я нигде не нашёл, кроме слов Гвидо, что таких миграций больше не будет.
Post #216
405