хм, собрал из исходников последнею версию, но результат не радует
[src]$ (export LANG=POSIX; time ./grep -i UFVbGg /tmp/100MB)
Binary file /tmp/100MB matches
real 0m0.484s
user 0m0.446s
sys 0m0.031s
[src]$ (export LANG=ru_RU.UTF-8; time ./grep -i UFVbGg /tmp/100MB)
Binary file /tmp/100MB matches
real 0m12.381s
user 0m12.221s
sys 0m0.079s
[src]$ ./grep --version
./grep (GNU grep) 2.7
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.
>Текст в однобайтовых кодировках гораздо проще обрабатывать, чем текст в мультибайтовых кодировках. Так что заметная разница в скорости должна быть.
Зависит от кодировки. Ускорить конкретно UTF-8 вполне возможно и, скорее всего, grep уже это делает. С произвольной мультибайтной кодировкой сложнее.
>Так хоть заоптимизируйся - всё-равно получится медленнее однобайтовых.
Да ну?
Частный случай: ищем строку из ASCII в UTF-8 потоке.
В UTF-8 *все* символы вне ASCII кодируются байтами вне ASCII (т.е. с включенным старшим битом). Следовательно, можно искать ASCII-строку точно так же, как и в однобайтном потоке. Ложных срабатываний гарантированно не будет.
Аналогично с поиском UTF-8 строки в UTF-8 потоке.
Тормоза начинаются с более сложными запросами.
Я говорю про общий случай. В общем случае UTF-8 медленнее. Другими словами: если все возможности grep потестить на кодировке ASCII (локаль POSIX/C) и на UTF-8, то в среднем UTF-8 сольёт.