Python vs Perl — продолжение

Доисторические времена
Perl появился в 1988 году (строго говоря, в декабре 1987-го).
Какие основные идеи легли в основу Perl?

Основная объективная идея состояла в объединении возможностей различных средств для манипулирования текстовыми файлами: sh, awk, sed, tr. На тот момент такого единого средства не существовало, а необходимость в нём была.

Основная субъективная идея состояла в том, что новый язык должен быть не только схож с упомянутыми средствами, но и максимально приближен к живому английскому языку. (Напомню, что создатель Perl — Larry Wall — по образованию лингвист.)
Как эти идеи были реализованы?

Обе идеи были реализованы блестяще.

Мир обрёл скриптовой язык, невиданной до той поры мощности.

Не знаю, можно ли считать синтаксис Perl хоть сколько-то сходным с языком Шекспира, но грамматика получилась совершенно не компьютерная. Хотя, это никого не смущало потому, что конкурентов у Perl всё равно не было.

«Не компъютерность» выразилась в том, что грамматика Perl не поддаётся BNF-нормализации (см. perlfaq7), и для сборки Perl не подходят классические компиляторы компиляторов, такие как yacc. Строго говоря, Perl можно скомпилировать только имея уже скомпилированный Perl. К счастью, в дистрибутив включаются уже пред-обработанные файлы, это позволяет избежать неразрешимых проблем.

Справедливости ради, следует отметить, что Perl 5.10 обещает иметь чёткую грамматику. Но это будущее, которое пока не наступило (на момент написания этого замечания).

Расцвет Perl
Perl начинает широко использоваться для самых разных целей, начиная от обработки тестовых файлов и заканчивая системными утилитами. Он становится неотъемлемой и жизненно-необходимой частью любой UNIX-системы.

В 1993 году рождается Web и Perl начинает широко применяться для Web-программирования, становясь практически монополистом в этой области.

Напомню, что первый релиз сервера Apache (0.6.2) вышел в свет в 1995 году. Perl'у к тому времени было уже семь лет, это был развитый и стабильный язык, не имеющий конкурентов.

Предвидения и пророчества
Perl продолжал развиваться, его, и без того неоправданно сложная, архитектура становилась всё более запутанной.

В 2000-ом году Larry Wall объявил о необходимости создания Perl6, который должен избавиться от многих рудиментарных элементов и обрести наконец нормальный формальный синтаксис. Эта необходимость стала очевидна потому, что сообщество Perl-разработчиков стало редеть. (Я говорю не о людях, который программируют на Perl, а о людях, которые развивают сам Perl: правят ошибки, переносят Perl на другие платформы.) Ещё тогда Larry Wall смог предвидеть сложности, которые ждут Perl, и пророчества сбылись.
Отмирание Perl

Тогда, в начале века, трудно было разглядеть тенденции. На прикладном уровне Perl процветал. Казалось, что Perl развивается семимильными шагами. В 1997 вышел Perl 5.004, обладающий многими новыми воодушевляющими возможностями. (Я и сам в те годы был в восторге от Perl.)

Но переносить и обновлять Perl становилось всё сложнее и разработчики операционных систем стали отказываться от него. Так например разработчики FreeBSD проделали немалую работу, чтобы отделить Perl от базовой системы, и в 2005-ом году Perl был полностью вычищен из базовой системы.

Многие думают, что этот отказ вызван соображениями экономии дискового пространства или повышения производительности (в данном случае, в основном, скорости загрузки системы). Да, конечно, отказ от Perl решает эти задачи. Но в условиях постоянного роста производительности компьютеров упомянутые проблемы совсем не остры. Основная проблема, которую создаёт Perl, это сложность обновления и поддержки системы. Присутствие Perl, в качестве обязательно компонента, значительно затрудняет этот процесс.

Уроки Perl
Perl сыграл колоссальную роль. Он стал первым скриптовым языком, который давал программисту почти такую же свободу, как компилируемые языки. Он показал, на сколько необходимы скриптовые языки программирования. Но так же он сделал очевидным тот факт, что к разработке скриптовых языков надо подходить не менее ответственно, чем к любым другим языкам.

Всё это было учтено при разработке более молодых языков, таких, как Python и Ruby, которые только зародились в те времена, когда Perl5 работал практически на всех web-серверах в мире. Тогда на эти языки мало кто обращал внимание, но постепенно они набрали необходимую функциональность, обзавелись обширными библиотеками и перестали уступать по возможностям Perl.

Имея равную с Perl мощность, новые языки получили важное преимущество — строгий, заранее продуманный, синтаксис; что позволило создавать мощные, оптимизированные компиляторы. (Даже скриптовые программы необходимо компилировать.)
А что же Perl6?

Разработчики Perl осознали слабость своих позиций ещё в 2000-ом, но на сколько они продвинулись?

Да, принято решение о том, что Perl6 должен иметь строгий синтаксис, но самого синтаксиса пока так и нет (прошло почти 10 лет!).

Кроме того, принято весьма спорное решение, согласно которому Perl6 будет компилировать программы в некий промежуточный формат (байт-код), который уже будет выполняться виртуальной машиной (аналогично Java). Это, конечно, значительно повысит производительность программ, но создаст множество проблем. Во-первых, язык перестаёт быть скриптовым в чистом виде: кроме исходного кода, появляется скомпилированная программа. Это сразу сузит область его применения, на пример для rc-скриптов такой язык уже не годится. Во-вторых, совершенно не ясно, как писать новые модули в Perl на других языках. Сейчас множество модулей написано с использованием С, как перенести эти модули на новый Perl? Как написать новые расширения на С для Perl6? Ответов на эти вопросы нет.

Это уже похоже на предсмертную агонию. Пытаясь исправить старые ошибки, разработчики совершают новые поспешные действия, не задумываясь (как мне кажется) о последствиях.

И судьба Perl6 оказывается печальной, хотя сам язык ещё не появился. Даже ActiveState отказывается от участия в разработках Perl6.
А тем временем

Perl дряхлеет, но мир этого не замечает, производя новые скриптовые языки. Например во FreeBSD 7 (да-да, FreeBSD, счастливо избавившейся от Perl) появится новая система для установки пакетов — finstall. На чём она написана? — на Python.

В то время, когда от Perl отворачиваются даже те, кто раньше его портировал и развивал, к Python проявляется самое пристальное внимание. Так Nokia не только портировала Python на Symbian 60, но и разработала прекрасную открытую библиотеку, позволяющую делать всё необходимое, от парсинга SMS до проигрывания mp3.

Google App Engine пока поддерживает один язык; и это Python (с недавних времён добавлена поддержка Java).

В Python-сообществе рождаются и новые технологии создания эффективных Web-приложений: от уже зарекомендовавшей себя SCGI, до WSGI, находящейся в фазе активного развития. Появляются и активно используются и Web-сервера, написанные на Python: от Medusa до Zope.

Одним словом, жизнь в Python-сообществе бьёт ключом. А главное, туда приходят не только фанатики-программисты, но транснациональные корпорации, а значит — капитал. А это уже не шутки.

Не отставайте от времени и вы.


Комментарии запрещены.





Статистика

Рейтинг@Mail.ru