?

Log in

No account? Create an account
nyaload

Журнал Пушыстого

Журнал Пушыстого

Previous Entry Share Next Entry
fast utf-8 validation
nyaload
_winnie
Наткнулся на простую и быструю библиотеку декодирования UTF-8, кроссплатформенную, с валидацией всех возможных ошибок в utf-8 (overlong, surrogate pairs) - http://bjoern.hoehrmann.de/utf-8/decoder/dfa , без бранчинга ( «?:» заменяется на стандатный битхак mask=((int)x-1)>>31), легко векторизуется до чтения dword/qword. Декодирование рассматривается как конечный автомат, конечный автомат загонятся в таблицу [char x state] →state

Протестировал брутфорсом, работает эквивалентно iconv (в плюс iconv - он умеет детектить суррогатные пары, но что с ними делать - оставляет решать пользователю).

Не законом Мура единым ускоряем софт
Tags:


  • 1
В первом примере компилятор вообще не знает, какой длины будет цикл (счётчик задаётся из внешнего массива), а здесь - компилятору доступна вся информация о зависимости между Char и количеством итераций (плюс компилятор точно знает, что Len - мало, имеет смысл сразу цикл разворачивать). Вот из этих соображений.

А как оно на самом деле на Intel'е будет - надо мерять.

  • 1