Почему Perl обычно используется для написания CGI-скриптов? - PullRequest
5 голосов
/ 23 мая 2010

Я планирую добавить лучшую функцию поиска на свой сайт, поэтому я подумал, что напишу его на C и использую CGI как средство для доступа к нему. Но кажется, что Perl - самый популярный язык, когда дело доходит до CGI. Это почему? Разве это не было бы быстрее запрограммировано в C или машинном коде?

Какие преимущества, если они есть, есть в написании на языке сценариев?

Спасибо.

Ответы [ 8 ]

18 голосов
/ 23 мая 2010

В те времена, когда CGI становился популярным, Perl был самым простым языком для использования.Люди могли очень быстро подобрать «Baby Perl», и, поскольку программа представляла собой текстовый файл, они могли легко загрузить его и разослать.С тех пор как Perl начал работать как язык системного администрирования, на многих серверах он уже установлен.Когда пришло время сделать CGI-скрипт на каком-либо хостинге, Perl, скорее всего, уже был там.Кроме того, Perl-скрипт практически одинаков на любой платформе, поэтому то, что вы написали локально, скорее всего, работало точно так же на другой машине.

В «случайных программистах» было быстрее программироватьбольшая схема вещей, потому что им нужно было меньше учиться, прежде чем они смогут составить полезную программу;они могли бы начать с нуля и запустить программу на Perl в течение часа, даже если бы они просто ее загружали.Им не нужно было беспокоиться обо всем, что приходит с написанием и компиляцией программы на C, а затем с переносом ее на другой хост (который может быть другой платформой).

Perl быстро обосновался, и вывсе еще вижу последствия этого сегодня.Если бы Perl должен был начать с нуля сегодня, я не думаю, что он обязательно победил бы над чем-то еще.PHP, безусловно, захватил низкую группу, быстро запускающуюся толпу (и для большинства из них это, пожалуй, правильный инструмент на первый взгляд).

Не повредило, что в Perl было много функций обработки текста, или.Некоторые люди говорят о CPAN, но он едва существовал, когда Perl начал замечать программирование на CGI.

Однако Perl не такой особенный для программирования на CGI, как раньше.Он по-прежнему выполняет все те замечательные вещи, которые у него всегда есть, но теперь различные другие языки догнали и функциональность, и доступность, и осведомленность сообщества.

Я начал программировать CGI в 1994 году, и я все еще вижу, как удивительнои ошеломляюще тяжело большинство фреймворков делают это.Мне бы очень хотелось, чтобы тогда у нас был Приморский , потому что вы даже не знаете обо всех глупостях, которые заставляют вас делать другие фреймворки.Насколько лучше было бы мир, если бы мы все изучали Smalltalk.:)

6 голосов
/ 23 мая 2010

Безопасность, с одной стороны.Если вы пишете на C, вы должны быть очень осторожны, чтобы убедиться, что вся ваша обработка строк правильная, чтобы вы не вводили переполнения буфера и т. Д. На любом приличном языке сценариев кто-то другой уже сделал это для вас.Возможно, у вас могут быть другие дыры в безопасности, но если во время выполнения или в модуле расширения нет ошибки, у вас не будет переполнения буфера.Это преимущество не ограничивается языками сценариев;скомпилированные языки, такие как Java и C #, также предоставляют его, и его можно получить (хотя часто и труднее) в C ++ с std::string и C с хорошей библиотекой строк.

В плане безопасности Perl имеет еще одну полезную особенность, незамечено во многих других системах: «испорченный» режим.Это предотвращает слепую передачу пользовательского ввода в другие системы как часть запроса к базе данных, командной строки и т. Д. Это является отличным преимуществом при написании CGI-сценариев, поскольку ваш сценарий умрет ровно, прежде чем он передаст непредвиденный пользовательский ввод в оболочку длявыполнение.Режим Taint не идеален, так как процесс отмены зависит от того, как программист делает все правильно, но он, по крайней мере, помогает отследить пропущенные вами пути кода.

Кроме того, в этот момент Perl долгое время использовался дляCGI-скриптинг, поэтому существует большое количество библиотек, фреймворков и т. Д., Которые уже упрощают написание новых скриптов.Плюс у CPAN есть код, позволяющий делать что угодно.

4 голосов
/ 23 мая 2010

