LINUX.ORG.RU

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

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

Наличие защит от дурака уже другой вопрос.

Дело не столько в наличии защит от дурака, сколько в том, что когда ты пишешь на C, не допускать ошибок почти невозможно. А система типов в C довольно слабая, поэтому она тебе не поможет их выловить при компиляции и они пойдут в продакшн. Вот в ATS, который компилируется потом в C с этим получше. Если возможно, я бы вообще C не стал использовать.

Я спрашиваю: как перемещать указатель на N символов для юникода?

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

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

Наличие защит от дурака уже другой вопрос.

Дело не столько в наличии защит от дурака, сколько в том, что когда ты пишешь на C, не допускать ошибок почти невозможно. А система типов в C довольно слабая, поэтому она тебе не поможет их выловить при компиляции и они пойдут в продакшн. Вот в ATS, который компилируется потом в C с этим получше.

Я спрашиваю: как перемещать указатель на N символов для юникода?

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