From Novosibirsk, Russia? Our tiny company is looking for current or future rock-star developers.

Showing posts with label php. Show all posts
Showing posts with label php. Show all posts

October 09, 2006

PHP5 vs. Python/Ruby

Встретил человека, которого удовлетворяет PHP5. Мне кажется, ему легко живется в этом мире.

Языки с динамической vs. со статической типизацией — это, безусловно, предмет длительного спора. У каждого из них есть свои положительные и отрицательные стороны.

Статическая типизация даёт программисту больше уверенности в коде (иногда ложной).

Динамические языки, во-первых, позволяют выражать мысли естественно (окружающий мир тоже живет по принципам duck typing, а не строгой типизации), во-вторых, уникальной сильной стороной динамических языков является метапрограммирование.

Если вы никогда не занимались метапрограммированием, то для вас вопрос выбора языка сводится только к наличию типов у переменных, то есть фактически к ничему. (Ну, о'кей, к выбору формы выражения мыслей.) Если вы пробовали метапрограммирование на C++ (единственном поддерживающем его статически типизованном языке), то уже поняли, насколько это сложно и непригодно для повседневной деятельности.

Главное преимущество языков с динамической типизацией — применение метапрограммирования и функций высших порядков как основного способа программирования. Динамическая типизация просто делает это возможным.

Что же мы видим в PHP5? Метапрограммирование отсутствует напрочь. Авторы очень старались сделать всё, как у нормальных людей, но так и не поняли самого главного. Более того, они пытаются сделать язык похожим на Java, но только без строгой типизации (что суммирует недостатки обоих подходов в одном языке).

Лично я предпочитаю Ruby, потому что в нем красивее выглядит и метапрограммирование, и применение higher-order functions (благодаря SmallTalk'овским корням). Впрочем, это уже дело вкуса. Пусть метапрограммирование в Питоне выглядит более странно, но оно не менее мощное.

P.S. Помнится, раньше были споры про строгую типизацию, а не про статическую. А вот сегодня я, не морщась, употребляю эти термины почти как синонимы. Десять лет назад меня бы за такое линчевали.

P.P.S. Да, забыл, но впрочем это естественно, зачем говорить о том, чего нет. Функции высших порядков в PHP тоже имеют рудиментарный вид (ну то есть отсутствуют).