RE2 и UTF16 (или UCS-2)
RE2 отлично. Быстро и детерминировано.
Тем не менее, он поддерживает только UTF8. Мои строки изначально UTF16, и преобразование туда-сюда снизит производительность.
Насколько сложно было бы реализовать собственные возможности UTF16 в RE2?
Насколько сложно было бы реализовать собственные возможности UCS-2 в RE2? (это должно быть проще)
т.е. сколько часов потребуется обычному программисту для этого.
Это беспокоило меня в течение нескольких недель, поэтому я подумал, что спросить!
2 ответа
Рассел Кокс, создатель RE2, любезно опубликовал патч для поддержки UCS-2. Некоторые утверждения, однако, не поддерживаются для UCS-2. Ответ от Руси дословно выложен:
Привет. В RE2 был режим UCS-2 до того, как я открыл его, но он не мог поддерживать утверждения типа ^, $ и \b, что ограничивало его полезность. Если вам не нужны эти операторы, то это, вероятно, будет работать для вас. Я не планирую повторно добавлять режим UCS-2 к источникам RE2, но я просто опубликовал diff для изменений, которые удалили его. Вы должны быть в состоянии полностью изменить diff в локальной копии, чтобы получить поддержку UCS-2. Файл ucs2.diff находится в корне репозитория Mercurial.
Наслаждаться.
Ссылка на код: http://code.google.com/p/re2/source/list
Вы спрашивали Расса Кокса, каково его мнение об ответе на ваш вопрос? Бьюсь об заклад, это слишком долго, чтобы думать.
Я действительно думаю, что вы переоцениваете стоимость преобразования из уродливого UTF-16 в обычный UTF-8 и недооцениваете стоимость перекодирования очень хорошо настроенной библиотеки.
Просто прикуси пулю и используй UTF-8, как и все остальные.
Я сам большой фанат RE2, но мне никогда не приходило в голову использовать его на UTF-16. UTF-16 просто не часть моего мира. Как и любая другая устаревшая кодировка, все, что мы получаем в UTF-16, немедленно обновляется до UTF-8, чтобы с ним могла работать вся цепочка инструментов, потому что мы запускаем цепочку из чисто UTF8.
Возможно, вы живете в противоположном мире?