Пользователь
0,0
рейтинг
11 ноября 2014 в 17:22

Разработка → О Symfony 3.0 перевод

За последний год я очень много говорил о Symfony 3.0 на разных конференциях. Я думал о наилучшей стратегии для этой версии уже давно, и теперь настало время поделиться моими мыслями со всеми.

Мажорные версии


Некоторые разработчики и большинство менеджеров проектов боятся обновлений мажорных версий используемых ими проектов с открытым исходным кодом. Наверное, это из-за того, что мажорные версии ассоциируются с потерей обратной совместимости. Возникает много вопросов: принесут ли изменения пользу моему проекту? Достаточно ли ясны планы разработчиков, чтобы был смысл обновляться? Будет ли обновление легким? Что, если я не могу или не хочу обновляться? И так далее.

Страх перед мажорными версиями растет своими корнями из нашего прошлого: вспомните Perl 6 или PHP 6. В мире Symfony вторая версия тоже была революционной по сравнению с symfony 1. Я понимаю, почему люди нервничают, когда слышат о третьей версии, и именно в этом посте я расскажу, почему вам не нужно паниковать.

Во-первых, все знают, что обновления как мажорных, так и минорных версий должны происходить регулярно. Мы должны иметь возможность ломать обратную совместимость, чтобы удалять неактульный функционал, исправлять ошибки архитектуры и учитывать изменения в экосистеме, такие как новые возможности PHP, новые методологии разработки, новые парадигмы веба. Интернет-среда очень быстро эволюционирует, и если мы не будем адаптировать к ней Symfony, она станет неактуальна намного быстрее, чем вам кажется.

Как менеджер проекта Symfony я отвечаю за то, чтобы код был максимально стабильным как можно дольше. Но стабильность — это не статус-кво: мы добавляем возможности и исправляем архитектурные недочеты и в минорных релизах, как вы могли заметить на примере версий 2.4, 2.5 и 2.6. Все эти версии добавляли функционал в фреймворк, и каждая из них была заметным шагом вперед для самого фреймворка. Но обновляться было просто из-за того, что сохранялась обратная совместимость. Проблема — в сохранении обратной совместимости для устаревших или неактуальных фич (и я даже не говорю о производительности!). Для Symfony 2 это было достаточно просто, потому что она построена на крепкой базе из независимых компонентов. По определению семантического версионирования, новая мажорная версия — это просто очередной шаг, на котором мы можем подчистить код и избавиться от хлама.
Что такое Symfony 3.0?
Поскольку новые фичи постоянно добавляются в минорных версиях, а устаревшие помечаются как таковые, вы можете начать улучшать совместимость вашего кода с Symfony 3.0 уже сегодня. Прочитайте руководство по обновлению и выполните предлагаемые изменения, это позволит вам заранее подготовиться к миграции.

Как вы, наверное, уже догадались, в Symfony 3.0 не будет кардинально меняться низкоуровневая архитектура, и релиз не будет революционным. Вот примеры некоторых изменений в Symfony 2.x, которые сделают 3.0 еще лучше:

  • Совместимость со стандартами улучшена (мы используем логгер из PSR-3 и убрали интерфейс Symfony\Component\HttpKernel\Log\LoggerInterface)
  • В Symfony 3.0 исправлены некоторые архитектурные ошибки (консольные хелперы, хранящие состояние, заменены лучшими альтернативами, напр. ProgressBar / ProgressHelper или Table / TableHelper; Yaml::parse() больше не принимает имена файлов)
  • Symfony 3.0 еще более распределена и реюзабельна. HttpKernel будет разделен на несколько меньших модулей, например, профайлер будет отделен, классы будут перемещены из бандлов в компоненты, компоненты выделены из уже существующих...)

График выхода Symfony 3.0


Избежать паники по поводу новых мажорных версий можно, если сообщать о своих намерениях как можно раньше. Вот именно поэтому сообщество Symfony так тщательно задокументировало нашу стратегию, от обещаний обратной совместимости до roadmap'a и релизов с расширенной поддержкой.

Один из способов минимизировать страх перед новыми версиями — это сделать их предсказуемыми. Согласно нашему графику релизов, Symfony 2.7, которая должна выйти в мае 2015, будет следующим релизом с длительной поддержкой, которая продлится до мая 2018 года по багфиксам и до мая 2019 года по обновлениям безопасности. Вместо того, чтобы планировать следом 2.8, я предлагаю перескочить прямо к 3.0. Так что 3.0 будет выпущена в ноябре 2015 года, и первым релизом с расширенной поддержкой в ветке 3.x будет 3.3, которая выйдет в мае 2017.

Интерактивный график релизов также был обновлен с учетом ветки 3.0.

Что вам делать? Согласно главе документации о процессе релизов, есть две стратегии обновления:

