LINUX.ORG.RU

История изменений

Исправление pftBest, (текущая версия) :

Ради выигрыша в тех редких случиев, когда строки будут чисто ascii

Хранить по 4 байта на символ не выгодно даже для русских и китайских букв, не только для ascii. А если хранить по 2 байта на символ (UTF-16), то интерфейс придется делать такой же как для UTF-8 (с вызовом функций) плюс оверхед по памяти для ascii, так что в двойне не выгодно.

Ну и конечно не выгодно конвертировать все строки туда сюда. Автор ripgrep недавно добавил поддержку UTF-16 для виндузятников, и так получается что на конвертацию кодировки уходит больше времени чем на сам поиск подстроки.

что произойдёт если попытаться взять срез строки

Срез строки берется в байтах. Если попытаться поделить строку на границе символа то произойдет panic. Но на деле всегда легко получить смещение в байтах для подстроки или нужного символа. Еще можно самому проверить границу если очень нужно.

вместо пары скобок придётся целую функцию набирать.

А в ассемблере все эти функции полностью инлайнятся, так что код получается очень эффективный.

Исходная версия pftBest, :

Ради выигрыша в тех редких случиев, когда строки будут чисто ascii

Хранить по 4 байта на символ не выгодно даже для русских и китайских букв, не только для ascii. А если хранить по 2 байта на символ (UTF-16), то интерфейс придется делать такой же как для UTF-8 (с вызовом функций) плюс оверхед по памяти для ascii, так что в двойне не выгодно.

Ну и конечно не выгодно конвертировать все строки туда сюда. Автор ripgrep недавно добавил поддержку UCS-2 для виндузятников, и так получается что на конвертацию кодировки уходит больше времени чем на сам поиск подстроки.

что произойдёт если попытаться взять срез строки

Срез строки берется в байтах. Если попытаться поделить строку на границе символа то произойдет panic. Но на деле всегда легко получить смещение в байтах для подстроки или нужного символа. Еще можно самому проверить границу если очень нужно.

вместо пары скобок придётся целую функцию набирать.

А в ассемблере все эти функции полностью инлайнятся, так что код получается очень эффективный.