| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Религиозные войны > Perl - недостатки и приемущества(?) |
| Автор: nerezus 29.1.2007, 10:06 |
| Минусы перла: 1) Нету комунити. Вернее, почти нету. 2) ООП через "анальное отверстие". Про перл6 с его модификаторами классов я вообще молчу. Когда я их впервые увидел — плакалъ. 3) Неподдерживается. Где там perl6, который Ларри Уолл обещал в 3 четверти 2005 года? При том, что уже тогда были рабочие версии. 4) Тормоз. Очень медленный. К примеру питон быстрее более чем в 2 раза(тесты сам проводил, могу дать ссылку). 5) Мало актуальных модулей и библиотек. Даже последняя версия perlQt датирована 2002 годом. И так примерно со всем. 6) Синтаксис. Хотя перл в этом не "лидер". Есть ведь язык brainfuck ;) Чтобы понять пару строк кода, надо прочитать то, что написано выше, а все благодаря переменным по умолчанию. Что уж говорить о постусловиях: чтобы понять логику при просмотре чкжого кода приходится смотреть не только на структуру программы и начала строк, но и читать строки целиком! Плюсы перла: Их нет. Для той же обработки текста(для чего и был разработан перл) набор никсовых утилит(grep/sed/awk) годится гораздо больше. А функции PHP для обработки текста гораздо богаче. |
| Автор: pento 29.1.2007, 10:14 |
|
| Автор: nerezus 29.1.2007, 10:17 | ||||
|
| Автор: Hidrag 29.1.2007, 10:20 |
| Пример: в СУБД SYBASE можно включить запись лога в файл, при этом лог будет кроме чистого sql содержать много мусора ~70-80%. При этом одна логическая операция клиента БД выливалась в лог более 9000 строк. Программа на перле для очистки лога составила несколько строчек, за пару секунд обработав файл выдала "чистый" sql скрипт без всякого мусора, написана эта програмка была на моих глазах меньше чем за минуту, по моему это удобно и быстро... |
| Автор: nerezus 29.1.2007, 10:24 |
| Hidrag, и что, в других языках/программах разве нету re? Или они какие-то другие? |
| Автор: Hidrag 29.1.2007, 10:42 |
| Важно время которое ценится очень дорого от получения того же лога до получения готового скрипта |
| Автор: nerezus 29.1.2007, 10:52 | ||
|
| Автор: nitr 29.1.2007, 10:52 |
| Читаем и смотрим комменты: http://forum.vingrad.ru/topic-132126.html |
| Автор: Hidrag 29.1.2007, 10:52 |
| nerezus, а под виндой? |
| Автор: nerezus 29.1.2007, 10:57 | ||
|
| Автор: MAKCim 29.1.2007, 11:36 | ||
проще Perl поставить, чем CygWin |
| Автор: nerezus 29.1.2007, 11:52 | ||
Тем более, что они весят вместе взятые меньше, чем перл! |
| Автор: GoodBoy 29.1.2007, 14:56 |
| nerezus, хоть бы глупости не писал... |
| Автор: nerezus 29.1.2007, 15:08 |
| GoodBoy, ??? Касательно перла или sed/etc... ? Просьба пояснить. Добавлено @ 15:16 Несколько секунд в гугле дали ссылку: http://unxutils.sourceforge.net/ Значит GoodBoy говорил насчет перла. Итак, где перл будет наилучшим выбором? |
| Автор: Сумасшедший 30.1.2007, 00:43 |
Мда? Ты ещё скажи что вместо регэкспоп пользуешься стандартными пхп.. или стартовые скрипты для никсов. без знания sh пишутся на пыхе? А вообще: тогда асм тоже глупость по всем пунктам, кроме скорости, хотя читал где-то что программы на си работают быстрее)))))) плюсы: синтаксис, распространённость, надёжность, кроссплатформенность, простота использования языка как shell-язык. А вообще,имхо, просто леность и любовь к быстрым и лёгким победам не позволяют найти в перле красоту и умиротворение. |
| Автор: nerezus 30.1.2007, 09:56 | ||||||
Ну если ты начал про это, то их можно писать абсолютно на чем угодно. Хоть на джаве. Только вот навряд ли найдется человек, который будет делать это "без знания sh".
Добавлено @ 09:58 P.S. А вообще,имхо, просто леность и любовь к быстрым и лёгким победам не позволяют найти в brainfuck'е красоту и умиротворение. |
| Автор: MAKCim 30.1.2007, 11:09 | ||
для кого brainfuck, а для кого быстрое решение задачи |
| Автор: GoodBoy 30.1.2007, 12:23 | ||||
nerezus, напиши мне вот это на ТВОЁМ любимом языке:
другой вариант того же самого:
|
| Автор: nerezus 30.1.2007, 12:52 | ||
GoodBoy, не на любимом языке написал, а на пхп.
Добавлено @ 12:54 P.S. Ты специально пробелы не ставишь, чтобы код меньше казался, или ты просто perldoc perlstyle не читал? |
| Автор: pythonwin 30.1.2007, 13:04 |
эти языки компилируемые и сравнивать Perl с этими языками неправильно. IMHO GoodBoy, пожалуйста, дай постановку задачи, а то не понятно - прошу простить - Perl не знаю. в питоне есть и join и split и регулярные варажения а у nerezus любимых языков много PS прошу простить, что втреваю в беседу |
| Автор: nerezus 30.1.2007, 13:10 | ||||
|
| Автор: GoodBoy 30.1.2007, 13:11 | ||
Воспользовавшись PCRE... Браво!!! А задача такая: сконвертировать дату из формата "ГГГГ-ММ-ДД" в формат "ДД.ММ.ГГГГ", если она в формате "ГГГГ-ММ-ДД" и ничего не менять в противном случае. Добавлено @ 13:12
я ещё и скобки не ставлю... :-))) |
| Автор: nerezus 30.1.2007, 13:15 | ||
|
| Автор: GoodBoy 30.1.2007, 13:15 |
Расшифровку аббревиатуры знаешь?? |
| Автор: nerezus 30.1.2007, 13:42 |
| GoodBoy, и что с того? Т.е. я не должен этим пользоваться из-за того, что в расшифровке есть слово perl? Добавлено @ 13:47 Т.е. я имею ввиду то, что перл в использовании re не имеет преимуществ, т.к. они есть и в других языках/программах. |
| Автор: amg 30.1.2007, 13:55 | ||
Мне Perl нравится, среди прочего, тем, что он позволяет очень быстро, прямо из консоли, делать довольно нетривиальные вещи. Например
|
| Автор: arto 30.1.2007, 14:49 |
| "4) Тормоз. Очень медленный. К примеру питон быстрее более чем в 2 раза(тесты сам проводил, могу дать ссылку)." -- ссылочку можно? |
| Автор: nerezus 30.1.2007, 14:55 |
| http://ruinst.net.ru/ner/iprange_test.7z Т.е. чисто логика, без модулей. |
| Автор: GoodBoy 30.1.2007, 15:01 | ||||
nerezus, а теперь, пардон за шалость, я сравнил быстродействие моего перл-примера и твоего РНР-примера. Были сделаны 2 программы:
и
как видно из текста использовался 1 миллион итераций сопоставления по шаблону... Резальтаты теста дали следующую картину: РНР (установленный как модель Апача) отрабатывал в среднем за 18 секунд Перл (загружаемый отдельным процессом) отрабатывал в среднем за 5 секунд Это к вопросу о тормознутости, кстати... Комментарии будут?? |
| Автор: nerezus 30.1.2007, 15:18 | ||
Однако большинство функций в пхп написано на сишнике, в перле же - в виде модулей на перле(я даже ради интереса с CPAN сачал XSLT и посмотрел, на чем написан он). Выводы сделаешь? ) P.S. А основные тормоза будут все равно из-за сервера, ФС и БД. |
| Автор: korob2001 30.1.2007, 16:03 | ||||||||||||||||
ООП конечно не такое как в Java. Хотя лично я пользуюсь всегда этим подходом. Пока ещё не столкнулся с какими-то задачами, которые нельзя было бы решить.
Питон сохраняет скомпилиную копию. Потому актуальным будет только первый запуск.
Как ты запутываешь код, зависит только от тебя. Perl лишь даёт тебе свободу.
А откуда их интересно позаимствовали? Что-то не много людей пишет регулярные выражения в стиле POSIX.
Там где они нужны он их оставил.
Ты никому и ничего не должен, просто пользуешься Perl сам того не ведая, даже в том случае если пишешь на PHP, который так же был написан изначально на Perl.
В Perl тоже много модулей написанных на C.
Что-то автору языка не хватило этих утилит в своё время, что собственно и подтолкнуло его к созданию Perl. Почитай историю. Perl создавался не только для обработки текста. |
| Автор: Hidrag 30.1.2007, 16:25 | ||
Угу, гораздо удобнее написать все что нужно на одном языке и быстро получить результат чем использовать кучу утилит... |
| Автор: arto 30.1.2007, 16:44 |
| http://forum.sources.ru/index.php?showtopic=157938&view=showall -- вы там так и не ответили, почему перл и питон показывают одинаковую производительность.... может тут расскажете? |
| Автор: nerezus 30.1.2007, 16:59 |
| arto, одинаковую? ну у меня была разница в 2.15 вроде раз ) Добавлено @ 17:02 Ааа, так это ты. Ну так поставь последнюю версию питона и сравни ) |
| Автор: arto 30.1.2007, 17:47 |
| пока пакет не сделают -- лень а с той версией что не так? обещали 30%... |
| Автор: nerezus 30.1.2007, 17:59 | ||||
Пакеты были уже сразу, а в репозиториях они были уже через неделю(на примере дебиана) или сразу же(дженту). Или у тебя дистр эксклюзивный, а его единственный ментейнер забросил полгода назад? Ну тогда скачай пакет из репозитория чужого дистрибутива. Или собери пакет сам.
|
| Автор: arto 30.1.2007, 18:02 |
| я про python2.4 vs. perl 5.8.8 а собирать самому пакет -- лень. |
| Автор: skyboy 30.1.2007, 18:11 |
насколько мне известно, теория регулярных выражений - раздел математики, развивающийся где-то с середины 20 века, а не изобретение создателей Perl... |
| Автор: korob2001 30.1.2007, 18:31 |
| В POSIX тоже есть регулярные выражения, только ими практически никто не пользуется. Речь идёт о регулярных выражениях в стиле Perl. |
| Автор: pythonwin 31.1.2007, 09:18 | ||||||||
из скриптовых php не самый быстрый -
я подобное в питоне делал в интерпритаторе, правда у меня это вышло строк на 10, но если применить ФП, то думаю строи в две-три можно было сделать, хотя если немного напрячся, то и в 1 строку (хотя много ума не нужно чтобы написать очень плохо читаемый код)
|
| Автор: diam 31.1.2007, 10:29 | ||||||
grep/sed/awk годятся до определённой степени сложности анализа и предоставления информации, perl гораздо удобнее их. В том же самом php, кстати, функции ряд функций обработки текста взят из perl, например, регулярные выражения. Так же можно сказать и про php, который ты упомянул.
Кому-то и Haskell кажется сложным, а кому-то даже python и ruby. Каждому своё.
У любого ЯП есть особенности, если тебе они кажутся сделанными через "отверстие", то это значит только то, что тебе эти особенности не нравятся. Подводя итог, хочу сказать, что нет плохих или хороших языков. Любой язык хорош для решения определённых задач с точки зрения определённой философии, заложенной в язык. И если тебе не нравится язык, то ты просто не приемлешь его философию, вот и всё. Конструктивная критика и философии, и любого языка чаще всего приветствуется людьми, а тупое поливание помоями - есть признак некультурности. Ведь ты же не оскорбляешь человека за то, что он не придерживается твоей точки зрения (хотя бывают и исключения, конечно, везде есть некий порог, после которого польются некрасивые слова)? Так и с языком и его философией. Если же взглянуть с точки зрения профессионального программиста, это вообще неправильно - говорить, что ЯП - плохой. У профессионала чаще всего есть определённые ограничения на выбор инструментария, но с выбранным инструментарием он работает не смотря на свои предпочтения. Бывает даже немного неприятно, но се ля ви, как говорится. |
| Автор: nerezus 31.1.2007, 10:38 | ||||
|
| Автор: Shaggie 31.1.2007, 11:31 | ||
В Перл регулярные выражения встроены в сам язык, а не вызываются из функций/модулей (как в любом другом). Такой подход был принят вследствие общей направленности языка. И даже сейчас, когда Перл перерос в ЯП общего назначения, встроенные и потому очень простые в применении регулярки являются одной из отличительных его особенностей.
Про обобщающую и расширяющую роль Перл по сравнении с вышеупомянутыми утилитами было уже много сказано. А вот насчет функций PHP... В PHP действительно очень много функций для работы с регулярными выражениями. Вот только это его вечное стремление для каждой операции иметь по пять мало различимых функций не есть проявление богатства, имхо конечно. Смотрим: стандартные функции - 1) ereg(), 2) eregi(), 3)ereg_replace(), 4) eregi_replace(), 5) split(), 6) spliti(). Спросите, зачем так много? На самом деле здесь три функции - поиск, замена, разделение на подстроки. Только в двух вариантах - с учетом регистра и без учета. А если в одной строке нужно найти часть в верхнем регистре, часть неважно в каком, и часть в нижнем? Придумаем что-нибудь, где наша не пропадала А что же тогда использовать? О, разработчики пошли нам навстречу и реализовали в языке поддержку регулярных выражений, аналогичных использующимся в Перл. Они и работают пошустрее, и возможностей у них поболее... Вот они: 1) preg_grep(), 2) preg_match(), 3) preg_match_all(), 4) preg_quote(), 5) preg_replace(), 6) preg_replace_callback(), 7) preg_split(). Опять много? Но, кажется, они побольше могут... Там тоже есть много интересного, в частности, непонятно, зачем в функции preg_match_all() возвращать совпадения в хитрющщий двухмерный массив? Плюс неудобные для прописывания флаги, к примеру, PREG_SPLIT_DELIM_CAPTURE. Или кому-то так удобнее вводить? Все это к тому, что Перл очень логичен в работе с регулярными выражениями. К сожалению, в нем нереализованы такие полезные фичи, как жадный безвозвратный режим глотания строки с помощью модификаторов *+, ++ и ?+ ... Но это частности. Более того - как уже подтвердили участники форума, именно Перл превратил регулярные выражения в обыденную для программирования вещь. Python, Java, C# - везде применяются регулярки в стиле Перл. И нигде они не поддерживаются на уровне встроенных функций языка. Увы... |
| Автор: GoodBoy 31.1.2007, 11:51 | ||
Для Перла есть утилиты, позволяещие компилировать скрипты в исполняемые файлы... Правда только для Винды... |
| Автор: Shaggie 31.1.2007, 12:05 | ||
источник http://www.opennet.ru/base/dev/perl_hide_code2.txt.html плюс поставляемые с Перл модули B::Bytecode, B::C и B::CC |
| Автор: pythonwin 31.1.2007, 12:15 | ||||||
вот с этим согласен, хотя у разработчиков языков скорее всего есть иснования... в питоне вопрос скорее всего вопрос идеалогический - вопрос пространст имен. хотя это IMHO
у питона есть и такие функции и под винду и под *nix когда я писал о байто-коде я имел ввиду не *.exe, а *.pyc (байто-код) Shaggie, под винду собиралка exe == http://cheeseshop.python.org/pypi/py2exe/ + про байт-код
http://ru.wikipedia.org/wiki/%D0%91%D0%B0%D0%B9%D1%82-%D0%BA%D0%BE%D0%B4
|
| Автор: nerezus 31.1.2007, 12:18 | ||
Для пхп - наш php2exe(онлайн-версия временно не работает). |
| Автор: Shaggie 31.1.2007, 12:46 | ||
Конечно! Есть шикарный язык для обработки текстовой информации - Перл. Какой смысл создавать новый язык, который будет один в один копировать уже существующие возможности Перла? Как известно, нужные ЯП возникают тогда, когда без них задача решается гораздо тяжелее... Насчет зависимости встроенных функций обработки регулярных выражений от пространств имен - в современном объектном языке вообще встроенных функций не существует. Существуют объекты, вызывающие необходимые методы. Например, re Насчет сохранения байт-кода - Ларри обещает ввести его в шестой версии. Там поглядим, а пока что могу признать: да, такой полезной фичи в Перле действительно нет |
| Автор: pythonwin 1.2.2007, 12:20 |
| про perl & php http://www.cs.wcupa.edu/~rkline/perl2php/ |
| Автор: arto 1.2.2007, 18:26 |
ну, вы много чего говорили. Добавлено @ 18:31 а как вы смотрели? и как определили, на чем он написан? |
| Автор: Shaggie 2.2.2007, 08:57 |
| pythonwin, ссылка не работает... |
| Автор: pythonwin 2.2.2007, 09:34 |
| для тех у кого ссылка не срабатывает - во вложении |
| Автор: pento 2.2.2007, 09:49 |
pythonwin, а собственно к чему ссылка? Из ссылки можно сделать выводы
|
| Автор: nerezus 2.2.2007, 10:26 | ||||
|
| Автор: Shaggie 2.2.2007, 10:27 |
| pythonwin, имхо, удобная страничка для познавания основ синтаксиса... и ничего более. Фишка как раз в том, что синтаксис имеет совсем небольшие различия практически у всех языков программирования! http://nuclight.livejournal.com/107170.html. На PHP форуме отметили непредвзятость и истинность этой статьи. Там и про мешанину пэхэпэшных функций, и про ассоциативные массивы, много всего интересного. Это к вопросу о достоинствах Перл как языка веб-разработки по сравнению с PHP. Плюс существуют Перл-модули CGI::WebIn и CGI::WebOut, позволяющие встраивать команды перл прямо в html разметку, по примеру РНР. |
| Автор: pythonwin 2.2.2007, 11:02 | ||
ну и в питоне такие есть (Kid, Cheetah и т.д.), вроде есть и в ASP.NET - есть во многих языках |
| Автор: Shaggie 2.2.2007, 11:17 |
| Естесственно, что схожие вещи есть во многих языках. Тогда объясни пожалуйста, почему товарищ Nerezus так на Перл обижен? |
| Автор: pythonwin 2.2.2007, 11:44 | ||
1) не товорищ, а уважаемый форумчанин 2) Не нравиться он ему по идеологическим причинам (IMHO) - мне например пхп не нравиться ну и что. У каждого ЯП есть недостатки и видимо недостатки Perl для nerezus критичны - хотя это у самого nerezus лучше спросить |
| Автор: SergeCpp 2.2.2007, 17:29 | ||
(?>a?) == a?+ (?>a*) == a*+ (?>a+) == a++ (?>a{2,4}) == a{2,4}+ |
| Автор: arto 3.2.2007, 13:43 | ||
садитесь, два. похоже, что вы перл не знаете. можете теоретизировать дальше. |
| Автор: nerezus 3.2.2007, 13:50 |
| arto, Ч0рт, а вдруг мой пхп код -это на самом деле перл, но он маскируется? О боже! |
| Автор: arto 4.2.2007, 01:57 |
| вам виднее |
| Автор: Shaggie 5.2.2007, 07:50 | ||
Неужто это такая глобальная проблема? Ведь работает! |
| Автор: pythonwin 5.2.2007, 12:15 | ||
это для разработки скорее == минус, хотя для "баловства" само то |