ОК, остальные ответы дали довольно веские объективные причины.Просто для полноты, вот субъективная оценка, чтобы придать ей немного цвета:

Я написал:

  • Программное обеспечение CGI на чистом C (за деньги, профессионально).Это включало создание всей библиотеки CGI (это было за несколько дней до того, как стали доступны библиотеки CGI).
  • Мои собственные библиотеки CGI в Perl
  • CGI в Perl с использованием CPAN.

Основываясь на этом опыте, чистый С дал наибольшее удовлетворение в том, что касается угла «Посмотри на это крутое техническое достижение, которое я сделал».Тем более, что это было во времена, когда CGI был совершенно новым и статичный HTML был основным контентом повсюду.

Свернуть мой собственный Perl CGI технически было намного проще, чем C, по всем объективным причинам.перечислены в других ответах.

И проекты CPAN Perl были единственными, которые обеспечили довольно приличное время выполнения доставки и позволили мне сосредоточиться на построении бизнес-логики, а не на сантехнике.

3 голосов
/ 23 мая 2010

В дополнение к уже упомянутым ответам для базовых веб-приложений скорость передачи данных по сети является более узким местом, чем выбор языка. Как правило, писать веб-приложения на Perl легче, чем на C, поэтому небольшая разница в скорости выполнения не стоит дополнительных усилий, необходимых для создания приложения. C на самом деле иногда используется для определенных частей очень ресурсоемких веб-приложений.

3 голосов
/ 23 мая 2010

Самое большое преимущество использования Perl - CPAN .

2 голосов
/ 23 мая 2010

Работа со строками, часто большая часть веб-разработки, довольно болезненна и подвержена ошибкам в C, в частности из-за отсутствия автоматического управления памятью. Имейте в виду, что часто время выполнения скрипта не является узким местом или может быть обойдено соответствующими механизмами кэширования. Во многих случаях хорошей идеей является выбор языка, который максимизирует производительность разработчика, вместо того, чтобы излишне жертвовать временем разработки для повышения производительности, которое останется незамеченным пользователем сайта.

Этот общий принцип, однако, не в полной мере применим в вашем случае, так как поисковая система может выиграть от оптимизированного низкоуровневого кода. Это не означает, что вам придется делать все в C, хотя: известно, что интерпретатор PHP мучительно медленен, но, поскольку большинство библиотечных функций реализовано в C, с этим можно обойтись. Я бы порекомендовал написать приложение на выбранном вами языке высокого уровня и заново реализовать только те части языка C, которые были определены как узкие места.

0 голосов
/ 23 мая 2010

Я думаю, выгода от использования языка сценариев в том, что большинство людей гораздо более продуктивно используют динамический язык более высокого уровня, чем они используют C.

Кажется, что многие людибеспокоиться о скорости, но на самом деле это нормально ... и если это становится проблемой, большинство языков сценариев имеют механизм расширения, где вы можете писать модули на C и по-прежнему использовать их в языке сценариев более высокого уровня (как XS в Perlили питоны c-api)

0 голосов
/ 23 мая 2010

В то время, когда CGI был изобретен еще в первые дни Интернета, это был единственный способ динамической обработки веб-запросов, например, ответа на отправленные формы или нажатия на карту изображений. Само программное обеспечение веб-сервера может доставлять только статический контент, поэтому для работы с интерактивными материалами необходимы внешние программы.

Первыми веб-мастерами, вероятно, были также системные администраторы, которые часто хорошо разбирались в Perl. Я помню, что первые серверы NCSA httpd поставлялись с примерами программ CGI, написанных на Perl, C и shell. Сценарии оболочки были отброшены довольно быстро, потому что они были небезопасны и не годились ни для чего, кроме действительно коротких CGI-программ. Программы на C работали нормально, но Perl был намного удобнее.

Полагаю, Perl стал стандартом де-факто для использования с CGI по нескольким причинам:

  • Системные администраторы были знакомы с ним.
  • Быстрые, безопасные библиотеки стали широко доступны; модуль CGI.pm поставляется стандартно с Perl.
  • Perl предложил хороший компромисс между скоростью и простотой разработки.

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

Тем не менее, CGI потерял популярность, потому что он очень медленный по сравнению с языками, которые работают в адресном пространстве веб-сервера, такими как PHP.

...