По-перше, деякий контекст (речі, які більшість із вас все одно знає):
Кожна популярна мова програмування має чітку еволюцію, більшість часу відзначається її версією: у вас Java 5, 6, 7 і т.д., PHP 5.1, 5.2, 5.3 і т.д. Випуск нової версії робить нові API доступними, виправляє помилки, додає нові функції, нові рамки і т. д. Отже, загалом: це добре.
Але як щодо проблем мови (або платформи)? Якщо і в мові щось не так, розробники або уникають цього (якщо вони можуть), або навчаються жити з ним.
Зараз розробники цих мов отримують багато відгуків від програмістів, які ними користуються. Тож має сенс, що з часом (і номерами версій) проблеми на цих мовах будуть повільно, але напевно зникати. Ну не дуже. Чому? Зворотна сумісність, ось чому. Але чому це так? Прочитайте нижче для більш конкретної ситуації.
Найкращий спосіб пояснити моє питання - це використовувати PHP як приклад:
PHP люблять і ненавидять тисячі людей. Усі мови мають вади, але, мабуть, PHP є особливим. Перегляньте цю публікацію в блозі . У ньому дуже довгий список так званих недоліків у PHP. Зараз я не розробник PHP (поки що), але я прочитав все це і впевнений, що великий фрагмент цього списку справді є справжніми проблемами. (Не все це, оскільки це потенційно суб'єктивне).
Тепер, якби я був одним із хлопців, які активно розробляють PHP, я б точно хотів виправити ці проблеми по черзі. Однак якщо я це зробити, то код, який спирається на певну поведінку мови, порушиться, якщо він працює на новій версії. Підсумовуючи це в 2 слова: зворотна сумісність.
Я не розумію: чому я повинен підтримувати PHP сумісним назад? Якщо я випускаю PHP версії 8 з усіма виправленими проблемами, чи не можу я просто поставити на це велике попередження: "Не запускайте старий код на цій версії!"?
Існує річ, яка називається зневагою. Ми мали це роками і це працює. У контексті PHP: подивіться, як в ці дні люди активно заважають використовувати mysql_*
функції (а натомість рекомендують mysqli_*
і PDO). Депресація працює. Ми можемо ним скористатися. Ми повинні його використовувати. Якщо він працює для функцій, чому він не повинен працювати для цілих мов?
Скажімо, я (розробник PHP) так:
- Запустіть нову версію PHP (скажімо 8) з усіма виправленими вадами
- Нові проекти почнуть використовувати цю версію, оскільки вона набагато краща, чіткіша, безпечніша тощо.
- Однак, щоб не відмовлятися від старих версій PHP, я постійно випускаю оновлення до нього, виправляючи проблеми із безпекою, помилки тощо. Це має сенс з тих причин, які я тут не перелічую. Це звичайна практика: подивіться, наприклад, те, як Oracle продовжував оновлювати версію 5.1.x MySQL, хоча вона в основному зосереджена на версії 5.5.x.
- Приблизно через 3 або 4 роки я припиняю оновлювати старі версії PHP і залишаю їх гинути. Це добре, оскільки за ці 3 чи 4 роки більшість проектів все одно перейшли на PHP 8.
Моє запитання: чи всі ці кроки мають сенс? Це було б так важко зробити? Якщо це можна зробити, то чому б це не зробити?
Так, недоліком є те, що ви порушуєте зворотну сумісність. Але це не ціна, яку варто заплатити? Зрештою, через 3 або 4 роки у вас з’явиться мова, на якій 90% проблем виправлено .... з мовою набагато приємніше працювати. Його ім’я забезпечить його популярність.
EDIT : Гаразд, тому я не висловив себе правильно, коли сказав, що через 3 або 4 роки люди перейдуть до гіпотетичного PHP 8. Що я мав на увазі: через 3 або 4 роки люди будуть використовувати PHP 8, якщо вони починають новий проект.
mysql_*
застаріла в 5.5, наприклад), але це не має значення, якщо у більшості хостинг-провайдерів є одна чи навіть дві версії назад (5.3 - на жаль - все ще те, що більшість пропозиції постачальників).