Страница 4 из 4

Добавлено: 27 июл 2003, 11:28
satanic_mechanic
[to [uNIx]mend0za]
возвращаясь к обсуждению языковых средств: есть адекватные и полуадекватные и совсем не адекватные средства решения конкретной задачи. Для обработки текста asm: помилуй мя господи, даже Cи - только в случае крайней необходимости.
Обычно апологеты этих языков приводят в свое оправдание мифические случаи необходимости крайней производительности. Замечу что они не приводят ни одного реального примера для практической задачи. Посему будем считать что традиоционные средства (регекспы+Perl/Ruby/Python/sed/grep) закрывают 99% надобностей. Измышление из пальца высосаных задач оставим для теоретиков.
Почитай все постинги. Я разве заставлял обрабатывать текст на асме. Я говорил об написании специализированных программ в случае, когда скорость критична. И на Си я предлагал это писать лишь к слову. А еще я говорил о том, что автоматы применяются не только для обработки текста. И "высосанный из пальца" пример лишь подтверждал это.

P. S. Я который раз говорю, что согласен со всем что вы говорили, но вы не опровергаете то, что говорю я.

Я уверен во всем о чем говорю и готов спорить до последнего...

Добавлено: 27 июл 2003, 19:24
leikind
/* Я доказываю, что регекспы МЕДЛЕННЕЕ специализированной программы, потому что универсальны.*/

Я не совсем понимаю, как из факта универсальности делается вывод о скорости? Где-то тут или логическая ошибка, или пропущено промежуточное умозаключение.

/* Я доказываю, что регекспы МЕДЛЕННЕЕ специализированной программы, потому что универсальны. То есть СПЕЦИАЛЬНО НАПИСАННАЯ ДЛЯ ЭТОЙ ЗАДАЧИ ПРОГРАММА, быстрее программы, использующей регулярные выражения. */

Ммм, возможно ты думаешь, что твой пример на С доказывает это. Это не так. Это слишком простой пример. В реальной жизни на реальных задачах регулярные выражения или их подобия часто быстрее чем custom решения по той просто причине, что эти custom решения просто невозможно реализовать таким способом, как ты сделал удаление пробелов.


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

Так что не вижу зависимости между универсальностью (кстати, строго говоря, регекспы не универсальны) и скоростью.


/*Например, никто не заставляет строить автомат на этапе выполнения, его можно построить во время написания программы по тому же паттерну с помощью написанной для этого программы и в каком-либо абстрактном виде слить в файл, а затем использовать. Опять-же мы не затрачиваем время на его построение во время выполнения. И опять же это применимо только для программы решения КОНКРЕТНОЙ ЗАДАЧИ.*/

Естественно, так нужно делать для достижения производительности. В приведенном выше примере так и делалось.

Материалы. По регекспам лучшая книга - Mastering Regular Expressions Jeffrey Friedl'а. Первое издание переведено на русский и называется Регулярные Выражения, но второе издание значительно переработано и очень мне понравилось. Помимо прочего там освещаются регекспы в .NET и пакет java.util.regexp. А по алгоритмам и автоматам мой бывший коллега собрал целый CD научных статей и работ. Если так надо, давай в личные.

Добавлено: 27 июл 2003, 20:16
satanic_mechanic
[to leikind]
Ммм, возможно ты думаешь, что твой пример на С доказывает это. Это не так. Это слишком простой пример. В реальной жизни на реальных задачах регулярные выражения или их подобия часто быстрее чем custom решения по той просто причине, что эти custom решения просто невозможно реализовать таким способом, как ты сделал удаление пробелов.
А пример на С ничего не должен доказывать, он возник до спора. Я опять же не заставляю кодировать огромный конечный автомат вручную. Я об этом уже говорил. Не надо повторяться.
Так что не вижу зависимости между универсальностью (кстати, строго говоря, регекспы не универсальны) и скоростью.
О-о-о. Я лишь утверждаю, что специализированная программа быстрее универсальной. Тот же пример с сохранением автомата в файл это доказывает. Все. Я ничего больше не доказываю. Си тут не причем. Согласись - это правда. Регекспы может не универсальны, но они гораздо универсальнее программы с заданным на этапе компиляции автоматом. И скорость соответственно меньше. Вот об этом я и говорю. Прослеживаешь закономерность.

Книга Mastering Regular Expression у меня есть. Это меня не сильно интереует. А вот подборка по алгоритмам - это круто. Если реально переписать, то я буду рад...

P. S. Я уже давно признал что то, что ты утверждаешь - правда. Но ничего из этого не опровергает то, что говорю я.

Добавлено: 27 июл 2003, 21:48
kas
leikind писал(а): Материалы. По регекспам лучшая книга - Mastering Regular Expressions Jeffrey Friedl'а. Первое издание переведено на русский и называется Регулярные Выражения, но второе издание значительно переработано и очень мне понравилось. Помимо прочего там освещаются регекспы в .NET и пакет java.util.regexp.
Второе издание тоже переведено. Я его как раз сейчас читаю.