Talyutin
@Talyutin

Можно ли рассматривать использование RegExp как накопление технического долга?

Мы не рассматриваем единовременное (вроде Find & Replace) применение регулярных выражений, а применение в проекте для решения общих задач.

Краткое введение в понятие технического долга по ссылкам:
habrahabr.ru/post/119490/
techforum.mail.ru/report/64

  • Вопрос задан
  • 4052 просмотра
Пригласить эксперта
Ответы на вопрос 6
KEKSOV
@KEKSOV
Скажем, если речь идет об использовании RE для парсинга HTML (предположим, для извлечения ссылок), то это однозначно плохо, для этого есть готовые решения более высокого уровня.

Лично у меня был такой опыт с RE — необходимо было организовать парсинг логов одной большой телефонной станции, началось все с использования sed и все было очень хорошо и быстро, пока не выяснилось, что эта железка в основной поток сообщений может асинхронно подбрасывать пакеты других сообщений. В итоге sed выражение разрослось до более чем ста строк и стало работать минут 10, само собой разобраться в нем мог только один человек. Когда мое терпение лопнуло, я сел и переписал все на C при помощи flex и bison, программа стала работать 10 секунд. Думаю, что это хороший пример того, как RE участвует в накоплении тех.долга

Но, с другой стороны, если речь идет, скажем, о валидации каких-то пользовательских данных, то почему бы и нет.

Думаю, что резюме может быть таким — если входные данные сложны по своей структуре или число входных вариантов велико, то RE использовать не надо. Если же данные просты (не больше одной строчки), то RE вполне себе применимы. Да, еще один момент, если данные просты, но их много (читай — высоконагруженная система, которая основное время тратит именно на обработку RE), то RE использовать не следует, выгоднее будет написать свой парсер под конкретную задачу.
Ответ написан
KEKSOV
@KEKSOV
Нашел хорошее обсуждение Правильную мысль там высказывают — не используйте молоток там, где нужна отвертка. Это я к тому, что только опыт подскажет какой инструмент уместно будет применить для решения конкретной задачи.
Ответ написан
Комментировать
un1t
@un1t
Без конкретных примеров, не понятно о чем идет речь, соотвественно ответы могут быть противоположными.

У меня на одном из проектов нужно парсить разные xml файлы, причем файлы достаточно большие 200-600 Мб. Сначала я выбрал стандартное решение для питона — lxml.etree. Одно отлично работало, но оказалось, что не все файлы сформированы правильным образом. Там могут встречатся всякие ошибким типа незакрытих тегов и внутри могу быть какие-угодно кодировки, а не только та которая указана в xml-заголовке. Т.е. в одном файле может быть куча разных ошибок. Вобщем никаие стандартные решения не умеют обрабатывать все эти проблемы. Просле поиска готовых решений, я написал парсер на регулярках. Этому парсеру вообще пофиг на любые ошибки, он также может спокойно парсить любые битые файлы. К томуже оказалось, что такой парсер работает в 1.5 раза быстрее, чем парсер на lxml. В моем случае решение адекватно задаче.
Ответ написан
LionAlex
@LionAlex
Однажды у программиста появилась проблема и он захотел решить ее с помощью регулярных выражений. Тогда у программиста стало 2 проблемы.
Ответ написан
@egorinsk
Мне кажется, вы придаете слишком много значения мелочам. Никто не запрещает вам особо подозрительный код вынести в отдельный модуль или класс, и в случае каких-то серьезных проблем переписать его с использованием другого алгоритма.

Или у вас есть какой-то более конкретный пример жутких последствий от использования regExp? А то иначе ситуация напоминает сказку про умную Эльзу.
Ответ написан
Комментировать
Wott
@Wott
О, чувствуется вам очень нравятся «волшебные правила», а вникать в суть желания немного. Тямы не хватает?

Регулярки — инструмент со вполне определенным кругом задач.
Технический долг — методика ускорения ближайших фаз проекта, за счет последующих.
Это абсолютно разные вещи.
Примерно также как «увлечение русским языком увеличивает долю ненормативной лексики в устной речи»
или «регистрация на хабре/вк/steam ухудшает производительность»
или тоньше «курение сокращает продолжительность жизни» :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы