Po pierwsze, jakiś kontekst (rzeczy, które i tak większość z was zna):
Każdy popularny język programowania ma wyraźną ewolucję, przez większość czasu oznaczoną jego wersją: masz Java 5, 6, 7 itd., PHP 5.1, 5.2, 5.3 itd. Wydanie nowej wersji udostępnia nowe interfejsy API, naprawia błędy, dodaje nowe funkcje, nowe ramy itp. Podsumowując: to dobrze.
Ale co z problemami języka (lub platformy)? Jeśli i kiedy coś jest nie tak w języku, programiści albo go unikają (jeśli mogą), albo uczą się z tym żyć.
Teraz programiści tych języków otrzymują wiele informacji zwrotnych od programistów, którzy ich używają. Dlatego wydaje się sensowne, że w miarę upływu czasu (i numerów wersji) problemy w tych językach będą powoli, ale z pewnością znikną. Cóż, nie za bardzo. Dlaczego? Dlatego kompatybilność wsteczna. Ale dlaczego tak jest? Przeczytaj poniżej, aby uzyskać bardziej konkretną sytuację.
Najlepszym sposobem na wyjaśnienie mojego pytania jest użycie PHP jako przykładu:
PHP jest kochany i nienawidzony przez tysiące ludzi. Wszystkie języki mają wady, ale najwyraźniej PHP jest wyjątkowy. Sprawdź ten post na blogu . Ma bardzo długą listę tak zwanych wad w PHP. Teraz nie jestem programistą PHP (jeszcze nie), ale przeczytałem to wszystko i jestem pewien, że duża część tej listy to naprawdę prawdziwe problemy. (Nie wszystko, ponieważ jest to potencjalnie subiektywne).
Teraz, gdybym był jednym z facetów, którzy aktywnie rozwijają PHP, z pewnością chciałbym rozwiązać te problemy, jeden po drugim. Jeśli jednak to zrobię, kod oparty na określonym zachowaniu języka ulegnie awarii, jeśli zostanie uruchomiony w nowej wersji. Podsumowując w 2 słowach: zgodność wsteczna.
Nie rozumiem tylko: dlaczego powinienem zachować kompatybilność wsteczną PHP? Jeśli wydam PHP w wersji 8 z naprawionymi wszystkimi problemami, czy nie mogę po prostu ostrzec jej, mówiąc: „Nie uruchamiaj starego kodu w tej wersji!”?
Istnieje coś takiego jak deprecjacja. Mieliśmy to od lat i działa. W kontekście PHP: zobacz, jak obecnie ludzie aktywnie zniechęcają do korzystania z mysql_*
funkcji (zamiast tego polecają mysqli_*
i PDO). Amortyzacja działa. Możemy to wykorzystać. Powinniśmy go użyć. Jeśli działa dla funkcji, dlaczego nie miałby działać dla całych języków?
Powiedzmy, że ja (programista PHP):
- Uruchom nową wersję PHP (powiedzmy 8) ze wszystkimi tymi wadami
- Nowe projekty zaczną korzystać z tej wersji, ponieważ jest ona znacznie lepsza, jaśniejsza, bezpieczniejsza itp.
- Jednak, aby nie rezygnować ze starszych wersji PHP, wciąż publikuję aktualizacje, naprawiam problemy bezpieczeństwa, błędy itp. Ma to sens z powodów, których nie wymieniłem tutaj. Jest to powszechna praktyka: spójrz na przykład, w jaki sposób Oracle aktualizuje MySQL w wersji 5.1.x, mimo że głównie koncentruje się na wersji 5.5.x.
- Po około 3 lub 4 latach przestaję aktualizować stare wersje PHP i zostawiam je na śmierć. To dobrze, ponieważ w ciągu tych 3 lub 4 lat większość projektów i tak przejdzie na PHP 8.
Moje pytanie brzmi: czy wszystkie te kroki mają sens? Czy byłoby to tak trudne? Jeśli można to zrobić, to dlaczego nie jest zrobione?
Tak, wadą jest to, że łamiesz wsteczną kompatybilność. Ale czy nie jest to cena, którą warto zapłacić? Zaletą jest to, że za 3 lub 4 lata będziesz mieć język, w którym naprawiono 90% jego problemów ... język o wiele przyjemniejszy w pracy. Jego nazwa zapewni jej popularność.
EDYCJA : OK, więc nie wyraziłem się poprawnie, kiedy powiedziałem, że za 3 lub 4 lata ludzie przejdą do hipotetycznego PHP 8. Miałem na myśli: za 3 lub 4 lata ludzie będą używać PHP 8, jeśli zaczną nowy projekt.
mysql_*
na przykład przestarzałe w wersji 5.5), ale nie ma to znaczenia, jeśli większość dostawców hostingu ma jedną lub nawet dwie wersje z powrotem (5.3 - niestety - wciąż jest tym, co większość oferty dostawców).