piątek, 15 czerwca 2012

Dlaczego nie PHP - kompatibilność wsteczna (odc. 3)

Na początku marca 2012 wydano  nową wersję 5.4 języka PHP. Nowa wersja wprowadza wiele udogodnień oraz kilka nowinek do gramatyki. Na przykład możliwość używania operatora tablicowego za operatorem funkcji $obiekt->funkcja()[4]; , składni $klasa::funkcja(). Jako zupełna nowość pojawiły się długo oczekiwane cechy (ang. traits). Niestety ze względu na porzucenie części kompatybilności wstecznej niektóre skrypty/programy pisane pod 5.3 mogą przestać działać. Na taki problem napotkałem się po aktualizacji oprogramowania przez pewnego administratora, który nie informując nikogo a swoim zamiarze nagle zmienił na serwerze dedykowanym wersję PHP z gałęzi 5.3.x na 5.4.x.  

Problem dotyczył konkretnie framework'a Kohana 2.3.4. Zdaję sobie sprawę, że framework ten był pisany z myślą o PHP 5.2 jednak pod 5.3 wszystko działało jak dawniej. Po kilku godzinach ciężkich prób i walki na podstawie informacji znalezionych na forum debiana udało się wprowadzić stosowną poprawkę do kodu.

Co ciekawe - na podstawie testów (co potem znalazło potwierdzenie w wyżej wymienionym poście na forum) wynika, że funkcja ob_end_clean() działa delikatnie inaczej niż w poprzednich wersjach. Żeby było śmieszniej dokumentacja PHP nie wspomina na ten temat ani słowem. Również detal ten nie jest wymieniony na liście zmian, które powodują brak kompatybilności wstecznej tej wersji w porównaniu do poprzednich wydań. Zresztą jak widać w changelog'u zmian tych jest całkiem sporo.

Na kolejne wydania PHP czeka się całkiem długo a zmiana drugiego numerka powoduje w skrajnym przypadku zatrzymanie pracy skryptów, czego efektem jest biała strona (specyficzny przypadek dla funkcji pracującej na buforze wyjścia). Zdecydowanie bardziej intuicyjny wydaje mi się cykl wydań Python'a w którym to nawet wersja 2.7 była kompatybilna wstecz w ramach całej gałęzi 2.x. Python do tego jest w mojej ocenie językiem dużo bardziej zaawansowanym w rozwoju i dużo szybciej się rozwijającym. Mimo tego udaje się jego twórcom zachować kompatybilność wsteczną projektów.

Poza tym podobny problem dotyczy samego framework'a Kohana i jego gałęzi 3.x gdzie to przy kolejnych wydaniach twórcy aplikacji opartych na tym framework'u nie mogą aktualizować systemu ze względu na brak wstecznej zgodności.

 
Artykuł udostępniany na licencji CC-BY-SA-3.0

Brak komentarzy:

Prześlij komentarz