История изменений
Исправление monk, (текущая версия) :
правда, сейчас наверняка придёт Монк и подкинет ещё какой-нибудь контпримрер
Если реализовывать как
Представление строки как массива графемных кластеров подходит под этот идеал. Здесь нельзя неправильно склеить байтики UTF-8 или суррогаты UTF-16 и сломать строку. Если строку разбить на символы по индексам, а потом склеить — то получится исходная строка (или как минимум что-то очень похожее на неё). Длина строки выдаёт максимальный доступный индекс. Поиск и замена не приводят к весёлым ложным срабатываниям.
то контрпримера не будет. Единственный язык с юникодом, который пошёл по другому пути — это Rust. Хотя у них есть итератор по графемам.
Потенциальный подводный камень --- лигатуры. С одной стороны лигатура является одной графемой, с другой стороны, почти всегда работать с ней надо (при поиске и замене) как с отдельными символами.
Исходная версия monk, :
правда, сейчас наверняка придёт Монк и подкинет ещё какой-нибудь контпримрер
Если реализовывать как
Представление строки как массива графемных кластеров подходит под
этот идеал. Здесь нельзя неправильно склеить байтики UTF-8 или суррогаты UTF-16 и сломать строку. Если строку разбить на символы по индексам, а потом склеить — то получится исходная строка (или как минимум что-то очень похожее на неё). Длина строки выдаёт максимальный доступный индекс. Поиск и замена не приводят к весёлым ложным срабатываниям.
то контрпримера не будет. Единственный язык с юникодом, который пошёл по другому пути — это Rust. Хотя у них есть итератор по графемам.
Потенциальный подводный камень --- лигатуры. С одной стороны лигатура является одной графемой, с другой стороны, почти всегда работать с ней надо (при поиске и замене) как с отдельными символами.