Программное обеспечение, Личные разработки, Проекты, Портфолио, Хитрости, Заметки, Статьи...

Языки программирования для Веб - Часть 1

В данной статье я постараюсь рассмотреть все достоинства и недостатки, а также провести сравнительный анализ языков программирования для Веб, которые идут на популярных серверных платформах FreeBSD, Linux, Mac Os.

Буду рассматривать: Perl, PHP, Python.
Perl
Perl -- это процедурный язык программирования -- универсальный инструмент для решения очень широкого круга задач. Perl не разрабатывался специально для Web-программирования. Perl, как и любой полноценный язык, имеет некоторое ядро -- набор функций и правил, которые не зависят от платформы, операционной системы и прочих обстоятельств. Код Perl мобилен и переносим и везде одинаков. Различия дистрибутивов Perl схожих версий сводятся наличием установленных модулей. Perl предоставляет программисту ограниченный набор стандартных инструментов. Это дисциплинирует программиста и облегчает обмен кодом и опытом. При этом, программист совсем не скован и всегда может получить требуемые возможности, подключив соответствующий модуль. Perl является зрелым языком. Мало подвержен всяческим багфиксам и изменениям. Снабжен развитыми средствами разработки. Все "детские" ошибки Perl пережил еще более чем 10 лет назад. Perl обеспечивает более высокую производительность в веб-разработках, только если использовать не CGI-подход, а mod_perl. Большинство провайдеров не предоставят вам такой возможности. Perl представляет минимум функций в своем ядре. Чтобы расширить функционал языка требуется подключать дополнительные модули. Большинство других языков имеют гораздо больше встроенных функций. Perl имеет собственную систему документирования и снабжён прекрасной документацией на английском языке. Перегрузка операторов возможна, но является очень ограниченной и искусственной надстройкой. В Perl исключения можно эмулировать, при помощи таких модулей, как Error.pm и Exception.pm, не входящих в стандартную поставку. Они основаны на умелом использовании eval/die, но это весьма искусственный приём, который никак не может обеспечить требуемой гибкости современного объектно-ориентированного языка.  В Perl все переменные глобальны, если не указано иное. Но чаще всего требуется именно иное. В Perl аргументы функций задаются в магическом массиве.