Режим двойной поддержки был придуман, чтобы сделать каждого пользователя Symfony счастливым. Для тех, кто хочет работать с самым свежим и крутым, есть стандартная версия, которая выходит раз в полгода, и два месяца выделяются на обновление. Для тех, кому нужна стабильность, есть версия с расширенной поддержкой: новая версия выходит каждые два года, и год дается на обновление.


Где взять Symfony 3.0?


Чтобы всем было проще помогать разработке Symfony 3.0 уже сейчас, master-ветка главного репозитория теперь отводится под 3.0, а для 2.6 и 2.7 мы создали отдельные ветки.

Если ваш проект использует master-ветку Symfony, чтобы следить за развитием 2.x, переключитесь на 2.7 сегодня.

Стратегия слияния изменений будет почти такой же, как сейчас, за исключением некоторых изменений:

  • Новый функционал будет добавляться в 2.7, если это не будет приводить к потере совместимости, или если изменения не влияют на существующий код
  • Новые фичи будут добавляться в 3.0, если не будет способа заставить их работать в 2.7
  • Исправления багов по-прежнему будут добавляться в самую старую поддерживаемую ветку и в новые ветки (и 3.0 тоже) регулярно

Минимальная версия PHP для Symfony 3.0



Наконец, что с минимальной версией PHP? Несколько дней назад я проводил опрос на эту тему, и результаты таковы:



На основании этих результатов я предлагаю сделать PHP 5.5 минимальной поддерживаемой версией для Symfony 3.0. Я хочу сохранить возможность поднять это требование до PHP 5.6 где-то в следующем году, но точная дата будет зависеть от наших потребностей и поддержки новой версии хостерами и дистрибутивами ОС.

Как помочь?


Есть много простых изменений, которые можно реализовать в Symfony 3.0 уже сегодня. В первую очередь в ветке 2.7 все устаревшие возможности должны сообщать о себе в лог. В master-ветке эти возможности должны быть удалены. И наконец, руководство по обновлению должно быть протестировано и доработано так, чтобы обновляться было легко и просто. Также вы можете посмотреть на тикеты, протегированные как 3.0 на Гитхабе.

Хорошего вам кода!
Перевод: Fabien Potencier
kix @kix
карма
33,7
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (11)

  • +3
    Голосовал за 7-ю версию PHP.
    Думаю Symfony да и всему PHP миру нужно стремиться к инновациям, очень нравится свежий взгляд от Facebook на все это, в виде HHVM и нового языка Hack.
    • +4
      Вот PHP 7 Timeline RFC, релиз запланирован на середину октября 2015 (причем еще далеко не факт, что все пойдет по плану); при этом Symfony 3 собрались релизить в ноябре 2015 — всего лишь месяц спустя.
      Так что PHP 7 — это конечно круто, но скорее всего чисто физически невозможно. С другой стороны, по словам Anthony Ferrara (ex-PHP Core Team) переход большинства разработчиков на PHP 7 пройдет гораздо быстрее, чем в свое время на пятую версию.
    • 0
      Думаю, им всё же важна стабильность. Лучше пусть в минорном релизе переползут на 7, когда он уже будет доступен везде в виде стабильной версии.
      • 0
        Не перейдут. В минорном даже переход с 5.5 на 5.6 был бы под вопросом, а про 7-ку и речи не может идти.
        Надо будет ждать 4-ую ветку, но до этого еще лет 5 — неизвестно что там будет к тому времени
        • 0
          Жаль. Но переходить в третьей версии на 7 тоже как-то резковато.
          • +1
            Так жалеть не о чем :) Никто же не запрещает использовать Symfony3 на php7, вероятно это даже будет наиболее популярная связка в 2016/2017.
            Тут речь идет о минимальной версии для контрибьюторов: какие фичи они смогут использовать при разработке компонент и самого фреймворка. На эту тему были очень серьезные дебаты: некоторые даже серьезно рассматривали возможность остаться на 5.3
            • +2
              ИМХО, очень хорошо, что не остались. Именно проекты такого уровня могут толкать всех остальных в будущее.
  • +4
    Голосовал за 5.5, т.к. мне эта версия сейчас наиболее близка и обкатана, но вполне логично рассматривать переход на 5.6 — можно сказать последний LTS в 5.х. Но Фабьен правильно сказал, что надо смотреть какая ситуация будет с этой версией к началу следующей осени.
  • +4
    Фабьен — молодец!
  • –1
    «Но обновляться было просто из-за того, что сохранялась обратная совместимость.»
    Хорошая шутка.
    • 0
      И в чем шутка? У вас были какие-то проблемы при переходе на новую версию? Принципиально то ничего не менялось от версии к версии. Что-то упростили, что-то переделали, но переписывать проекта из-за этого уж точно не приходилось.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.