Комментарии 14
Ничего не понял, но звучит очень круто!
Очень круто оптимизировано, но есть ли тут кто-то, кому нужна валидация UTF-8 в чистом виде? Не получение из него codepoints, не итерация по нему, не ещё что-то, а чисто валидация?
Первое что приходит в голову: SMTP-сервер может валидировать тела писем перед доставкой адресату, HTTP-сервер может валидировать тела POST-запросов перед передачей скрипту-обработчику.
Если нужно выполнять разбор длинного текста, где преимущественно не-ASCII символы используются, то довольно полезно иметь быструю предфильтрацию.
Если, к примеру, вам прислали байтовый мусор, а вы большую часть входящего текста уже проитерировали и что-то с ним сделали, то обидно узнать под конец, что можно было даже не начинать получать из него codepoints или делать какой-то более ресурсоёмкий анализ
Есть. Всякие фронты и прокси которые потом это передают дальше и отсекают всякий мусор.
Угу, постоянно применяю fastutf в своем Rspamd, потому что задача валидации utf8 текстов стоит там постоянно и повсюду. Правда, я использую версию от китайца: https://github.com/cyb70289/utf8
который все организовал чуть более удобным для меня способом. Ну и для коротких строк (<64 байт) наивный метод валидации utf оказался быстрее avx2/sse41.
Ну а code points получать тоже приходится, но это потом — вначале нужно понять, не мусор ли у нас на входе, и не надо ли запустить тяжелые эвристики по определению кодировки, например.
Т.е. мусор приходит достаточно часто, чтобы имело смысл валидировать отдельно от парсинга?
Да, весьма часто, а кроме того, если заранее знать, что utf8 валидный, то можно парсить более дешевым способом (в libicu U8_NEXT_UNSAFE вместо U8_NEXT). Хотя я пока это не применял — мне было важнее выбросить мусор пораньше, особенно когда обрабатывается "плохой" трафик, например, со спамтрапов, где как раз стоит вопрос производительности.
Ну если брать тот же раст — то он требует чтобы стрка была валидным UTF8. Поэтому он валидирует вообще все строки которые каким-либо образом появляются в программе (по сети ли, с диска ли). Можно ансейфно создавать строки из набора байт без валидации, но это УБ и так не делают.
Так что да — валидация важна.
Ну а 0.000..1 действительно заняты делом.
п.с.: Сие можно распространить не только на так называемых «программистов», а и вообще на всех «деятельных» хуманов. Планета такая. Что поделать) На 99.9 не очень удачно заселена. И это сильно мягко выражаясь.
п.п.с.: Да да, очень очень скоро ии будет делать всё за вас. Математики не нужны и прочая прочая бредятина. Чей то кэп. (с)
Валидация UTF-8 меньше чем за одну инструкцию на байт