PHP
PHP псевдообъектный язык программирование и изначально предназначался для разработки Web-приложений. Он пытается сочетать мощь полноценного языка и преимущества узкоспециального средства. В поисках компромисса, PHP приобретает целый ряд спорных качеств. PHP не является полноценным языком программирования и практически не имеет своего ядра. Отсюда проистекает целый ряд особенностей PHP. Набор функций PHP, который оказывается в распоряжении программиста, практически полностью зависит от провайдера. («Правильные» провайдеры всегда пишут, с какими опциями был собран их PHP.) Эта разница весьма ощутима. Например, если сайт разработан с использованием Smarty, то он заработает далеко не на всяком хостинге. И происходит это только потому, что аппарат Smarty использует POSIX-расширение механизма регулярных выражений. Если ваше PHP-приложение написано с использованием функций, которых хостер не предоставляет, или вы использовали библиотеки, которые зависят от таких функций, то расширить набор функций PHP самостоятельно чаще всего нельзя. PHP предоставляет (потенциально) великое множество функций. На настоящий момент их более 3000. На реальном хостинге вы обнаружите около 1000 из них. Такой широкий набор выразительных средств не идёт на пользу языку. Разные программисты знают разные наборы операторов. Это затрудняет чтение чужого кода, обмен кодом и совместную разработку. PHP относительно молодой язык. Подвержен частым багфиксам и дополнениям. В PHP механизм указателей находится в зачаточном состоянии. В PHP не предусмотрена такая структура данных, как массив. В этом смысле PHP находится на уровне awk. Одним словом, PHP ещё долго будет меняться, создавая множество проблем разработчикам. При ведении именно Web-разработок, PHP обнаруживает ряд существенных преимуществ. Во-первых, интерпретатор PHP интегрируется в Web-сервер, что в разы увеличивает производительность. Во-вторых, Web-приложения на PHP проще отлаживать. Сообщения об ошибках часто выдаются клиенту, а не пишутся в error_log. В-третьих, PHP имеет широкий набор встроенных функций, для работы по протоколу HTTP. Однако, почти все эти преимущества оборачиваются серьёзными проблемами с точки зрения безопасности ресурса. То, что PHP встроен в сервер, затрудняет диагностику источника атак. PHP даёт большую свободу разработчику -- PHP-скрипт может быть размещён в любой директории сервера. Но это тоже создаёт дополнительные риски. Во многих случаях, по невнимательности разработчиков, посетитель сервера получает возможность «залить» на сервер не только картинки и другие безобидные файлы, но PHP-скрипты, а это уже очень серьёзная опасность. То, что PHP выдаёт сообщения об ошибках в ответ на HTTP-запрос, удобно для разработчика. Но с точки зрения безопасности это решение мне всегда казалось спорным, ведь любой посетитель вашего сайта может узнать об ошибках в ваших программах. А злоумышленнику может оказаться достаточно узнать версию вашего PHP, чтобы «сломать» ваш ресурс. Преимуществом документации PHP является то, что она переведена на русский язык. К недостаткам я бы отнёс её необъятность. Основной проблемой PHP является то, что этот язык позволяет смешивать HTML-код и PHP-код. Фактически, это смешение данных и кода. Человечество уже десятки лет назад осознало, что код и данные следует разделять. Для этого найдено множество изящных решений, от хедеров и конфигурационных файлов, до шаблонов и обособленных хранилищ данных. В этом смысле PHP представляется шагом назад; каким-то старорождённым. Если посмотреть на это с прикладной точки зрения, то ничего хорошего мы тоже не увидим. Объединение HTML- и PHP-кода не улучшает читабельность ни того, ни другого. Соответственно, сопровождение, модернизация и модификация программ тоже затрудняются. Но существуют недостатки, «встроенные» в сам язык. Так, например, представляется очень неудобным то, как регламентируется передача параметров функциям. Будет ли параметр передан по значению или по ссылке определяется не при вызове функции, а при её создании. Вызов же выглядит одинаково и в том и в другом случае. Это удобно, если автором всеx функций являетесь вы сами, и вы хорошо помните прототипы ваших функций. Но при активной работе в команде это приводит к путанице. Точно также обстоит дело и с функциями, возвращающими указатели. Это самый большой из тех недостатков PHP, которые никак нельзя обойти.

Python
Python -- изначально объектно-ориентированный язык. Синтаксис Python естественный и компактный во всём: и в объявлении классов, и при организации наследования, и при доступе к данным и методам объекта. В Python имеется полноценный механизм обработки исключений, встроенный в язык. В Python исключения являются классами, обработка исключений ведётся с учётом структуры этих классов, что позволяет отслеживать целые группы исключений. Кроме того, на каждый класс исключений можно сделать свой обработчик. В Python конструктор всегда создаёт объект, что весьма логично. Если возникла ошибка, то генерируется exception. Python-way громоздкий, за то он позволяет не только корректно обработать ошибку, но и вернуть любую информацию о ней. Синтаксис Python максимально компактен. В нём нет ни фигурных скобок, ни точек с запятой, ни оператора -> ни двойных двоеточий :: (всегда используется «.»). У переменных нет префиксов. Скобки можно опускать везде, где только возможно. В Python все переменные локальны (если не указано иное, глобальные переменные так же допустимы). В Python аргументы функций задаются как во всех нормальных языках.

Комментировать

OpenID принимается здесь Узнать больше об OpenID
  • Rambler's Top100

Об этой записи

Сообщение опубликовано 24.03.2010 09:37. Автор — Безумный Джек.

Предыдущая запись — Как обновить систему при помощи csup?

Следующая запись — Кнопка Retweet своими руками? Легко!

Смотрите новые записи на главной странице или загляните в архив, где есть ссылки на все сообщения.