LINUX.ORG.RU

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

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

правда, сейчас наверняка придёт Монк и подкинет ещё какой-нибудь контпримрер

Если реализовывать как

Представление строки как массива графемных кластеров подходит под этот идеал. Здесь нельзя неправильно склеить байтики UTF-8 или суррогаты UTF-16 и сломать строку. Если строку разбить на символы по индексам, а потом склеить — то получится исходная строка (или как минимум что-то очень похожее на неё). Длина строки выдаёт максимальный доступный индекс. Поиск и замена не приводят к весёлым ложным срабатываниям.

то контрпримера не будет. Единственный язык с юникодом, который пошёл по другому пути — это Rust. Хотя у них есть итератор по графемам.

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

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

правда, сейчас наверняка придёт Монк и подкинет ещё какой-нибудь контпримрер

Если реализовывать как

Представление строки как массива графемных кластеров подходит под

этот идеал. Здесь нельзя неправильно склеить байтики UTF-8 или суррогаты UTF-16 и сломать строку. Если строку разбить на символы по индексам, а потом склеить — то получится исходная строка (или как минимум что-то очень похожее на неё). Длина строки выдаёт максимальный доступный индекс. Поиск и замена не приводят к весёлым ложным срабатываниям.

то контрпримера не будет. Единственный язык с юникодом, который пошёл по другому пути — это Rust. Хотя у них есть итератор по графемам.

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