Во-первых, некоторый контекст (вещи, которые большинство из вас все равно знают):
Каждый популярный язык программирования имеет четкую эволюцию, большую часть времени отмеченную его версией: у вас есть Java 5, 6, 7 и т. Д., PHP 5.1, 5.2, 5.3 и т. Д. Выпуск новой версии делает доступными новые API, исправляет ошибки, добавляет новые возможности, новые фреймворки и т. д. Итак, в общем, это хорошо.
Но как насчет проблем языка (или платформы)? Если и когда что-то не так в языке, разработчики либо избегают этого (если могут), либо учатся жить с этим.
Теперь разработчики этих языков получают много отзывов от программистов, которые их используют. Таким образом, имеет смысл, что со временем (и номера версий) проблемы в этих языках будут медленно, но верно исчезать. Ну не совсем. Почему? Обратная совместимость, вот почему. Но почему это так? Читайте ниже для более конкретной ситуации.
Лучший способ объяснить мой вопрос - использовать PHP в качестве примера:
PHP любят и ненавидят тысячи людей. Все языки имеют недостатки, но, очевидно, PHP особенный. Проверьте это сообщение в блоге . У него очень длинный список так называемых недостатков в PHP. Сейчас я не PHP-разработчик (пока), но я прочитал все это, и я уверен, что большая часть этого списка - действительно реальные проблемы. (Не все, так как это потенциально субъективно).
Теперь, если бы я был одним из тех, кто активно разрабатывает PHP, я бы наверняка хотел решить эти проблемы, одну за другой. Однако, если я это сделаю, то код, основанный на определенном поведении языка, сломается, если он будет работать в новой версии. Подводя итог в двух словах: обратная совместимость.
Что я не понимаю: почему я должен поддерживать обратную совместимость PHP? Если я выпускаю версию 8 PHP с устранением всех этих проблем, могу ли я просто предупредить об этом: «Не запускайте старый код в этой версии!»?
Есть вещь, называемая амортизацией. У нас это было годами, и оно работает. В контексте PHP: посмотрите, как в наши дни люди активно препятствуют использованию mysql_*
функций (и вместо этого рекомендуют mysqli_*
и PDO). Амортизационные работы. Мы можем использовать это. Мы должны использовать это. Если это работает для функций, почему это не должно работать для целых языков?
Допустим, я (разработчик PHP) делаю это:
- Запустите новую версию PHP (скажем, 8), исправив все эти недостатки.
- Новые проекты начнут использовать эту версию, поскольку она намного лучше, понятнее, безопаснее и т. Д.
- Однако, чтобы не отказываться от старых версий PHP, я продолжаю выпускать обновления для него, исправлять проблемы безопасности, ошибки и т. Д. Это имеет смысл по причинам, которые я здесь не перечисляю. Это обычная практика: посмотрите, например, как Oracle продолжал обновлять версию MySQL до версии 5.1.x, хотя она в основном была ориентирована на версию 5.5.x.
- Примерно через 3 или 4 года я прекращаю обновлять старые версии PHP и оставляю их умирать. Это нормально, поскольку за эти 3 или 4 года большинство проектов все равно перешли на PHP 8.
Мой вопрос: все эти шаги имеют смысл? Это было бы так сложно сделать? Если это можно сделать, то почему это не сделано?
Да, недостатком является то, что вы нарушаете обратную совместимость. Но разве это цена не стоит платить? Как положительный момент, через 3 или 4 года у вас будет язык, в котором устранены 90% проблем ... язык, с которым гораздо приятнее работать. Его имя обеспечит его популярность.
РЕДАКТИРОВАТЬ : ОК, поэтому я не выразил себя правильно, когда я сказал, что через 3 или 4 года люди перейдут на гипотетический PHP 8. Я имел в виду следующее: через 3 или 4 года люди будут использовать PHP 8, если они начнут новый проект.
mysql_*
устаревшей в 5.5), но это не имеет значения, если у большинства хостинг-провайдеров есть одна или даже две версии (5.3, к сожалению, все еще то, что большинство предложения провайдеров).