|
Perl
|
|||
---|---|---|---|
#18+
АnострофНасчет "на порядки" - это ты загнул :) по тестам разработчика компилируемой версии awk (а уж он свое детище не обидит) обходит интерпретируемый Perl в 1,5 - 2 раза. http://awka.sourceforge.net/compare.html Причем сравнения скорости регулярных выражений я так и не нашел. На пару порядков на специфичных задачах. Загибать привычки не имею, мы ем логи как то раз парсили. Сначала Perl-ом a потом awk. По поводу скорости регулярок (а это не единственное отличие, влияющее на производительность) почитай про DFA vs NFA (Хотя оно больше для простоты так называется ибо любое регулярное выражение можно привести к DFA (через NFA), а те регулярные выражения, что в Perl, они и не регулярные выражения вовсе, а нечто гораздо более мощное и гораздо менее теоретически обоснованное, для простоты называемое малограмотными людьми NFA движком регулярных выражений). Блин, целый абзац написал Оно мне надо ваще тебя уговаривать ??? Возьми сравни и удивись. Если функционала awk хватит для твоей задачи, Perl по быстродействию рядом с ним стоять не будет (и мало кто еще к этому быстродействию приблизится) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2010, 16:44 |
|
Perl
|
|||
---|---|---|---|
#18+
Аnострофможешь на awk составить программку, которая прочитает файл 1.txt в своей директории выполнит замену по шаблону s/\d+/123/g и запишет результат в 2.txt ? Хочу скорость сравнить :) sed еще посмотри а програмки за тебя писать у меня времени нет, уж звиняй могу книжку по авку подкинуть ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2010, 16:46 |
|
Perl
|
|||
---|---|---|---|
#18+
Кто-нибудь напишите на awk это прогу. На минуту делов-то. Вот на Perl: open(IN, "1.txt"); open(OUT, ">2.txt"); while(<IN>){ s/\d+/123/g; print OUT } А потом сравним скорость. Самому интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2010, 17:01 |
|
Perl
|
|||
---|---|---|---|
#18+
Аnостроф, Если очень интересно, то рекомундую посмотреть Дж.Фридл. "Регулярные выражения. Библиотека программиста" СПб.:Питер, 2001. c.147. В главе 6 "Регулярные выражние в конкретных программах" есть раздел посвященный Awk и в нем подраздел "Различия между диалектами регулярных выражений awk". Их, диалектов, там приведено 6. Глава 7 посвящена регулярным выражениям в Perl. В Perl скорость работы с регулярными выражениями сильно зависит от выбора этих выражений - можно легко написать "плохое". В книге объясняется, что к чему и как писать "хорошие". А сам язык, как таковой, вряд ли "на порядки" медленней. У меня был опыт - вдруг стала иногда(но сильно) тормозить С-ная программа - компонент системы 7x24, уже была в эксплуатации где-то около года. По-видимиму, администратор или другой нехороший человек подменил динамические библиотеки. Проблема решилась заменой регулярного выражения - не помню детали, где-то "убрал" "звездочку." ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2010, 19:11 |
|
Perl
|
|||
---|---|---|---|
#18+
Спасибо, я неплохо разбираюсь в регулярных выражениях, так как написал по ним диссертацию :) Человек уверяет, что awk при обработке текста работает "на порядок быстрее Perl". Мне интересно, действительно ли это так. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2010, 19:19 |
|
Perl
|
|||
---|---|---|---|
#18+
АnострофСпасибо, я неплохо разбираюсь в регулярных выражениях, так как написал по ним диссертацию :) Человек уверяет, что awk при обработке текста работает "на порядок быстрее Perl". Мне интересно, действительно ли это так. Интересно - проверь (я для себя уже проверил). За тебя это делать не собираюсь Коль диссер написл, должен понимать почему в Perl-е регулярные выражения далеко не так быстры как могли быть (не будь в них многих вкусностей) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2010, 08:44 |
|
Perl
|
|||
---|---|---|---|
#18+
А, так AWK используются DFA :( Ни обратных ссылок, ни утверждений. Для моих задач совсем не подходит, т.к. юзаю по-полной все возможности NFA и даже пишу по вечерам свою версию PCRE :) Работать движок будет помедленней, чем PCRE, но там будет куча вкусностей, облегчающих написания рег. выражений. Например, можно будет напрямую прописывать в шаблоне числа - скажем, "больше 40, но меньше 270". ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2010, 10:00 |
|
Perl
|
|||
---|---|---|---|
#18+
АnострофА, так AWK используются DFA :( Ни обратных ссылок, ни утверждений. Для моих задач совсем не подходит, т.к. юзаю по-полной все возможности NFA и даже пишу по вечерам свою версию PCRE :) Работать движок будет помедленней, чем PCRE, но там будет куча вкусностей, облегчающих написания рег. выражений. Например, можно будет напрямую прописывать в шаблоне числа - скажем, "больше 40, но меньше 270". Опять же, стоит определиться, что важнее: быстро или вкусности Нам вкусностей хватало, а вот быстро было очень актуально ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2010, 10:24 |
|
Perl
|
|||
---|---|---|---|
#18+
АnострофНапример, можно будет напрямую прописывать в шаблоне числа - скажем, "больше 40, но меньше 270". Гмм. В Perl-е можно довычислять выражение по ходу его выполнения. Мозг при этом правда выкипает да и вкусность какая-то шибко инопланетная, но ты уверен, что не изобретаешь велосипед ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2010, 10:26 |
|
Perl
|
|||
---|---|---|---|
#18+
Gluk (Kazan), уверен. Сейчас, чтобы определять и сравнивать числа (не одиночные символы-цифры, а именно числа) внутри регулярных выражений приходится такой код наворачивать, что написание каждой такой регулярки превращаются в нетривиальную задачку даже для неслабых умов. А, между тем, дело это очень даже востребовано. Еще одна фишка - оптимизация работы с пакетами регулярных выражений. Я обнаружил что длинное регулярное NFA-выражение с кучей условий, альтернациями, классами символов и т.п. работает гораздо медленней, чем аналогичный по действию пакет коротких регулярных выражений. В некоторых ситуациях разница доходит до 10 - 15 раз! Чем длиннее и сложнее регулярное выражение, тем эффективней с ним работает мой движок по сравнению с PCRE. Однако пока я погряз в отладке и оптимизации - даже не знаю, когда будет полноценная бета, которую будет не стыдно людям показать. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2010, 11:09 |
|
Perl
|
|||
---|---|---|---|
#18+
На коротких шаблонах PCRE пока быстрее на 20-30 % за счет того, что у меня движок более высокоуровневый. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2010, 11:15 |
|
Perl
|
|||
---|---|---|---|
#18+
АnострофНа коротких шаблонах PCRE пока быстрее на 20-30 % за счет того, что у меня движок более высокоуровневый. Наверное стоит посмотреть на движок TCL по поводу оптимизаций. Не впоне понимаю как будет выглядеть регулярка для чисел. Примерчик можно? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2010, 11:29 |
|
Perl
|
|||
---|---|---|---|
#18+
TCL использует комбинированный движок NFA-DFA, но скорость не впечатлила. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2010, 11:49 |
|
Perl
|
|||
---|---|---|---|
#18+
Пример: удалить из строки числа, которые больше 23 s/ (\d:>23) / /g Пример: найти в строке числа, которые больше переменной $a на 100, но меньше переменной $b /(\d:>$a+1, <$b)/g ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2010, 11:55 |
|
Perl
|
|||
---|---|---|---|
#18+
АnострофПример: удалить из строки числа, которые больше 23 s/ (\d:>23) / /g Пример: найти в строке числа, которые больше переменной $a на 100, но меньше переменной $b /(\d:>$a+1, <$b)/g надо вводить какие то скобки наподобие фигурных для квантификаторов. Иначе каша получится и будет совсем не PCRE (особенно в последнем примере) Кстати, числа это все таки \d+, а не \d ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2010, 12:11 |
|
Perl
|
|||
---|---|---|---|
#18+
Пакеты на данный момент записываются в стиле Perl: /regex1/ && /regex2/ && !/regex3/ && !/regex4/ т.е. если в строке ЕСТЬ regex1 и regex2, НО НЕТ regex3 и regex4, то пакет нашел совпадение. С помощью таких пакетов можно очень быстро писать сложнейшие условия для отлова строк, причем пакет будет работать в 10 - 15 раз быстрее, чем одно длинное NFA-регулярное выражение с использованием утверждений и прочих расширенных конструкций. Самое сложное - правильно реализовать возвращение найденных в пакете захваченных переменных. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2010, 12:12 |
|
Perl
|
|||
---|---|---|---|
#18+
"Надо вводить какие то скобки наподобие фигурных для квантификаторов" - это был самый первый вариант, который попробовал. Но с ним есть определенные трудности. "Иначе каша получится и будет совсем не PCRE". При разбиении регулярных выражений на пакеты они выглядят очень понятно и легко записываются. Ладно, что-то я совсем выбился из рабочей колеи :) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2010, 12:17 |
|
Perl
|
|||
---|---|---|---|
#18+
АnострофПример: удалить из строки числа, которые больше 23 s/ (\d:>23) / /g Пример: найти в строке числа, которые больше переменной $a на 100, но меньше переменной $b /(\d:>$a+1, <$b)/g Код: perl 1. 2. 3. 4. 5.
ой-ой, закипели мозги. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2013, 07:10 |
|
Perl
|
|||
---|---|---|---|
#18+
Аnостроф даже пишу по вечерам свою версию PCRE :) Работать движок будет помедленней, чем PCRE, но там будет куча вкусностей, облегчающих написания рег. выражений. Например, можно будет напрямую прописывать в шаблоне числа - скажем, "больше 40, но меньше 270". Пример: удалить из строки числа, которые больше 23 Код: perl 1.
Хочу отметить, что Larry Wall таки прислушался к идеям Апострофа :-) и реализовал их в своём новом regex engine в языке Perl6 удалить из строки числа, которые больше 23 : Код: perl 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2019, 18:18 |
|
|
start [/forum/topic.php?fid=16&gotonew=1&tid=1339902]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
127ms |
get topic data: |
11ms |
get first new msg: |
9ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 272ms |
0 / 0 |