![]() |
|
||||||||||
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Хм, в 2008-ом Блуд говорил и показывал сорсы тамарина, в котором RegExp реализовывался именно на AS3.
А вот тут уже нет: http://mod-actionscript.googlecode.c...-central/core/ Там уже используется сишный pcre. Это гут, но всё равно против лома нет приёма. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Я в принципе не понимаю как регэксп может быть быстрее. Это из серии "если написать код в одну строчку, то будет же быстрее?" Как ни верти, а операции с данными все-равно надо произвести, магии и мистики ждать не приходится. В случае сабстринга мы конкретно говорим - возьми с такого-то индекса столько-то байт. Всё. А что должен сделать регэксп? На одном определении "число/не число" уже несколько дополнительных операций. На разборе сколько до и сколько после - еще пачка. Регэксп это не телепатия, а те же самые операции. Только в 10 раз больше, как всегда при "универсальности".
Добавлено через 9 минут Предназначение регэкспа - поиск и извлечение по шаблону. В этой задаче нечего искать. Сабстринг не предлагает что-то искать, он называет конкретные индексы сразу. А все остальное – конкатенация – выполняется в лучшем случае точно так же (теми же машинными операциями), а возможно и гораздо проще в случае сабстринга. То, что виден вызов одной функции, не означает скорости. Сколько операций внутри этой функции? "один реплейс" может содержать сотни. А сабстринг он и есть сабстринг))
__________________
Reality.getBounds(this); |
|
|||||
|
Modus ponens
|
В теории регексп может быть быстрее или сопоставим. substring / серия других AS3 функций могут быть выполнены как опкоды виртуальной машины (а не оптимизированы до машинных кодов), в то время как регулярное выражение может быть скомпилировано (и доведено до "совершенства") компилятором. В менее тривиальных случаях, например, в JS регулярные выражения могут быть быстрее аналогичного кода на JS просто потому, что скомпилировать JS будет дольше и менее производительно, чем выражение (кстати, в V8 регулярки вообще всех рвут, даже Перл).
__________________
Hell is the possibility of sanity |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Последний раз редактировалось etc; 13.01.2012 в 19:17. |
|
|||||
|
Modus ponens
|
private static const _pattern:ByteArray = new ByteArray(); private static const _separator:int = 0x2E; private static const _asciiZero:int = 0x30; private static function format(digit:uint):String { var reminder:uint = digit; var index:int = 12; _pattern.length = 13; while (index > -1) { reminder = digit; digit = binaryDiv10(digit); reminder -= (digit << 3) + (digit << 1); if (((index + 1) & 2) == 2) _pattern[index--] = _separator; _pattern[index--] = _asciiZero + reminder; } return _pattern.toString(); } private static function binaryDiv10(divident:uint):uint { var divisor:uint = 10; var multiplier:uint = 1; var quotient:uint; var reminder:uint; if (divident < 10) return 0; while ((divisor <<= 1) < divident && multiplier < 28) multiplier++; divident -= (divisor >>>= 1); quotient = 1 << (multiplier - 1); multiplier = quotient; while (divident) { while ((divisor >>>= 1) > divident) multiplier >>>= 1; divident -= divisor; quotient += (multiplier >>>= 1); } return quotient; } Я чет не могу сообразить вот только, как параллельно с делением псчитать остаток %)
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 13.01.2012 в 19:41. |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
wvxvw, а что это вообще? <_<
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
|
Modus ponens
|
Функция format(x) возвращает строку вида хх.ххх.ххх.ххх.хх где каждый х - разряд в десятичной системе счисления, что собственно, автор и хотел.
Она кстати будет по-быстрее, чем вариант с регулярным выражением, а если задесйствовать fastmemory + немного инлайна, то может и сравнима с substring() При этом используется только побитовый сдвиг, прибавление, отнимание и логические операции.
__________________
Hell is the possibility of sanity |
|
|||||
|
wvxvw, а это что есть за загадочные (только для меня?) переменные?
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:18. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| regexp |
|
|